Как зациклить действия триггера
Разберем на примере, как зацикливать одну и ту же операцию на каком-либо исходе с помощью триггеров. Мы рассмотрим, каким образом группировать действия и повторять их при определенных условиях.
Вот типичная ситуация: ставим ПРОТИВ второго фаворита, уравниваем прибыль и, если все ставки в паре, то повторяем до упора.
Разобъем это утверждение на несколько частей: с этого всегда стоит начинать работу над триггерами. Вот какие действия нам необходимо выполнить:
- Сделать ставку ПРОТИВ второго фаворита
- Уравнять прибыль на исходе, против которого была сделана ставка
- Повторить указанные действия, если все ставки в паре
С чего начать
Начнем с простого и реализуем первые два пункта.
Эти триггеры достаточно понятны сами по себе. Если я их применю в случайно выбранном рынке скачек, вот что я получу:
А теперь сделаем так, чтобы эти ставки повторялись, т.е. ставка - уравнивание - ставка - уравнивание и т.д. Этого можно достичь, повторяя блок с триггерами.
По умолчанию любой блок повторяется “один раз”. Это означает, что любой триггер из этого блока может сработать только один раз в отдельно взятом рынке (если только это не противоречит настройкам самого триггера). Если вам нужно, чтобы один или несколько триггеров повторились в одном и том же рынке несколько раз, возможно, на одном и том же исходе, тогда вам нужно сгруппировать эти триггеры в блок, который затем повторить.
Зацикливаем триггеры
Изменим свойство "Повторять" у нашего блока с "один раз" на "не чаще, чем 5 сек.”.
Слова “не чаще, чем 5 сек.” на самом деле означают, что блок будет повторяться раз в 5 секунд или реже, в зависимости от частоты обновления рынка.
Довольно часто на этом и бросают работу над триггером, хотя это грубая ошибка. Программе нужно дать понять, при каких обстоятельствах триггеры должны повторяться. Для этого добавим специальный триггер с действием "закрыть блок".
При срабатывании этого триггера все остальные триггеры в блоке сбрасывают свое состояние до исходного, другими словами, программа считает, что еще ни разу их не выполняла. Само собой, после этого они смогут сработать снова, а именно это нам и нужно!
Посмотрим на третий пункт нашей исходной задачи:
Повторить указанные действия, если все ставки в паре
Выходит, недостаточно просто повторить наши действия, нужно еще и учесть, что все ставки должны стать парными, а вернее, что не должно быть ни одной непарной ставки (иначе триггер будет бесконтрольно "выстреливать" одну ставку за другой)! Для этого добавляем следующие условия.
Запустим эти триггеры и посмотрим, что выйдет!
Ого, что-то явно пошло не так! Ставки все равно идут, не дожидаясь уравнивния. Похоже, что триггер игнорирует свои условия!
На самом деле, ничего подобного. Просто не сразу заметно, что эти условия всегда будут верны, даже до того, как сделана первая ставка. Нет ставок = нет непарных ставок, блок можно повторить! После первой ставки все также нет непарных ставок, так что можно делать следующую, и так пока не потратим все средства.
Эти условия явно недостаточны. Когда мы сформулировали их на бумаге, мы упустили пару важных моментов, которые обычно считаются сами собой разумеющимися:
- Прежде чем триггеры пойдут по второму кругу, должны выполниться и триггер со ставкой ПРОТИВ, и триггер, уравнивающий прибыль.
- Общие выплаты по ставкам ЗА и обязательства по ставкам ПРОТИВ у всех исходов должны быть сбалансированы, т.е. ни на одном исходе не должно быть открытых позиций.
Вот как это должно быть на самом деле:
Эта конфигурация приводит к желаемому результату:
Резюме
Подытожим:
- Нет смысла повторять блок триггеров, если вы не планируете выполнять их действия больше, чем один раз на каждом исходе в рынке;
- Чтобы повторить определенные триггеры, поместите их в отдельный блок и установите свойство "Повторить" этого блока в "не чаще, чем X сек.", где X - это число, которое больше значения частоты обновления ваших ставок. Например, если ставки обновляются каждые 3 секунды, для верности установите частоту повторения триггеров в 5-6 секунд ;
- Сформулируйте все условия, при которых триггеры должны повторяться. Добавьте их в отдельный триггер с действием "закрыть блок". Укажите имя блока, который нужно повторить.
- На этапе тестирования рекомендуем добавить задержку тестовых ставок, чтобы приблизить скорость появления ставок в программе к реальности: