robot_bsk
robot_bsk личный блог
13 мая 2014, 19:16

Как в 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 
 

 

 
14 Комментариев
  • Egorax
    13 мая 2014, 19:30
    Одновременно торговать:
    — более одной стратегией
    — на один и тот же инструмент
    — по одному торговому счету
    у вас не получиться на каком бы языке вы не кодили.
    Допустим Тренд стратегия +10, а флет стратегия -10, итого по счету открытых позиций 0.
    Это тогда надо называть — трендфлет стратегия.
      • Egorax
        13 мая 2014, 20:32
        robot_bsk, я лишь высказал свою точку зрения. Ваше право хоть пять стратегий запустить — главное что бы плюс генерировался.
        Правда Qpile умер, пора как минимум на LUA переходить в КВИКЕ.
  • SHCHUTUSHCHA
    13 мая 2014, 19:34
    засунь обе стратегии в одну и все, и вообще давно пора на C# писать
      • skatino
        13 мая 2014, 21:24
        robot_bsk, можно объеденить учитывая манименеджмент
          • Egorax
            13 мая 2014, 21:47
            robot_bsk, если есть интерес к LUA могу несколько уроков по основам преподать, а в нюансах сам дальше разберешься.
              • Egorax
                13 мая 2014, 22:14
                robot_bsk, я без рейтинга, здесь недавно.
                Quik форум — дом родной))))
                egorax@gmail.com
  • Egorax
    13 мая 2014, 21:50
    У меня DDE экспорт на Delphi и С++ стабильно работают.
    Спасибо разрабам.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн