Jump to content
FORUM · BOTBEETLE
JBrain

Возможно ли создать такой скрипт?

Recommended Posts

Есть ли возможность написать скрипт с такими параметрами:

1) Ждём у любой команды a(переменная ) жёлтые карточки или красные , если нужное кто-во карточек получены до n(переменная) минуты , то ждём до n минуты и делаем ставку на ТБ 0.5 от текущего счёта.
2)Если до n минуты не было ни у одной команды a жёлтых карточек,то ждём дальше и как только появляется a карточек делаем ставку и оставляем ставку до конца.
3)Если не было нужных ставок до t(переменная) минуты выходим из матча.

Share this post


Link to post
Share on other sites
5 hours ago, JBrain said:

Есть ли возможность написать скрипт с такими параметрами:

1) Ждём у любой команды a(переменная ) жёлтые карточки или красные , если нужное кто-во карточек получены до n(переменная) минуты , то ждём до n минуты и делаем ставку на ТБ 0.5 от текущего счёта.
2)Если до n минуты не было ни у одной команды a жёлтых карточек,то ждём дальше и как только появляется a карточек делаем ставку и оставляем ставку до конца.
3)Если не было нужных ставок до t(переменная) минуты выходим из матча.

Можно, только условия не понятны.

1. Выбор матча - как? в ручную или по каким условиям?

2. А если карточка появляется на 91 минуте? Интервал цен? входим по любой?

3. Что значит выходим? Выход это закрытие, а мы вроде не входили.

Share this post


Link to post
Share on other sites

1)Все матчи по ходу игры в данный момент. 

2) Если карточек не было до минуты ( 82 например) , то матч больше не отслеживаем. 

3) То есть делать ставку только между n минут и t минут . 

Share this post


Link to post
Share on other sites
1 hour ago, Admin said:

Можно, только условия не понятны.

1. Выбор матча - как? в ручную или по каким условиям?

2. А если карточка появляется на 91 минуте? Интервал цен? входим по любой?

3. Что значит выходим? Выход это закрытие, а мы вроде не входили.

По п.1 то есть только матчи в лайвеесли есть такая возможность, если же нет , то все по матчи которые будут по ходу игры.

Share this post


Link to post
Share on other sites

Пояснения по скрипту

1. Переменные

1.1 Определяем тип скрипта - футбол (1), задаем имя (2), описание (3) (чтоб не забыть про что он ?

image.png.5b4e5569f31487d4922c4fe1368c2a36.png

 

Share this post


Link to post
Share on other sites

1.2 Задаем размер ставки (1), и ограничиваем рынки по сумме денег (2). Нам не нужны пустые рынки. 

image.png.e5132507e9df0b319c154b99e0c60114.png

Share this post


Link to post
Share on other sites

1.3 Задаем временной интервал (1-2), когда ставка может быть сделана и количество желтых и красных карт (3)

image.png.032adb5b3c92d1c68dce7a3650f91807.png

 

Share this post


Link to post
Share on other sites

2. Работа скрипта

2.1 Отбираем подходящие рынки

(1) Среди входящих событий отбираем те которые перешли в игру (MarketCatalogue.IsLive == true) и у которых денег больше чем задано переменной (MarketCatalogue.TotalMatched >= TotalMatched) 

(2) Проверяем что рынок открыт

(3) Проверяем что у события доступна информация о точном счете. Не все события ее имеют.

(4) Считаем сумму карт у каждой команды, проверяем значение с задаваемой переменной (cards >= CardCount)

(5) Проверяем что событие попадает в интервал

(6) Выбранное событие передаем следующий функции.

image.png.95c1eb14935fb06f1e7ab1d2d6e157d7.png

Share this post


Link to post
Share on other sites

2.2 Делаем ставку

Чтобы не загромождать код, вынес выполнение ставки в отдельную фунцию

(1) Проверяем открыто ли событие в окне расписания

(2) Если нет даем команду на открытие, при этом запрашиваем только 3 рынка (OVER_UNDER_05  OVER_UNDER_15  OVER_UNDER_25)

(3) Если событие раскрыто, в списке рынков события берем первый открытый рынок

(4) Если рынок доступен, отбираем линию OVER

image.png.fef61b586b019645a79b089701b02a6b.png

(5) Проверяем стоит на линии защита от повторной ставки или нет

(6) Проверяем есть ли Back цена 

(7) На случай если программа было полностью перегружена и защита от повторной ставки не сработает, проверяем что у рынка нет принятых ставок

(8) Устанавливаем защиту от повторной ставки для данной линии

(9) Пишем в лог что делам ставку и при каких условиях она произошла

(10) Делаем ставку.

 

 

Share this post


Link to post
Share on other sites

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);
                        }
                    }
                }
            }
        }
    }
}

 

Share this post


Link to post
Share on other sites

4. Пример работы

Рынок (1) был открыт ставка, сделана и прошла успешна, 

Рынки (2-3) в процессе

image.thumb.png.81b86d65ead777905e33d140c5b72886.png

 

Share this post


Link to post
Share on other sites

5. Промежуточные результаты

Небольшой плюс (1). Результаты в низу не считаем, так как они при тестировании скрипта по моей ошибке стали на рынки UNDER.

image.png.b04402234cb280c96e7343da77608a51.png

Share this post


Link to post
Share on other sites

6. Рекомендация 

Включить в окне фильтр денег, тогда событий будет меньше и каждое событие будет быстрее обновляться. 

image.thumb.png.f39dc5aa6acab0243ea378c56cbcef41.png

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...