Встала задача на одном счете торговать разные стратегии по одному инструменту.
В 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
— более одной стратегией
— на один и тот же инструмент
— по одному торговому счету
у вас не получиться на каком бы языке вы не кодили.
Допустим Тренд стратегия +10, а флет стратегия -10, итого по счету открытых позиций 0.
Это тогда надо называть — трендфлет стратегия.
Спасибо разрабам.