Блог им. bsk

Как в Quik на языке Qpile совместить несколько стратегий по одному инструменту

Встала задача на одном счете торговать разные стратегии по одному инструменту.
В Quik все стирается после вечернего клиринга, поэтому пришлось воспользоваться текстовыми файлами.
Дано: 2 стратегии на одном инструменте.
Одна трендовая, другая флетовая. Суммы на обе стратегии от депозита разные:
Флетовая 200т.р. (20 контрактов), Трендовая 300т.р. (30 контрактов)
Количество контрактов должно варьироваться от эквити стратегий, т.е. если эквити Трендовой станет 330т.р., то начнем торговать 31 контракт.

Реализация (ВЫДЕРЖКИ — САМОЕ ГЛАВНОЕ):


PATHTREND=«C:\1\TREND.txt»    ' ПУТЬ К ПАПКЕ ГДЕ ЛЕЖИТ ФАЙЛ ПО ТРЕНДОВОЙ СТРАТЕГИИ
PATHFLET=«C:\1\FLET.txt»          ' ПУТЬ К ПАПКЕ ГДЕ ЛЕЖИТ ФАЙЛ ДЛЯ ФЛЕТОВОЙ СТРАТЕГИИ
ERROR=0
TPSUM=0                                   ' ТЕКУЩЕЕ КОЛИЧЕСТВО КОНТРАКТОВ ПО ОБОИМ СТРАТЕГИЯМ
LOTS=0                                     'КОЛИЧЕСТВО ЛОТОВ ДЛЯ СОВЕРШЕНИЯ СДЕЛКИ
IF 'УСЛОВИЕ НА ПОКУПКУ ПО ТРЕНДОВОЙ СТРАТЕГИИ
  TPSUM=TPSUM+MANY(PATHTREND,1)+0
END IF
IF 'УСЛОВИЕ НА ПРОДАЖУ ПО ТРЕНДОВОЙ СТРАТЕГИИ
  TPSUM=TPSUM-MANY(PATHTREND,-1)+0
END IF

IF 'УСЛОВИЕ НА ПОКУПКУ ПО ФЛЕТОВОЙ СТРАТЕГИИ
  TPSUM=TPSUM+MANY(PATHFLET,1)+0
END IF
IF 'УСЛОВИЕ НА ПРОДАЖУ ПО ФЛЕТОВОЙ СТРАТЕГИИ
  TPSUM=TPSUM-MANY(PATHFLET,-1)+0
END IF

'========= ОТПРАВКА СИГНАЛА SHORT
IF TP>TPSUM AND TP<>TPPREV        'TP ТЕКУЩАЯ ПОЗИЦИЯ ПО ИНСТРУМЕНТУ. TPPREV ПРЕДЫДУЩАЯ
  LOTS=TP-TPSUM
  SELL(LOTS)
  TPPREV=TP
END IF
'========= ОТПРАВКА СИГНАЛА LONG
IF TP<TPSUM AND TP<>TPPREV
  LOTS=TPSUM-TP
  BUY(LOTS)
  TPPREV=TP
END IF
 
' ФУНКЦИЯ ДЛЯ РАССЧЕТ КОЛИЧЕСТВА КОНТРАКТОВ И ЭКВИТИ
FUNC MANY(FPATH,FN,FPATH2)
  LONGORSHORT=READ_LINE (FPATH,2, ERROR)+0     ' ПРЕДЫДУЩАЯ ПОЗИЦИЯ (1 ЛОНГ. -1 ШОРТ)
  IF FN<>LONGORSHORT
    EQUITYPREV=READ_LINE (FPATH,1, ERROR)+0       ' ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ ЭКВИТИ
    KOLPREV=READ_LINE (FPATH,3, ERROR)+0            ' ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ КОЛИЧЕСТВА КОНТРАКТОВ
    PRICEENTER=READ_LINE (FPATH,4, ERROR)+0        ' ЦЕНА ВХОДА В ПОЗИЦИЮ
    PROFIT=0
        IF LONGORSHORT<0
            PROFIT=KOLPREV*(PRICEENTER-PRICEEXIT)+0 ' РАСЧЕТ ПРОФИТА
        END IF
        IF LONGORSHORT>0
            PROFIT=KOLPREV*(PRICEEXIT-PRICEENTER)+0 ' РАСЧЕТ ПРОФИТА
        END IF
    EQUITY=EQUITYPREV+PROFIT                                   ' РАСЧЕТ ЭКВИТИ
    KOL=FLOOR(EQUITY/(PROC*GO))+0                        ' РАСЧЕТ КОЛИЧЕСТВА КОНТРАКТОВ ДЛЯ ТЕКУЩЕЙ СДЕЛКИ
    CLEAR_FILE(FPATH)                                                  ' СТИРАЕМ ВСЕ В ФАЙЛЕ
    WRITELN (FPATH, EQUITY)                                        ' ЗАПИСЫВАЕМ НОВЫЕ ЗНАЧЕНИЯ В ФАЙЛ
    WRITELN (FPATH, FN)
    WRITELN (FPATH, KOL)
    WRITELN (FPATH, PRICEEXIT)
    RESULT=KOL
  END IF
  IF FN=LONGORSHORT
    KOLPREV=READ_LINE (FPATH,3, ERROR)+0
    RESULT=KOLPREV
  END IF
END FUNC


В txt файле для Трендовой стратегии построчно:

300000    'ЗНАЧЕНИЕ ЭКВИТИ
0   'ПРЕДЫДУЩАЯ ПОЗИЦИЯ (1 ЛОНГ. -1 ШОРТ) 
0    'ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ КОЛИЧЕСТВА КОНТРАКТОВ 
0   'ЦЕНА ВХОДА В ПОЗИЦИЮ

После первой сделки все автоматом будет перезаписываться, пример:
301000
-1
30
35000 
 

 

 
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
340 | ★6
14 комментариев
Одновременно торговать:
— более одной стратегией
— на один и тот же инструмент
— по одному торговому счету
у вас не получиться на каком бы языке вы не кодили.
Допустим Тренд стратегия +10, а флет стратегия -10, итого по счету открытых позиций 0.
Это тогда надо называть — трендфлет стратегия.
avatar
Egorax, Если на Тренд и Флет в какой-то момент времени одинаковое количество контрактов, то на какой то период может быть кеш, пока обе не станут в лонг или в шорт.
Если +30 Тренд и +20 Флет = + 50
Потом флетовая -20 общая позиция = +10
avatar
robot_bsk, я лишь высказал свою точку зрения. Ваше право хоть пять стратегий запустить — главное что бы плюс генерировался.
Правда Qpile умер, пора как минимум на LUA переходить в КВИКЕ.
avatar
Egorax, Согласен, но руки не доходят и ЛЕНЬ выискивать баги в LUA, как в Qpile. Мне расчет Qpile в 1 секунду хватает. Как будет время займусь LUA :-)
avatar
засунь обе стратегии в одну и все, и вообще давно пора на C# писать
avatar
SHCHUTUSHCHA, на С# пишу, но плохо. Для меня Pascal родной.
Почему пишу на Qpile:
1) ЛЕНЬ изучать что-то новое, я лучше буду тестировать новые стратегии.
2) Не люблю всякие адаптеры DDE, API и т.д. (есть шанс что глюканет). Люблю, когда все в одном ПО.
3) Сделок мало и расчетов тоже, зачем мне C#?
4) Я знаю, как глючит Quik и выдает 0 в начале свечи или старую тек. чист. поз. после сделки и т.д. На все эти глюки стоят заглушки. Как это прописать в C# я даже голову не хочу ломать.
5) Quik стоит на виртуальном сервере, а дополнительное ПО (wealth-lab, amibroker и т.д.) будет отжирать оперативку

Обе стратегии запихать в одну не получиться, т.к. манименеджмент для каждой рассчитывается отдельно. Если начнутся тренды, то кол-во контрактов для Трендовой вырастет, а у Флетовой сократиться или останется прежней.
avatar
robot_bsk, можно объеденить учитывая манименеджмент
avatar
skatino, Согласен, вот я и объединил их в одном роботе, который реально торгует, но тестировал я обе стратегии отдельно друг от друга.
avatar
robot_bsk, если есть интерес к LUA могу несколько уроков по основам преподать, а в нюансах сам дальше разберешься.
avatar
Egorax, С удовольствием, добавь меня в друзья. Сам не могу, рейта не хватает
avatar
robot_bsk, я без рейтинга, здесь недавно.
Quik форум — дом родной))))
egorax@gmail.com
avatar
finstrateg, Верно :-)
avatar
У меня DDE экспорт на Delphi и С++ стабильно работают.
Спасибо разрабам.
avatar

Читайте на SMART-LAB:
Фото
Рынок металлов распадается: кто выиграет в 2026 году?
Раньше драгоценные металлы вели себя синхронно: с 2022 года котировки золота, серебра и платины выросли кратно. Но к 2026 году рынок разделился. В...
Фото
EUR/USD держится у 1,1550: рынок труда США готовит доллару главную проверку
В четверг евро немного отступает против доллара. Пара EUR/USD держится около 1,1550 и почти не выходит за пределы узкого диапазона. Главным...
Сегодня совет директоров Диасофта по дивидендам, какой дивиденд может быть объявлен?
Считаем потенциальный див Диасофта: На 31 марта 2026 в отчетности Дисофта: 1,36 млрд был кэш 2,1 дебиторка Диасофту нужно примерно 2-2,5...
Фото
Лента МСФО 2 кв. 2026 г. - Окей, а где прибыль?
Лента опубликовала финансовые результаты за 2 квартал 2026 года.  Выручка компании выросла на 28,8% во 2 квартале до 341,6 млрд руб. В 1...

теги блога robot_bsk

....все тэги



UPDONW
Новый дизайн