По просьбам трудящихся выкладываю свою рабочую лошадку:
4-я строка FIRMS_LIST — «фирма», например из «позиций по клиентским счетам».
9-я ClientCode — «код клиента», например из «таблицы заявок».
10-я Depo — «торговый счет», например из «позиций по клиентским счетам».
11-я ClassCodeList — «код класса бумаги» для FInstrument из «таблицы заявок».
14-я Instrument — «код бумаги» от цены которой зависит выставление заявки.
15-я FInstrument — «код бумаги», по которой выставляется заявка.
21-я Operation «B» — покупка, «S» — продажа.
22 Volume — количество лотов в заявке.
23, 24, 25 — время для заявки по времени.
26 Delta — если 0, заявка пойдет по цене последней сделки на момент срабатывания, если нет — то с указанным сдвигом по цене.
27 PriceControl — если 0 — заявка по времени, -1 — заявка, если цена Instrument падает ниже PCLevel, 1 — заявка, если цена Instrument поднимается выше PCLevel.
28 PCLevel — уровень для PriceControl.
Цена Instrument берется из часовой диаграммы (закрытие предыдущей свечки). Создаем в квике диаграмму на инструмент, интервал 1 час. Правой кнопкой мыши на свечку => «Редактировать» => «Дополнительно», здесь указываем «Идентификатор». Такое же значение присваиваем переменной Instrument.
Последний параметр «Выход» = 0 пока условие для выставления заявки не выполнено, 1 — после выставления заявки.
После выставления заявки, дабы избежать всяких случайностей / неприятностей рекомендую кликнуть правой кнопкой мыши по табличке робота и выбрать «приостановить расчет», после чего закрыть табличку.
Сохраняем в текстовый файл с расширением .qpl
В квике идем в «Сервисы» => «QPILE скрипты...»
нажимаем «Добавить», выбираем файл, жмем «Загрузить локально» и «Создать таблицу», выбираем параметры, которые хотим видеть в таблице.
Для желающих погрузиться в эту тему советую скачать описание языка qpile отсюда:
arqatech.com/upload/iblock/04f/Doc725.zip
PORTFOLIO_EX Time_public;
DESCRIPTION Time_public;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST 00000;
PROGRAM
' ОБЪЯВЛЯЕМ КОНСТАНТЫ
ClientCode = ""
Depo = ""
ClassCodeList = «SPBFUT»
'=============================================
Instrument = «SBER»
FInstrument = «RIH9»
'=============================================
'=============================================
'============== Параметры ================
'=============================================
Operation = «B»
Volume = 10
XHour = 14
XMin = 40
XSec = 0
Delta = 0
PriceControl = 0 ' -1 — <, 0 — без контроля, 1 — >
PCLevel = 120.3
'=============================================
Data = GET_DATETIME()
Hour = GET_VALUE(Data,«HOUR») + 0
Min = GET_VALUE(Data,«MIN»)+0
Sec = GET_VALUE(Data,«SEC»)+0
Output = CREATE_MAP()
' Не первый расчет
IF GET_NUMBER_OF(«OWN») > 0
OwnRow = GET_ITEM(«OWN»,1)
FClose = GET_PARAM(ClassCodeList,FInstrument,«LAST») + 0
Output = SET_VALUE(Output,«p_close»,FClose)
Ext = GET_VALUE(OwnRow,«p_ext») + 0
IF (Ext = 0) AND (FClose <> 0) AND (Hour = XHour) AND (Min = XMin) AND (Sec >= XSec)
IF PriceControl = 0
IF Operation = «S»
FClose = FClose — Delta
ELSE
FClose = FClose + Delta
END IF
fNewOrder(Operation,Volume,FClose)
Output = SET_VALUE(Output,«p_ext»,1)
ELSE
Year = GET_VALUE(Data,«YEAR») + 0
Month = GET_VALUE(Data,«MONTH») + 0
Day = GET_VALUE(Data,«DAY») + 0
TextData = Year & fFormDat(Month) & fFormDat(Day)
TextTime = fFormDat(Hour — 1) & fFormDat(Min) & «00»
CandlePrice = GET_CANDLE_EX(Instrument,TextData,TextTime)
Close = GET_VALUE(GET_COLLECTION_ITEM(GET_VALUE(CandlePrice,«LINES»),0),«CLOSE») + 0
IF ((PriceControl = — 1) AND (Close < PCLevel)) OR ((PriceControl = 1) AND (Close > PCLevel))
IF Operation = «S»
FClose = FClose — Delta
ELSE
FClose = FClose + Delta
END IF
fNewOrder(Operation,Volume,FClose)
Output = SET_VALUE(Output,«p_ext»,1)
END IF
END IF
END IF
Output = SET_VALUE(Output,«p_time»,fFormDat(XHour) & ":" & fFormDat(XMin) & ":" & fFormDat(XSec))
' Output = SET_VALUE(Output,«p_time»,fFormDat(Hour) & ":" & fFormDat(Min) & ":" & fFormDat(Sec))
MODIFY_ITEM(1,Output)
' Первый расчет (пропускаем из-за глюка — уходит в себя при старте без данных)
ELSE
Output = SET_VALUE(Output,«p_ext»,0)
Output = SET_VALUE(Output,«p_oper»,Operation)
Output = SET_VALUE(Output,«p_volume»,Volume)
Output = SET_VALUE(Output,«p_time»,fFormDat(XHour) & ":" & fFormDat(XMin) & ":" & fFormDat(XSec))
' Output = SET_VALUE(Output,«p_time»,fFormDat(Hour) & ":" & fFormDat(Min) & ":" & fFormDat(Sec))
IF PriceControl <> 0
Output = SET_VALUE(Output,«p_level»,PCLevel)
END IF
ADD_ITEM(1,Output)
END IF
' ===========================================
' ===== ФУНКЦИЯ ФОРМАТИРОВАНИЯ ДАТЫ =====
' ===========================================
FUNC fFormDat(d)
IF LEN(d) < 2
d = «0» & d
END IF
RESULT = d
END FUNC
' ===========================================
' ==============================================================
' =========== ФУНКЦИЯ ДЛЯ ВЫСТАВЛЕНИЯ ЗАЯВКИ ===============
' ==============================================================
FUNC fNewOrder(pOper,pQuant,pPrice)
TransID = GET_NUMBER_OF(«ORDERS»)+1
NEW_GLOBAL(«TransParams»,"")
NEW_GLOBAL(«TransResult»,"")
TransParams = ""
TransParams = SET_VALUE(TransParams,«TRANS_ID»,TransID & "")
TransParams = SET_VALUE(TransParams,«ACTION»,«NEW_ORDER»)
TransParams = SET_VALUE(TransParams,«CLASSCODE»,ClassCodeList)
TransParams = SET_VALUE(TransParams,«SECCODE»,FInstrument)
TransParams = SET_VALUE(TransParams,«ACCOUNT»,Depo)
TransParams = SET_VALUE(TransParams,«OPERATION»,pOper)
TransParams = SET_VALUE(TransParams,«PRICE»,pPrice & "")
TransParams = SET_VALUE(TransParams,«QUANTITY»,pQuant & "")
TransParams = SET_VALUE(TransParams,«CLIENT_CODE»,ClientCode)
TransParams = SET_VALUE(TransParams,«TYPE»,«L»)
TransResult = SEND_TRANSACTION(30,TransParams)
Result = TransID
END FUNC
' ==============================================================
END_PROGRAM
PARAMETER p_level;
PARAMETER_TITLE Уровень;
PARAMETER_DESCRIPTION Условный уровень выхода;
PARAMETER_TYPE NUMERIC(3,2);
END
PARAMETER p_time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время сигнала;
PARAMETER_TYPE STRING(8);
END
PARAMETER p_close;
PARAMETER_TITLE Закрытие;
PARAMETER_DESCRIPTION Цена закрытия свечи;
PARAMETER_TYPE NUMERIC(3,2);
END
PARAMETER p_oper;
PARAMETER_TITLE Операция;
PARAMETER_DESCRIPTION Операция;
PARAMETER_TYPE STRING(4);
END
PARAMETER p_volume;
PARAMETER_TITLE Объём;
PARAMETER_DESCRIPTION Объём;
PARAMETER_TYPE NUMERIC(4,0);
END
PARAMETER p_ext;
PARAMETER_TITLE Выход;
PARAMETER_DESCRIPTION Выход;
PARAMETER_TYPE NUMERIC(1,0);
END
END_PORTFOLIO_EX