Блог им. 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 
 

 

 
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
328 | ★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 году становится для российских компаний одним из ключевых элементов финансовой устойчивости. Выбор между...
Как сокращение покупок валюты Минфином повлияет на рубль?
Биржевой курс пары CNY/RUB на торгах 6 июля консолидируется у отметки 11,45. При этом на внебиржевых торгах пара USD/RUB поднялась на 3 руб., до...
Фото
Что обсудили на Финансовом конгрессе 2026 и каких изменений ждать на страховом рынке
На днях в Петербурге завершился Финансовый конгресс Банка России. Попытаемся сделать краткое резюме обсуждений, касающихся страхового рынка....
Фото
Интер РАО. Цена min за 10 лет. Пора покупать?
Последние месяцы наш фондовый рынок снижается, но я не буду разбираться в причинах (про них говорят все кому не лень), а поговорим по...

теги блога robot_bsk

....все тэги



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