JBrain 0 Posted December 16, 2019 Есть ли возможность написать скрипт с такими параметрами: 1) Ждём у любой команды a(переменная ) жёлтые карточки или красные , если нужное кто-во карточек получены до n(переменная) минуты , то ждём до n минуты и делаем ставку на ТБ 0.5 от текущего счёта. 2)Если до n минуты не было ни у одной команды a жёлтых карточек,то ждём дальше и как только появляется a карточек делаем ставку и оставляем ставку до конца. 3)Если не было нужных ставок до t(переменная) минуты выходим из матча. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 17, 2019 5 hours ago, JBrain said: Есть ли возможность написать скрипт с такими параметрами: 1) Ждём у любой команды a(переменная ) жёлтые карточки или красные , если нужное кто-во карточек получены до n(переменная) минуты , то ждём до n минуты и делаем ставку на ТБ 0.5 от текущего счёта. 2)Если до n минуты не было ни у одной команды a жёлтых карточек,то ждём дальше и как только появляется a карточек делаем ставку и оставляем ставку до конца. 3)Если не было нужных ставок до t(переменная) минуты выходим из матча. Можно, только условия не понятны. 1. Выбор матча - как? в ручную или по каким условиям? 2. А если карточка появляется на 91 минуте? Интервал цен? входим по любой? 3. Что значит выходим? Выход это закрытие, а мы вроде не входили. Quote Share this post Link to post Share on other sites
JBrain 0 Posted December 17, 2019 1)Все матчи по ходу игры в данный момент. 2) Если карточек не было до t минуты ( 82 например) , то матч больше не отслеживаем. 3) То есть делать ставку только между n минут и t минут . Quote Share this post Link to post Share on other sites
JBrain 0 Posted December 17, 2019 1 hour ago, Admin said: Можно, только условия не понятны. 1. Выбор матча - как? в ручную или по каким условиям? 2. А если карточка появляется на 91 минуте? Интервал цен? входим по любой? 3. Что значит выходим? Выход это закрытие, а мы вроде не входили. По п.1 то есть только матчи в лайвеесли есть такая возможность, если же нет , то все по матчи которые будут по ходу игры. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 Пояснения по скрипту 1. Переменные 1.1 Определяем тип скрипта - футбол (1), задаем имя (2), описание (3) (чтоб не забыть про что он ?) Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 1.2 Задаем размер ставки (1), и ограничиваем рынки по сумме денег (2). Нам не нужны пустые рынки. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 1.3 Задаем временной интервал (1-2), когда ставка может быть сделана и количество желтых и красных карт (3) Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 2. Работа скрипта 2.1 Отбираем подходящие рынки (1) Среди входящих событий отбираем те которые перешли в игру (MarketCatalogue.IsLive == true) и у которых денег больше чем задано переменной (MarketCatalogue.TotalMatched >= TotalMatched) (2) Проверяем что рынок открыт (3) Проверяем что у события доступна информация о точном счете. Не все события ее имеют. (4) Считаем сумму карт у каждой команды, проверяем значение с задаваемой переменной (cards >= CardCount) (5) Проверяем что событие попадает в интервал (6) Выбранное событие передаем следующий функции. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 2.2 Делаем ставку Чтобы не загромождать код, вынес выполнение ставки в отдельную фунцию (1) Проверяем открыто ли событие в окне расписания (2) Если нет даем команду на открытие, при этом запрашиваем только 3 рынка (OVER_UNDER_05 OVER_UNDER_15 OVER_UNDER_25) (3) Если событие раскрыто, в списке рынков события берем первый открытый рынок (4) Если рынок доступен, отбираем линию OVER (5) Проверяем стоит на линии защита от повторной ставки или нет (6) Проверяем есть ли Back цена (7) На случай если программа было полностью перегружена и защита от повторной ставки не сработает, проверяем что у рынка нет принятых ставок (8) Устанавливаем защиту от повторной ставки для данной линии (9) Пишем в лог что делам ставку и при каких условиях она произошла (10) Делаем ставку. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 3. Полный код скрипта using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using Botbeetle.Types.BettingEnums; using Botbeetle.Types.BettingTypes; using Botbeetle.Types.Scripts; namespace Soccer.Scripts { [Serializable] public class SoccerCardsScript : EventScript { protected override Script CreateInstanceForClone() { return new SoccerCardsScript(); } //---------------------------------------------------------------------------------- [Category("1. Script")] [DisplayName("Name")] public override string Name { get; set; } = "Cards"; [Category("1. Script")] [DisplayName("Description")] public override string Description { get; set; } = "Bet if count of card more then ..."; [Browsable(false)] public override EventTypeEnum EventType { get; set; } = EventTypeEnum.Soccer; //---------------------------------------------------------------------------------- [Category("2. Order")] [DisplayName("Price Back")] public decimal OrderSize { get; set; } = 5M; //---------------------------------------------------------------------------------- [Category("3. Conditions of Selection")] [DisplayName("Total Matched, more")] public decimal TotalMatched { get; set; } = 5000; //---------------------------------------------------------------------------------- [Category("4. Conditions of Enter")] [DisplayName("Time of Event, more")] public int TimeStart { get; set; } = 50; [Category("4. Conditions of Enter")] [DisplayName("Time of Event, less")] public int TimeStop { get; set; } = 80; [Category("4. Conditions of Enter")] [DisplayName("Count of Card, more or equal")] public int CardCount { get; set; } = 2; //============================================================================================================= /// <summary> /// It is called many times when the data is updated. Contains score, prices. /// </summary> public override void UpdateEvents(List<Event> events) { // Choose Live the event that is in Live Matched > TotalMatched var liveEvents = events.Where(x => x.MarketCatalogue.IsLive && x.MarketCatalogue.TotalMatched >= TotalMatched).ToList(); foreach (var liveEvent in liveEvents) { // MarketCatalogue in Event is MatchOdds var market = liveEvent.MarketCatalogue; // Check that the status of the event == OPEN, otherwise skip (SUSPENDED or CLOSED) if (market.Status == MarketStatus.OPEN) { // Check that this Event has Live Score, if there is a missing - skip if (Api.Soccer.IsScoreInfo(liveEvent)) { // Count card Number and check with CardCount var var cards = market.EventState.Score.Home.NumberOfCards + market.EventState.Score.Away.NumberOfCards; if (cards >= CardCount) { // Match Time, Check that the event time is in the specified time range, otherwise we skip var time = market.EventState.TimeElapsed; if (time > TimeStart && time < TimeStop) { ExpandAndSelect(liveEvent, cards.Value, time); } } } } } } private void ExpandAndSelect(Event liveEvent, int cards, int time) { if (liveEvent.IsExpanded == false) { //Expand selected Evet and Open markets: OVER_UNDER_05 OVER_UNDER_15 OVER_UNDER_25 Api.Expand(liveEvent, new List<MarketTypeEnum> { MarketTypeEnum.OVER_UNDER_05,MarketTypeEnum.OVER_UNDER_15,MarketTypeEnum.OVER_UNDER_25, }); } else { //From Expanded markets select first opened OVER_UNDER_05 market var market05 = liveEvent.MarketCatalogues.FirstOrDefault(x => x.Status == MarketStatus.OPEN); if (market05 != null) { //if market selected, get runner OVER var runner = Api.Soccer.SelectRunner(market05, RunnerTypeEnum.OVER); if (runner != null) { // Check that we not placed bet in this runner, otherwise we skip if (Api.IsProtected(runner)) return; // Check runner has Back Price if (runner.Back.HasValue) { // Check runner has not bets if (runner.Matches.Any()) return; // 13. We put the protection so as not to put twice on one runner. Api.SetProtection(runner); // log action: Api.Log($"Runner:{runner}; Cards:{cards}; Time:{time}; Back:{runner.Back}"); // Place bet Api.PlaceLimitOrder(runner, Side.BACK, runner.Back.Value, OrderSize); } } } } } } } Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 4. Пример работы Рынок (1) был открыт ставка, сделана и прошла успешна, Рынки (2-3) в процессе Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 5. Промежуточные результаты Небольшой плюс (1). Результаты в низу не считаем, так как они при тестировании скрипта по моей ошибке стали на рынки UNDER. Quote Share this post Link to post Share on other sites
Admin 90 Posted December 22, 2019 6. Рекомендация Включить в окне фильтр денег, тогда событий будет меньше и каждое событие будет быстрее обновляться. Quote Share this post Link to post Share on other sites