Главная > Торговый робот > Торговый робот «Пробойный». Часть третья

Торговый робот «Пробойный». Часть третья

11 апреля 2009

Торговый роботВот мы и добрались до сердца торгового робота — алгоритма условий торговли. Проще говоря, именно этот алгоритм отвечает за определение момента отправки транзакций в торговую систему. В торговой системе, в свою очередь, наша транзакция проходит обычный путь от заявки в таблице заявок, если условия в заявке пройдут проверку торговой системой на правильность цены, на ее соответствие установленному лимиту, до сделки, если заявка исполнится. Все точно так же, как если б мы торговали руками.

Единственное визуальное  отличие — это идентификатор ID транзакции, который в наших роботах будет генерироваться на основании даты и времени, и соответственно будет всегда уникальным, а при торговле вручную идентификатор определяется торговой системой. Так же не забывайте основу, у заявки есть номер, который присваивается торговой системой, когда на основании заявки получается сделка — у нее есть параметр «номер заявки», по которому мы можем легко определить заявку, которая породила сделку. То же самое можно сказать и о стоп-заявках, достаточно добавить слово «стоп» перед словом заявка в последнем абзаце.

Итак, перейдем к алгоритму. Внимательно еще раз прочитав статью "Торговая стратегия «Пробойная», мы можем составить следующую последовательность условий:

Если можно торговать, то
Если текущая чистая позиция равна нулю (у нас нет открытых позиций),то
Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то
Если текущая цена больше или равна уровню ХАЙ, то
Купить кол-во LOTS
Если текущая цена меньше или равно уровню ЛОУ, то
Продать  кол-во LOTS
Если текущая чистая позиция меньше нуля (у нас открытая короткая позиция), то
Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то
Если текущая цена больше или равна уровню ХАЙ, то
Купить кол-во LOTS умноженное на 2 (реверс)
Если текущая цена меньше или равно уровню ЛОУ, то
Продать  кол-во LOTS умноженное на 2 (реверс)
Если текущая чистая позиция больше нуля (у нас открытая длинная позиция), то
Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то
Если текущая цена больше или равна уровню ХАЙ, то
Купить кол-во LOTS умноженное на 2 (реверс)
Если текущая цена меньше или равно уровню ЛОУ, то
Продать  кол-во LOTS умноженное на 2 (реверс)
Если текущая чистая позиция меньше нуля (у нас открытая короткая позиция), то
Если количество активных стоп-заявок не равно единице, то
Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то
Выставить стоп-заявку на покупку кол-ва LOTS по цене ЛОУ+стоплосс
Если текущая чистая позиция больше нуля (у нас открытая длинная позиция), то
Если количество активных стоп-заявок не равно единице, то
Если количество активных заявок равно нулю (в настоящий момент у нас ничего не исполняется), то
Выставить стоп-заявку на покупку кол-ва LOTS по цене ХАЙ-стоплосс

Вот такой хитрый алгоритм, который заранее предусматривает развитие ситуации. Теперь непосредственно реализация данного алгоритма на языке QPILE:

Код на QPILE доступен только зарегистрированным пользователям.

В следующий раз, мы будем описывать функции робота: торговые, пауза, удаление активных стопзаявок, уже известную нам функцию получения котировок из графика QUIK, и затем будем уже складывать полученные части и готовиться к тестам на учебных счетах!

Евгений Торговый робот , ,

  1. 20 Апрель 2009 в 15:58 | #1

    Спасибо Евгений, обещаю что когда заработаю на это стратеги щедро вас отблагодарю.

    Евгений Reply:

    Записал! :)

  2. Pulsarr
    30 Апрель 2009 в 04:29 | #2

    Зачем нужно PAUSE (3000) ?

    Евгений Reply:

    Надо 3000 изменить на 3. Это пауза 3 секунды после отправки транзакции.

  3. Pulsarr
    1 Май 2009 в 04:46 | #3

    А зачем нужна эта пауза ?

    Евгений Reply:

    Эта пауза — атавизм, который остался от прежней версии, можно ее удалить.

    Вы отлично разбираетесь в коде!

  4. qsn
    20 Октябрь 2009 в 22:23 | #4

    Добрый день, Евгений.

    А знаете ли Вы, что декларированный алгоритм Пробойного

    И приведенная программа не идентичны?

    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 сек.

    Спасибо

  5. qsn
    20 Октябрь 2009 в 22:27 | #5

    Жаль форматирование текста пропало, А как отправить файл не знаю.

    Евгений Reply:

    Привет. Я что-то не совсем понял о чем идет речь. В каком месте несоответствие?

  6. Евгений
    22 Октябрь 2009 в 13:37 | #6

    Где вы это вообще взяли?? И куда дели знаки сравнения?

    SSTATUS — это объявленная переменная, ее хоть SSSSTATUS можно назвать. И про классические алгоритмы, я с удовольствием посмотрю на иной алгоритм получения котировок по номеру бара на Qpile.

Необходимо войти на сайт, чтобы написать комментарий.