Классическое скальпирование в рынках с большой разницей между коэффициентами
Описание
Это пример классического скальпирования по двум сценариям:
1. Сначала ставка ЗА, потом уравнивание ПРОТИВ.
Ставим ЗА по текущему коэффициенту ПРОТИВ минус 1 тик. По мере того, как ставка сматчивается (либо целиком, либо по частям), уравниваем с прибылью в Y тиков, т.е. ставим ПРОТИВ по коэффициенту на Y тиков ниже, чем коэффициент сделанной ранее ставки ЗА. Если коэффициенты рынка поплывут вверх или вниз, переставляем непарную часть ставки ЗА так, чтобы ее коэффициент был равен текущему ПРОТИВ минус 1 тик.
2. Сначала ставка ПРОТИВ, потом уравнивание ЗА.
Ставим ПРОТИВ по текущему коэффициенту ЗА плюс 1 тик. По мере того, как ставка сматчивается (либо целиком, либо по частям), уравниваем с прибылью в Y тиков, т.е. ставим ЗА по коэффициенту на Y тиков выше, чем коэффициент сделанной ранее ставки ПРОТИВ. Если коэффициенты рынка поплывут вверх или вниз, переставляем непарную часть ставки ПРОТИВ так, чтобы ее коэффициент был равен текущему ЗА плюс 1 тик.
Для обоих сценариев: в определенный момент перед началом события отменяем все непарные ставки и уравниваем все по текущим коэффициентам.
Задолго до начала события, например, в рынках лошадиных скачек -- за 30-10 минут (в зависимости от страны проведения) между коэффициентами ЗА и ПРОТИВ исходов наблюдается значительная разница. Со временем эта разница начинает сокращаться по мере того, как участники биржи принимают предложения друг друга, а коэффициенты исхода сближаются. Метод скальпирования стремится размещать ставки как можно ближе к текущим наилучшим коэффициентам в надежде на то, что такие ставки быстрее станут парными (сматчатся), притом по наивыгоднейшему коэффициенту. Проще говоря, вам нужно сделать ставку ЗА по коэффициенту, наиболее близкому к текущему ПРОТИВ (или, наоборот, ПРОТИВ по коэффициенту, наиболее близкому к текущему ЗА), а позже уравнять прибыль.
Внимание: нельзя запускать одновременно два сценария, потому что если сделать ставки обоих типов на один и тот же исход, триггеры могут спутать их с последующими ставками уравнивания (ведь ставки могут сматчиваться частями и по разным коэффициентам) и попытаться передвинуть ставку уравнивания на новую позицию.
Отключите один из блоков триггеров в пользу второго либо в условиях явным образом исключите ситуацию, в которой эти блоки могут одновременно поставить на один и тот же исход. Например, можно применить блок "ЗА потом ПРОТИВ" к первым трем фаворитам, а блок "ПРОТИВ потом ЗА" -- ко всем остальным исходам.
Триггеры
В файле есть набор констант для настройки триггеров:
mins_before_start | Когда начать ставки, минут до начала |
min_gap | Минимальный разрыв между коэф-тами (в тиках) |
bet_size | Размер начальных ставок ЗА и ПРОТИВ |
greenup_tcks | Кол-во тиков для уравнивания |
offset_tcks | Кол-во тиков, на которые понизить/повысить коэф. начальной ставки. Если сначала ставить ЗА, то ставка делается на указанное количество тиков ниже коэф-та ПРОТИВ, а если сначала ставить ПРОТИВ -- то на это же количество тиков выше коэф-та ЗА. |
close_secs | За сколько секунд до начала отменить все непарные и закрыть по текущему коэф-ту. |
min_rank_back | Минимальный ранг исхода для открывающей ставки ЗА |
max_rank_back | Максимальный ранг исхода для открывающей ставки ЗА |
min_rank_lay | Минимальный ранг исхода для открывающей ставки ПРОТИВ |
max_rank_lay | Максимальный ранг исхода для открывающей ставки ПРОТИВ |
Первое условие в триггерах ставок -- это заглушка, т.е. вы его вполне можете удалить или добавить новые условия либо фильтры исходов. Только добавить их нужно обязательно в тот же самый блок, чтобы не нарушить логику триггеров. Вот где нужно нажать, чтобы добавить новые условия:
Как это работает
Продемонстрирую, что подразумевается под сценарием 1. Триггеры по сценарию 2 работают точно так же, только первая ставка будет ПРОТИВ. Количество исходов, на которые можно ставить одновременно, не ограничено, т.е. можно ставить хоть на все исходы в рынке сразу.
А вот что вскоре происходит, когда часть ставки сматчивается, а коэффициенты исхода ползут вниз:
За заданное количество секунд до начала события триггеры не оставляют непарных или незакрытых ставок в этом рынке:
В порядке обучения разберем работу одного триггера «сначала ЗА», который делает открывающую ставку ЗА с целью ее потом уравнять.
В триггере два действия:
- отменить, потом ставить ЗА. Коэффициент ставки
r_ticks(lay_price, -offset_tcks)
. Здесьr_ticks
– это функция, которая вычисляет, какой получится коэффициент, если к первому значению в скобках прибавить количество тиков, равное второму значению в скобках. Получается,lay_price
– это кэф ПРОТИВ (переменная исхода), аoffset_ticks
– это константа, которую мы задали в шапке триггеров. Мы ставим ЗА по кэфу, который наoffset_ticks
меньше, чем кэф ПРОТИВ исхода.
Размер ставкиbet_size - back_matched
. Здесьbet_size
– это константа, размер ставки, а back_matched – сумма ваших парных ставок ЗА на этом исходе. Почему не просто bet_size? Мы собираемся регулярно переставлять нашу ставку по новому кэфу, если рынок уйдет. Часть ставки может в любой момент приняться, а какая-то останется висеть. Чтобы не ставить заново ту же сумму, мы вычитаем уже сматченную часть.
- установить переменную. Действие нужно для того, чтобы можно было безопасно зациклить триггер. В переменную
last_bl_time
записываем текущее время. При следующем повторении триггера проверим, чтобы с моментаlast_bl_time
прошло несколько секунд, иначе рискуем наделать множество ненужных ставок.
Откроем условия триггера.
Первым идет блок условий. Напоминаю, что блок – это несколько условий (или вложенных блоков), связанных между собой одним логическим действием «И» либо «ИЛИ».
- У исхода должен быть ранг в пределах заданных констант.
- И этот триггер впервые выполняется на данном исходе
ИЛИ
- Этот триггер уже когда-то сработал на этом исходе. Это условие – страховка от того, что ранг исхода может измениться с момента открывающей ставки.
- и у исхода ушел коэффициент последней непарной ставки ЗА (внутренняя переменная
bu_backp
): он теперь не равен кэфу ПРОТИВ минус заданное кол-во тиков - и со стороны ПРОТИВ предложение по текущему кэфу как минимум на bet_size превышает то, что мы поставили сами (
back_unmatched
– это сумма непарных ставок ЗА). Мы же не хотим постоянно отменять и переставлять по новому коэффициенту свою же ставку, правильно? Кто-то еще должен накинуть денег, и вот его-то мы и обыграем.
Вторая часть условий:
- Если до заданного нами размера ставки bet_size остались считанные копейки, мы эти копейки не переставляем (биржа не любит считать мелочь)
- и у исхода должен быть достаточный разрыв между кэфами ЗА и ПРОТИВ (количество тиков max_gap), иначе скальпиг не получится (просто ставки будут делаться по текущим коэффициентам)
- и до начала события еще должно быть достаточно времени
- и с момента последнего срабатывания триггера должно пройти не меньше 3 секунд. Вспоминаете второе действие триггера в предыдущем посте? Вот оно и сыграло: формула
(now_time – XXX)/mf_second
дает количество секунд, прошедшее с момента времени, зафиксированного в переменнойXXX
(подставьте имя переменной). А мы при каждом повторении триггера запоминаем новоеlast_bl_time
: таким образом выжидаем, пока биржа зарегистрирует нашу ставку и обновит все переменные, которые нужны нам для расчетов.
Это всего один триггер из множества, но даже его подробный разбор уже дает вам представление о том, как решаются популярные задачи в онлайн-ставках. Не бойтесь жкспериментировать с условиями сами, подставлять свои собственные значения и проверять, что получится.
Для безопасного тестирования триггеров на множестве рынков без риска того, что ваш аккаунт заблокируют, рекомендуем Time Machine.