Глава iv. программная реализация

Пример использования программы для расчета букмекерских «вилок»

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

Суть программы заключается в следующем:

Имеется какой-либо БАНК (денежная сумма) и КОЭФФИЦИЕНТЫ K1 и K2 (для двух исходного события) и КОЭФФИЦИЕНТЫ K1, K2, KХ (для трех исходного события). Необходимо ввести значения в поле БАНК и в поле КОЭФФИЦИЕНТ нажать кнопку РАССЧИТАТЬ. Программа рассчитает нам маржу между этими коэффициентами (если она положительна, то арбитражная ситуация есть, если она отрицательная или равняется нулю – то, вилки нет) сумму ставки на каждый исход, при которой мы выигрываем одинаковую сумму независимо от результата события и конечную прибыль.

Диалоговые окна программы для расчета двух и трех исходного события изображены на рисунке 4.1. и рисунке 4.2. соответственно.

глава iv. программная реализация - student2.ru

Рисунок 4.1. Диалоговое окно программы для двух исходного события

глава iv. программная реализация - student2.ru

Рисунок 4.2. Диалоговое окно программы для трех исходного события

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

Примеры таких ситуаций представлены на рисунке 3.3. и рисунке 3.4.

глава iv. программная реализация - student2.ru

Рисунок 4.3. Диалоговое окно «Ошибка ввода данных» для поля КОЭФФИЦИЕНТ.

глава iv. программная реализация - student2.ru

Рисунок 4.4. Диалоговое окно «Ошибка ввода данных» для поля БАНК.

Листинг программы для расчета букмекерских «вилок»

Текст модуля формы

unit UnitMain;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls;

type

TMainForm = class(TForm)

MainMenu: TMainMenu;

DoubleIssue: TMenuItem;

TrippleIssue: TMenuItem;

Label1: TLabel;

EditBank: TEdit;

Label2: TLabel;

Label3: TLabel;

LabelX: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

EditCoef1: TEdit;

EditCoefX: TEdit;

EditCoef2: TEdit;

EditBet1: TEdit;

EditBetX: TEdit;

EditBet2: TEdit;

EditProfit1: TEdit;

EditProfitX: TEdit;

EditProfit2: TEdit;

LabelCalc: TLabel;

Label4: TLabel;

LabelMargin: TLabel;

procedure TrippleIssueClick(Sender: TObject);

procedure DoubleIssueClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure LabelCalcClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses Math;

var

IsDoubleForks: boolean; //указывает на выбранное количество исходов в расчете

{$R *.dfm}

procedure TMainForm.TrippleIssueClick(Sender: TObject);

begin

IsDoubleForks := False;

//изменяем видимость полей

LabelX.Visible := True;

EditCoefX.Visible := True;

EditBetX.Visible := True;

EditProfitX.Visible := True;

//обнуляем поля

EditBet1.Text := '';

EditBet2.Text := '';

EditBetX.Text := '';

EditProfit1.Text := '';

EditProfit2.Text := '';

EditProfitX.Text := '';

LabelMargin.Caption := '0%';

end;

procedure TMainForm.DoubleIssueClick(Sender: TObject);

begin

IsDoubleForks := True;

//изменяем видимость полей

LabelX.Visible := False;

EditCoefX.Visible := False;

EditBetX.Visible := False;

EditProfitX.Visible := False;

//обнуляем поля

EditBet1.Text := '';

EditBet2.Text := '';

EditBetX.Text := '';

EditProfit1.Text := '';

EditProfit2.Text := '';

EditProfitX.Text := '';

LabelMargin.Caption := '0%';

end;

procedure TMainForm.FormActivate(Sender: TObject);

begin

DoubleIssueClick(nil);

//значения по умолчанию

EditBank.Text := '100';

EditCoef1.Text := '1,00';

EditCoef2.Text := '1,00';

EditCoefX.Text := '1,00';

end;

procedure TMainForm.LabelCalcClick(Sender: TObject);

var

coef1: double;

coef2: double;

coefX: double;

bank: double;

bet1: double;

bet2: double;

betX: double;

betsum: double;

profit1: double;

begin

//проверка ввода валидных данных в поля банка и коэффициентов

try

bank := StrToFloat(EditBank.Text);

except

MessageBox(Handle ,'В поле "Банк" введены неверные данные!', 'Ошибка ввода данных', MB_OK);

Exit;

end;

try

begin

coef1 := StrToFloat(EditCoef1.Text);

coef2 := StrToFloat(EditCoef2.Text);

if (not IsDoubleForks) then

coefX := StrToFloat(EditCoefX.Text);

end;

except

MessageBox(Handle ,'В поле "Коэффициент" введены неверные данные!', 'Ошибка ввода данных', MB_OK);

Exit;

end;

//рассчет для двойного исхода

if (IsDoubleForks) then

begin

bet1 := Round((bank*coef2/(coef1+coef2))*100)/100;

EditBet1.Text := FloatToStr(bet1);

bet2 := Round((bank*coef1/(coef1+coef2))*100)/100;

EditBet2.Text := FloatToStr(bet2);

betsum := bet1 + bet2;

profit1 := coef1*bet1 - betsum;

EditProfit1.Text := FloatToStr(Round((profit1)*100)/100);

EditProfit2.Text := FloatToStr(Round((coef2*bet2 - betsum)*100)/100);

LabelMargin.Caption := FloatToStr(Round((100*profit1/bank)*100)/100) + '%';

end

else //рассчет для тройного исхода

begin

bet1 := Round((bank*coef2*coefX/(coef1*coef2+coef1*coefX+coef2*coefX))*100)/100;

EditBet1.Text := FloatToStr(bet1);

bet2 := Round((bank*coef1*coefX/(coef1*coef2+coef1*coefX+coef2*coefX))*100)/100;

EditBet2.Text := FloatToStr(bet2);

betX := Round((bank*coef1*coef2/(coef1*coef2+coef1*coefX+coef2*coefX))*100)/100;

EditBetX.Text := FloatToStr(betX);

betsum := bet1 + bet2 + betX;

profit1 := coef1*bet1 - betsum;

EditProfit1.Text := FloatToStr(Round((profit1)*100)/100);

EditProfit2.Text := FloatToStr(Round((coef2*bet2 - betsum)*100)/100);

EditProfitX.Text := FloatToStr(Round((coefX*betX - betsum)*100)/100);

LabelMargin.Caption := FloatToStr(Round((100*profit1/bank)*100)/100) + '%';

end;

end;

end.

Пример использования программы для расчета суммы ставки по методу «критерий Келли»

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

Суть программы заключается в следующем:

Имеется какой-либо банк (денежная сумма) и коэффициент букмекера на спортивное событие, а также личностная вероятностная оценка этого события игроком, выраженная в процентах.

Необходимо ввести значение в поля ВАША ОЦЕНКА ВЕРОЯТНОСТИ, КОЭФФИЦИЕНТ БУКМЕКЕРА И БАНК и нажать кнопку ВЫЧИСЛИТЬ. Программа рассчитает сумму ставки и выведет результат в поле СТАВКА ИГРОКА.

Диалоговое окно программы для расчета суммы ставки по методу «критерий Келли» изображено на рисунке 4.5.

глава iv. программная реализация - student2.ru

Рисунок 4.5. Диалоговое окно программы при нажатии кнопки ВЫЧИСЛИТЬ

Значение, вводимое в поле ОЦЕНКА ВЕРОЯТНОСТИ, должно лежать в пределах от 1 до 100. При несоблюдении этого критерия программа выдает сообщение об ошибке. Пример такой ситуации представлен на рисунке 4.6.

глава iv. программная реализация - student2.ru

Рисунок 4.6. Диалоговое окно «Ошибка ввода данных» для поля ОЦЕНКА ВЕРОЯТНОСТИ

При незаполнении полей КОЭФФИЦИЕНТ БУКМЕКЕРА и БАНК программа выдает ошибки ввода, представленные на рисунках 4.7 и 4.8 соответственно.

глава iv. программная реализация - student2.ru

Рисунок 4.7. Диалоговое окно «Ошибка ввода данных» для поля КОЭФФИЦИЕНТ БУКМЕКЕРА

глава iv. программная реализация - student2.ru

Рисунок 4.8. Диалоговое окно «Ошибка ввода данных» для поля БАНК

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

глава iv. программная реализация - student2.ru

Рисунок 4.9. Диалоговое окно программы с отрицательным результатом вычислений

Результат нажатия кнопки СБРОС, обнуляющей значения всех полей представлен на рисунке 4.10.

глава iv. программная реализация - student2.ru

Рисунок 4.9. Диалоговое окно программы при нажатии кнопки СБРОС

Листинг программы для расчета суммы ставки по методу «критерий Келли»

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Button1: TButton;

Label4: TLabel;

Edit4: TEdit;

Button2: TButton;

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not(key in ['0'..'9',#8,'.']) then key:=#0;

end;

procedure TForm1.Button1Click(Sender: TObject);

Var k,c,b:real;

r,v:integer;

begin

Val(Edit1.Text,v,r);

if r<>0 then

Begin

ShowMessage('Некорректный ввод вероятности');

exit;

End;

if not (v in [1..100]) then

Begin

ShowMessage('Вероятность должна лежать в пределах [1..100]');

exit;

End;

Val(Edit2.Text,k,r);

if r<>0 then

Begin

ShowMessage('Некорректный ввод коэфициена букмекера');

exit;

End;

Val(Edit3.Text,b,r);

if r<>0 then

Begin

ShowMessage('Некорректный ввод банка игрока');

exit;

End;

c:=(k*(v/100)-1)/(k-1);

Edit4.Text:=FloatToStrF(c*b,ffFixed,12,4);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

end;

end.

ЗАКЛЮЧЕНИЕ

В данной работе были подробно разобраны арбитражные ситуации, они были доказаны и описаны с помощью простых линейных неравенств. Была рассказана суть букмекерских контор, принципы их работы. Была разобрана и математически обоснованна стратегия ставок с использованием критерия Келли. Были разработана программа в среде Delphi, которая считает прибыль вилки, также разработана еще одна программа в среде Delphi, рассчитывающая сумму ставки игрока при использовании критерия Келли.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. А. Изодин, И. Миклин, Букмекерство для начинающих, М.: Айрис-пресс, 2012.

2. О. Марьин, Арбитражные ситуации в букмекерских конторах, М.: Айрис-пресс, 2011.

3. Эдвард О. Торп, Критерий Келли в спортивных тотализаторах, 2010.

4. В. Е. Гмурман, Теория вероятностей и математическая статистика, М.: Высшее образование, 2009.

5. http://www.sportsarbitrageguide.com

6. http://www.livelines.ru

7. http://www.surebet-forum.com

8. http://www.betbrain.com

Наши рекомендации