Торговый робот «Пробойный». Часть третья
Вот мы и добрались до сердца торгового робота — алгоритма условий торговли. Проще говоря, именно этот алгоритм отвечает за определение момента отправки транзакций в торговую систему. В торговой системе, в свою очередь, наша транзакция проходит обычный путь от заявки в таблице заявок, если условия в заявке пройдут проверку торговой системой на правильность цены, на ее соответствие установленному лимиту, до сделки, если заявка исполнится. Все точно так же, как если б мы торговали руками.
Единственное визуальное отличие — это идентификатор ID транзакции, который в наших роботах будет генерироваться на основании даты и времени, и соответственно будет всегда уникальным, а при торговле вручную идентификатор определяется торговой системой. Так же не забывайте основу, у заявки есть номер, который присваивается торговой системой, когда на основании заявки получается сделка — у нее есть параметр «номер заявки», по которому мы можем легко определить заявку, которая породила сделку. То же самое можно сказать и о стоп-заявках, достаточно добавить слово «стоп» перед словом заявка в последнем абзаце.
Итак, перейдем к алгоритму. Внимательно еще раз прочитав статью "Торговая стратегия «Пробойная», мы можем составить следующую последовательность условий:
Если можно торговать, то Если текущая чистая позиция равна нулю (у нас нет открытых позиций),то Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то Если текущая цена больше или равна уровню ХАЙ, то Купить кол-во LOTS Если текущая цена меньше или равно уровню ЛОУ, то Продать кол-во LOTS Если текущая чистая позиция меньше нуля (у нас открытая короткая позиция), то Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то Если текущая цена больше или равна уровню ХАЙ, то Купить кол-во LOTS умноженное на 2 (реверс) Если текущая цена меньше или равно уровню ЛОУ, то Продать кол-во LOTS умноженное на 2 (реверс) Если текущая чистая позиция больше нуля (у нас открытая длинная позиция), то Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то Если текущая цена больше или равна уровню ХАЙ, то Купить кол-во LOTS умноженное на 2 (реверс) Если текущая цена меньше или равно уровню ЛОУ, то Продать кол-во LOTS умноженное на 2 (реверс) Если текущая чистая позиция меньше нуля (у нас открытая короткая позиция), то Если количество активных стоп-заявок не равно единице, то Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то Выставить стоп-заявку на покупку кол-ва LOTS по цене ЛОУ+стоплосс Если текущая чистая позиция больше нуля (у нас открытая длинная позиция), то Если количество активных стоп-заявок не равно единице, то Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то Выставить стоп-заявку на покупку кол-ва LOTS по цене ХАЙ-стоплосс
Вот такой хитрый алгоритм, который заранее предусматривает развитие ситуации. Теперь непосредственно реализация данного алгоритма на языке QPILE:
Код на QPILE доступен только зарегистрированным пользователям.
В следующий раз, мы будем описывать функции робота: торговые, пауза, удаление активных стопзаявок, уже известную нам функцию получения котировок из графика QUIK, и затем будем уже складывать полученные части и готовиться к тестам на учебных счетах!
Спасибо Евгений, обещаю что когда заработаю на это стратеги щедро вас отблагодарю.
Евгений Reply:
апреля 20, 2009 at 17:24
Записал!
Зачем нужно PAUSE (3000) ?
Евгений Reply:
апреля 30, 2009 at 9:22
Надо 3000 изменить на 3. Это пауза 3 секунды после отправки транзакции.
А зачем нужна эта пауза ?
Евгений Reply:
мая 1, 2009 at 10:58
Эта пауза — атавизм, который остался от прежней версии, можно ее удалить.
Вы отлично разбираетесь в коде!
Добрый день, Евгений.
А знаете ли Вы, что декларированный алгоритм Пробойного
И приведенная программа не идентичны?
02.Если TP=0 нет позиций и (nOrderAct=0), то
04.Если (vPriceFresh>=vHigh), то Купить nLOTS
06.Если (vPriceFresh<=vLow), то Продать nLOTS
08.Если TP=vHigh), то Купить nLOTS*2 (реверс)
12.Если (vPriceFresh0 (длинная) и (nOrderAct=0), то
Если (vPriceFresh>=vHigh), то Купить nLOTS*2 (реверс)
Если (vPriceFresh<=vLow), то Продать nLOTS*2 (реверс)
20.Если TP<0 короткая, и (nOrderStop1), и (nOrderAct=0)
выставить стоп-заявку на покупку кол-ва nLOTS по цене ЛОУ+стоплосс
24.Если TP>0 (длинная), и (nOrderStop1), и (nOrder=0), то
Выставить стоп-заявку на покупку кол-ва nLOTS по цене ХАЙ-стоплосс
Подтвердите алгоритм или поправьте программу.
Кстати пауза измеряется в милисекундах и 3000 = 3 сек.
Спасибо
Жаль форматирование текста пропало, А как отправить файл не знаю.
Евгений Reply:
октября 22, 2009 at 9:23
Привет. Я что-то не совсем понял о чем идет речь. В каком месте несоответствие?
Где вы это вообще взяли?? И куда дели знаки сравнения?
SSTATUS — это объявленная переменная, ее хоть SSSSTATUS можно назвать. И про классические алгоритмы, я с удовольствием посмотрю на иной алгоритм получения котировок по номеру бара на Qpile.