Author Topic: И ещё несколько вопросов по программе:)  (Read 5519 times)

Tags:
  • All members
  • Posts: 47
  • Gender: Male
Добрый день!

В процессе освоения программы у меня накопилось несколько вопросов, они относятся к немного разным областям, поэтому будут идти вперемешку:)

1) В случае, если в какой-то момент на исходе нет предложений, по которым можно поставить ЗА, какие значения примут переменные back_price и back_amount?

2) Есть переменная profit_loss, которая хранит П/У на исходе. Я правильно понимаю, что это суммарный выигрыш, если данный исход победит, который учитывает ставки, сделанные на все исходы в рынке?
Есть ли возможность узнать П/У, если исход не победит?
И можно ли посмотреть то же самое (сумма, если исход победит, и сумма, если проиграет), учитывая ставки, сделанные ТОЛЬКО на данный исход (по аналогии с переменными tradeout_pl и tradeout_net)?

3)Если фаворитов два, как определяется, какой из них получит какой ранг (sel_order)?
Например:
У первого исхода back=3, lay=3.10;
У второго исхода back=3, lay=3.10;
У третьего исхода back=10, lay=11.50;
Какие будут значения sel_order для каждого из исходов?

4) Есть ли какой-нибудь способ, позволяющий хранить пользовательские переменные для каждого из исходов?
В настройках определения переменных минимальная видимость это "отдельно для каждого рынка".

5)Может ли меняться порядковый номер (sel_index) в процессе обновления рынка?
Например, если участника с номером 3 сняли со скачек, то после номера 2 будет идти номер 4, или четвертый станет третьим, пятый четвертым и так далее?
Или может это возможно в каких-то других случаях?

6) Я читал, что частоту обновления триггеров надо ставить меньше, чем частоту обновления рынков (иными словами, триггеры должны обновляться реже, чтобы всегда получать новые данные).

Допустим, у меня стоит частота обновления рынка раз в секунду, и частота выполнения триггера раз в 1.6 секунд.

Может ли возникнуть такая ситуация, что в момент времени 0 триггер выполнился, а через 0.2 секунды обновился рынок. Тогда получается, что в следующий раз рынок обновится в момент времени 1.2 секунды (0.2+1), а триггер выполнится в момент времени 1.6. Тогда получается, что триггер никак не обработал данные, поступившие в момент обновления (который был в 0.2)...
После этого, рынок обновился в момент времени 2.2 (1.2+1), а триггер выполнился в момент времени 3.2(1.6+1.6). Таким образом, данные, которые пришли с последним обновлением, ждали 1 секунду, пока их начнет обрабатывать триггер.

Насколько я понимаю, один из неоспоримых плюсов автоматической торговли перед ручной как раз заключается в том, что можно с минимальной задержкой реагировать на изменения коэффициентов.
 
Соответственно, чтобы избежать таких ситуаций, мне видится решение выставлять максимальную частоту обновления триггеров (что будет сильно расходовать ресурсы компьютера), чтобы между обновлениями рынков триггрер выполнялся несколько раз, но зато задержка между поступлением новых данных и обработкой будет минимальной.
 
Или же внести в настройки выполения триггеров пункт "Выполнять при каждом обновлении рынка" или что-то вроде этого.
Или есть какое-то другое решение?

Заранее спасибо!

  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Quote
1) В случае, если в какой-то момент на исходе нет предложений, по которым можно поставить ЗА, какие значения примут переменные back_price и back_amount?
Нули.

Quote
2) Есть переменная profit_loss, которая хранит П/У на исходе. Я правильно понимаю, что это суммарный выигрыш, если данный исход победит, который учитывает ставки, сделанные на все исходы в рынке?
Да, верно.
Quote
Есть ли возможность узнать П/У, если исход не победит?
Зависит от того, кто выиграет, т.е. это и есть его (выигравшего) П/У.
Quote
И можно ли посмотреть то же самое (сумма, если исход победит, и сумма, если проиграет), учитывая ставки, сделанные ТОЛЬКО на данный исход (по аналогии с переменными tradeout_pl и tradeout_net)?
К сожалению нет.

Quote
3)Если фаворитов два, как определяется, какой из них получит какой ранг (sel_order)?
Back price, затем Lay price, затем порядок на BetFair.

У первого исхода back=3, lay=3.10; 1
У второго исхода back=3, lay=3.10; 2
У третьего исхода back=10, lay=11.50; 3

Quote
4) Есть ли какой-нибудь способ, позволяющий хранить пользовательские переменные для каждого из исходов?
В настройках определения переменных минимальная видимость это "отдельно для каждого рынка".
Нет, а в чем задача? Возможно она решается другим способом.

Quote
5)Может ли меняться порядковый номер (sel_index) в процессе обновления рынка?
Например, если участника с номером 3 сняли со скачек, то после номера 2 будет идти номер 4, или четвертый станет третьим, пятый четвертым и так далее?
Или может это возможно в каких-то других случаях?
Да, sel_index меняется при изменении в составе лошадей.

Quote
6) Я читал, что частоту обновления триггеров надо ставить меньше, чем частоту обновления рынков (иными словами, триггеры должны обновляться реже, чтобы всегда получать новые данные).

Допустим, у меня стоит частота обновления рынка раз в секунду, и частота выполнения триггера раз в 1.6 секунд.

Может ли возникнуть такая ситуация, что в момент времени 0 триггер выполнился, а через 0.2 секунды обновился рынок. Тогда получается, что в следующий раз рынок обновится в момент времени 1.2 секунды (0.2+1), а триггер выполнится в момент времени 1.6. Тогда получается, что триггер никак не обработал данные, поступившие в момент обновления (который был в 0.2)...
После этого, рынок обновился в момент времени 2.2 (1.2+1), а триггер выполнился в момент времени 3.2(1.6+1.6). Таким образом, данные, которые пришли с последним обновлением, ждали 1 секунду, пока их начнет обрабатывать триггер.

Насколько я понимаю, один из неоспоримых плюсов автоматической торговли перед ручной как раз заключается в том, что можно с минимальной задержкой реагировать на изменения коэффициентов.
 
Соответственно, чтобы избежать таких ситуаций, мне видится решение выставлять максимальную частоту обновления триггеров (что будет сильно расходовать ресурсы компьютера), чтобы между обновлениями рынков триггрер выполнялся несколько раз, но зато задержка между поступлением новых данных и обработкой будет минимальной.
 
Или же внести в настройки выполения триггеров пункт "Выполнять при каждом обновлении рынка" или что-то вроде этого.
Или есть какое-то другое решение?
Частота повторения триггеров не может быть чаще, чем частота обновления рынка. Вы можете "сделать паузу" этим значением, но никак не "ускорить". Вам не следует устанавливать повторение триггера, если Вам не нужно повторить выполнение триггера.
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
По пунктам 1,2,3,5 все понятно, спасибо!
По п.4) Я хочу попробовать выставлять границы коэффициентов для каждого исхода, при пересечении которых делаются ставки за или против и выставляются новые границы. Причем для каждого исхода они свои, так как рассчитываются исходя из коэффициента в определенный момент времени.
Например если коэфф. равен 4-м, то границы 3 и 5. А если  3.7, то 3 и 4.5.
Таким образом, для каждого исхода (для нескольких фаворитов) мне надо хранить 2 числа.
Можно отслеживать первых 2-х или 3-х фаворитов в самом начале, и запоминать их идентификаторы исходов (понятно, что фаворит может перестать быть им в процессе торгов, поэтому надо именно запоминать идентификатор, а не просто ссылаться на фаворита). Тогда надо вводить 4 переменных (для 2-х исходов например), и полностью дублировать весь пакет триггеров, добавляя в одной половине в каждом триггере условие, что sel_id соответствует ранее запомненному первому фавориту, а во второй, что sel_id соответствует второму. Но, сами понимаете, это решение довольно кривое... Вот я и думаю, как этого избежать:)

по п.6) Значит, я неправильно понимаю логику работы повторений триггеров.
Как сделать так, чтобы триггер выполнялся один раз на каждый подходящий исход при каждом обновлении рынка (какой из вариантов выбрать: один раз на рынок, один раз на исход, не чаще чем, определенное число раз, только один раз)?
И как сделать так, чтобы он выполнялся только один раз при первом обновлении рынка для каждого из исходов?



  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
4. Вам нужно использовать действие "Запомнить", скажем с именем rem1 и затем сравнивать запомненное значение с текущим: back_price - rem1_back_price
Для каждого исхода будет взято соответствующее значение.
6. Если Вам нужно, чтобы при соблюдении условий триггер выполнился для всех подошедших в данный момент исходов, но один раз (т.е. на этом рынке больше не будут проверяться условия), то выбираете "все подходящие исходы" и "один раз на рынок".
Если нужно, чтобы после выполнения однажды условий для всех подошедших каждый раз условий (даже если в следующий раз подойдет тот же исход, что и в предыдущий) выполнялся триггер, выбираете "не чаще чем раз в X секунд" и "все подходящие исходы".
Если Вам нужно, чтобы при выполнении условий триггер выполнялся один раз для каждого исхода - выбираете "один раз на исход".
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
4. Вам нужно использовать действие "Запомнить", скажем с именем rem1 и затем сравнивать запомненное значение с текущим: back_price - rem1_back_price
Для каждого исхода будет взято соответствующее значение.
Дело в том, что выставление новых границ происходит на каждом исходе независимо от других, и тогда всё равно для каждого исхода придется вести свой список (тоесть количество исходов, на которых будет идти торговля, равно количеству списков, иначе запоминание для одного исхода будет перезаписывать данные других, запомненных ранее), и ставить условие, чтобы для каждого исхода брались значения из своего списка... А массивы, насколько я понял, не поддерживаются. Так что это будет примерно то же самое, как сделано сейчас, только вместо двух переменных границ для каждого исхода надо хранить одну переменную запомненного исхода. И все равно придется дублировать все триггеры для каждого из исходов.....
6. Если Вам нужно, чтобы при соблюдении условий триггер выполнился для всех подошедших в данный момент исходов, но один раз (т.е. на этом рынке больше не будут проверяться условия), то выбираете "все подходящие исходы" и "один раз на рынок".
Если нужно, чтобы после выполнения однажды условий для всех подошедших каждый раз условий (даже если в следующий раз подойдет тот же исход, что и в предыдущий) выполнялся триггер, выбираете "не чаще чем раз в X секунд" и "все подходящие исходы".
Если Вам нужно, чтобы при выполнении условий триггер выполнялся один раз для каждого исхода - выбираете "один раз на исход".

А если я хочу, чтобы триггер выполнялся один раз на каждый подходящий исход при каждом обновлении рынка (рынок обновился->условия проверились->для тех, кто подошел, выполнилось действие)?
И как сделать, чтобы он выполнялся только один раз при первом обновлении рынка для каждого из исходов?

  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Действие "запомнить" запоминает все исходы, которые подошли по условию, т.е. делает как бы "слепок" рынка.
Quote
А если я хочу, чтобы триггер выполнялся один раз на каждый подходящий исход при каждом обновлении рынка (рынок обновился->условия проверились->для тех, кто подошел, выполнилось действие)?
Один раз на исход.
Quote
И как сделать, чтобы он выполнялся только один раз при первом обновлении рынка для каждого из исходов?
Выбрать "все исходы" вместо "все подошедшие" и выбрать "один раз на рынок".
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
[quote ]
Действие "запомнить" запоминает все исходы, которые подошли по условию, т.е. делает как бы "слепок" рынка.

В том-то и дело, что когда мы сдвигаем границы на одном исходе, мы должны запомнить кэф на нем в данный момент времени, не трогая записи по другим исходам. А "запомнить" перезапишет нам все исходы, в том числе и те, на которых границы сдвигать не надо. Вот если бы он умел перезаписывать только одни исход, не меняя записи по остальным....Но тогда это будет уже не слепок рынка, а массив данных по исходам.

Quote
Один раз на исход.
К сожалению, так не работает.
Во вложении триггер, который определяет первых двух фаворитов, запоминает их sel_id, и надо, чтобы он например писал в лог их коэффициенты ЗА при каждом обновлении рынка.
Если выставить "один раз на исход" на триггере Writeback, то он и будет выполняться ОДИН раз на каждый подошедший исход, а не одни раз на каждый подошедший исход при каждом обновлении рынка....

  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Quote
А "запомнить" перезапишет нам все исходы, в том числе и те, на которых границы сдвигать не надо.
В действии "Запомнить" есть опция "Добавить к запомненным".

Quote
К сожалению, так не работает.
Вот так работает.
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
Да, действительно работает:)
Я почему-то думал, что если выставить в частоте повторений 0.1 секунду, то он и будет выполняться раз в 0.1 секунду, и при частоте обновления рынков раз в 10 секунд, к примеру, будет по 100 записей на каждое обновление...
Получается, триггеры в принципе не могут выполняться чаще, чем обновляется рынок, и частота нужна для того, чтобы мы могли, например, выполнять действия раз в минуту при обновлении рынка раз в секунду?

А запоминание исходов видимо довольно мощный инструмент.

Можете привести пример триггера, чтобы было понятно, как оно работает?

Например мы в начале берем первых двух фаворитов, и запоминаем их, и их коэффициенты ЗА.
Для каждого из выбранных фаворитов мы выставляем границы коэффициента ЗА:
Верхняя - начальный ЗА+1
Нижняя - начальный ЗА - 1.
Далее мы ждем, когда текущий  ЗА пересечет одну из границ (для каждого из исходов они свои, так как у них разные начальные коэффициенты).
Если он пересекает верхнюю, ставим ПРОТИВ, и выставляем новые границы (такие же, ЗА+1 и ЗА-1, но только уже от текущего ЗА).
А если он пересекает нижнюю, ставим ЗА, и выставляем новые границы (такие же, ЗА+1 и ЗА-1, но только уже от текущего ЗА).

Можно реализовать такую штуку через запоминание?

  • All members
  • Posts: 47
  • Gender: Male
Соответственно новые границы выставляются только на том исходе, где ЗА пересек старые, тоесть оба исхода рассматриваются независимо друг от друга

  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Держите. Только я поставил 3 тика, а то сильно часто ставит  ::)
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
Спасибо!!
Получается, действие "Добавить к списку" перезаписывает в списке соответствующий исход, а не добавляет в конец?
А какие области видимости списков (внутри рынка, внутри спорта, глобально)?
Например мы в начале берем первых двух фаворитов, и запоминаем их, и их коэффициенты ЗА.
А можно добавить в сделанном триггере условие про первых двух фаворитов?

  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Quote
А какие области видимости списков (внутри рынка, внутри спорта, глобально)?
Глобально, но rem_back_price для каждого исхода возвращает запомненное значение именно для этого исхода (если оно конечно было).
Держите.
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

  • All members
  • Posts: 47
  • Gender: Male
Глобально, но rem_back_price для каждого исхода возвращает запомненное значение именно для этого исхода (если оно конечно было).
Проблема кроется в другом.
При создании нового списка в другом рынке, удаляется созданный ранее.
Попробуйте запустить триггер (который писал в лог коэффициенты ЗА) для двух рынков, которые начинают обновляться не одновременно.
Вы увидите, что он перестаёт работать для первого рынка, когда запускается второй.
Что интересно, если в "Запомнить" поставить "добавлять к списку", то всё работает.
(Можно заодно поправить вот этот пример).

Но тогда он будет дописывать в один и тот же список все исходы со всех рынков, где он выполнялся (а их может быть довольно много, особенно если не перезапускать программу по несколько дней (а в идеале вообще никогда)  :)
Поэтому интересно, есть ли ограничение по количеству записей в списке, или что-то в этом роде (вряд ли он может хранить в одном списке миллионы исходов)?
А то не хочется в самый ответственный момент вылететь с переполнением ;)



  • Tim Vetrov
  • Administrator
  • Posts: 4870
  • Gender: Male
*
Исходы автоматически удаляются из списка при удалении рынка.
Proud to be 🇺🇦
I'm happy to help Monday - Friday, 08:00-18:00 GMT
Буду рад помочь с понедельника по пятницу, 08:00-18:00 GMT

 

Please note, BetFair is seems to be currently OFFLINE