Author Archive
Автор: Николай Камынин
В процессе написания торговой системы на QPILE для QUIK я разрабатывал различные тестовые программы. Ниже приведен тестовый вариант одного из алгоритмов.
Все алгоритмы принятия решения я разделяю на два класса.
К первому классу относятся методы(алгоритмы), основанные на истории сделок, т.е. данные алгоритмы смотрят в прошлое и на прошлом опыте прогнозируют будущее, т.е. принимают решение.
Ко второму классу относятся методы(алгоритмы), основанные на намерениях (желаниях) участников рынка – эти алгоритмы для принятия решения используют информацию о котировках, т.е. информацию в “стакане” и на ее основе принимают решение.
Ниже приведена программа алгоритма второго класса.
Суть алгоритма сводится к поиску в стакане заявки, которую я называю “забором”,т.е. заявки существенно большей, чем средняя заявка по стакану. Именно эти заявки определяют очень часто точки разворота или пробоя. Определяя их , можно строить стратегию торговлю, располагая свои ордера перед или за забором.
Приведенную ниже программу предлагаю рассматривать , как пример для практического освоения языка QPILE.
Изучайте, развивайте, спрашивайте.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FUNC QUOTES_WORK_1() ‘ поиск забора
‘ описание алгоритма
‘ ищем среднее число заявок в стакане
‘ после этого ищем первое значение выше среднего
MAP2=GET_QUOTES_II_LEVEL_DATA (ClassCode, SecCode)
‘———
BID_COUNT=0+GET_VALUE(MAP2,»BID_COUNT») ‘глубина стакана на покупку
IF BID_COUNT==0
RETURN
END IF
OFFER_COUNT=0+GET_VALUE(MAP2,»OFFER_COUNT») ‘глубина стакана на покупку
IF OFFER_COUNT==0
RETURN
END IF
‘——————
BID=GET_VALUE(MAP2,»BID») ‘коллекция котировок от минимальной цены к максимал покупка правильно
OFFER=GET_VALUE(MAP2,»OFFER») ‘коллекция котировок от минимальной цены к максимал продажу инверсный счет
SUM_BID=0
SUM_OFFER=0
QUANTITY_OFFER_FIRST=0
PRICE_OFFER_FIRST=0
QUANTITY_BID_FIRST=0
PRICE_BID_FIRST=0
IND_OFFER=0
IND_BID=0
‘ BREAKPOINT()
‘——————
FOR Index FROM 0 TO BID_COUNT-1
Index2=BID_COUNT-1-Index
MAP1=Get_Collection_Item (BID,Index2) ‘котировка покупки
PRICE_BID=0+GET_VALUE(MAP1,»PRICE») ‘цена
QUANTITY_BID=0+GET_VALUE(MAP1,»QUANTITY») ‘количество
SUM_BID=SUM_BID+QUANTITY_BID
END FOR
SUM_BID=SUM_BID/BID_COUNT
‘ поиск первого значения в стакане больше среднего
FOR Index FROM 0 TO BID_COUNT-1
Index2=BID_COUNT-1-Index
MAP1=Get_Collection_Item (BID,Index2) ‘котировка покупки
PRICE_BID=0+GET_VALUE(MAP1,»PRICE») ‘цена
QUANTITY_BID=0+GET_VALUE(MAP1,»QUANTITY») ‘количество
IF QUANTITY_BID>SUM_BID
QUANTITY_BID_FIRST=QUANTITY_BID
PRICE_BID_FIRST=PRICE_BID
IND_BID=Index
BREAK
END IF
END FOR
‘—————
FOR Index FROM 0 TO OFFER_COUNT-1
MAP1=Get_Collection_Item (OFFER,Index) ‘котировка на продажу
PRICE_OFFER=0+GET_VALUE(MAP1,»PRICE») ‘цена
QUANTITY_OFFER=0+GET_VALUE(MAP1,»QUANTITY») ‘количество
SUM_OFFER=SUM_OFFER+QUANTITY_OFFER
END FOR
SUM_OFFER=SUM_OFFER/OFFER_COUNT
‘ поиск первого значения в стакане больше среднего
FOR Index FROM 0 TO OFFER_COUNT-1
MAP1=Get_Collection_Item (OFFER,Index) ‘котировка продажу
PRICE_OFFER=0+GET_VALUE(MAP1,»PRICE») ‘цена
QUANTITY_OFFER=0+GET_VALUE(MAP1,»QUANTITY») ‘количество
IF QUANTITY_OFFER>SUM_OFFER
QUANTITY_OFFER_FIRST=QUANTITY_OFFER
PRICE_OFFER_FIRST=PRICE_OFFER
IND_OFFER=Index
BREAK
END IF
END FOR
‘——————-
END FUNC
Tags: QPILE, QUIK, скальпирование, технический анализ, торговый робот, фордовый рынок