В этой главе рассматриваются свойства критерия Келли. Для простоты, проиллюстрируем его на примере самого простейшего случая - подбрасывания монеты, но концепция и выводы легко обобщаются.
Допустим, мы играем с бесконечно богатым противником, который будет делать повторяющиеся ставки на независимые события - броски монеты. Далее, предположим, что при каждом броске наша вероятность победы p> 1/2, а вероятность потери q = 1 - p. Наш начальный капитал - XO. Предположим, что наша цель - максимизация ожидаемой величины E (Xn) через n попыток. Сколько мы поставим, Bk, на k-ой попытке? Пусть Tk = 1, если k-я попытка - выигрышная и Tk = -1, если она проиграна, тогда Xk =Xk-1 + Tk Bk для k = 1,2,3.., и Xn = XO + Уnk=1TkBk. Тогда
Так как игра имеет положительное ожидание, то есть p-q> 0, в этой ситуации равных выплат, для того, чтобы максимизировать Е(Хn), мы должны были бы максимизировать E(Bk) для каждой попытки. Таким образом, чтобы максимизировать ожидаемый рост мы должны ставить все наши ресурсы в каждой попытке. Таким образом, B1 = X0 , и, если мы выигрываем первую ставку, B2 = 2X0, и т.д. Однако, вероятность краха при этом будет 1 - pN и при p < 1, lim n>? [1 --рn] = 1 , так что крах почти неизбежен. Таким образом, "смелый" критерий ставок для максимизации ожидаемого роста обычно нежелателен.
Аналогично, если наша стратегия состоит в том, чтобы минимизировать вероятность возможного краха (а "крах" происходит, если XK = 0 на k-ой попытке), мы должны делать минимальную ставку на каждой попытке, но это, к сожалению, также минимизирует и ожидаемый рост. Таким образом, "робкая" система ставок также непривлекательна.
Это предполагает существование промежуточной стратегия, которая лежит где-то между максимизацией E (Xn) (и верным крахом) и уменьшением вероятности краха (и уменьшением E (Хn)). Асимптотически оптимальная стратегия была впервые предложена Джном Келли в 1956 году.
Так как вероятности и выплаты при каждой ставке в описанной игре с подбрасыванием монеты одинаковы, кажется вполне правдоподобно, что "оптимальная" стратегия потребует всегда делать ставки на одну и ту же долю f вашего капитала. Чтобы это было возможным сделать, мы предполагаем далее, что капитал может бесконечно дробиться.
Стратегия, в которой ставки делаются согласно Bi = f Xi-1, где 0 ? f ? 1, иногда называется стратегией "фиксированной доли". Пусть S и F - числа успехов и проигрышей в n попытках соответственно, тогда наш капитал после n попыток равен Xn = Xo(1+ f)S (1-f)F, где S + F = n. При f в интервале 0 < f < 1, Рr (Хn = 0) = 0. Таким образом, "краха", понимаемом в техническом смысле как разорение игрока, произойти не может. "Крах" будет означать, что для произвольно маленького положительного е, limn>?[Рr(Xn ? е)] = 1. В этом смысле, как мы увидим, крах все-таки может случиться при некоторых обстоятельствах.
Отметим, что так как
величина
измеряет экспоненциальную скорость роста за попытку. Келли максимизировал ожидаемую величину коэффициента скорости роста, g(f), где
Получается, что g(f) = (1/n)E[logXn]- (1/n)logX0, поэтому, для фиксированного n, максимизация g(f) - то же самое, что максимизация E[logXn]. Вычислим производную:
когда f = f * = p -- q.
Так как
то g' (f) убывает строго монотонно на [0, 1],
так как g' (0) = p-q > 0 и lim f>1 - g'(f) = - ?. Вследствие непрерывности g'(f), g (f) имеет единственный максимум в точке f=f *,
где g(f *) = p log p + q log q + log 2 > 0. Более того, поскольку g(0) = 0 и lim f>1 - g{f) = - ?, то существует единственное fC > 0, такое что 0 < f* < fC < 1 и g(fC) = 0.
Построим график функции g(f) от f (рисунок 3.1).
Рисунок 3.1. График функции g(f)
Исходя из максимизации функции g(f), Джоном Келли были сформулированы следующие свойства:
- Если g(f) > 0, тогда почти достоверно, что limn>? Хn = ?, то есть для каждого М, Pr [lim n>? inf Хn > М] = 1. Это свойство показывает что, если бы не конечное время, благосостояние игрока XN превысило бы любой установленный предел М, когда f выбрано в интервале (0, fс).
- Если g(f) < 0, тогда почти достоверно, что limn>? Хn = 0, то есть для каждого е>0, Pr [lim n>? sup Хn < е] = 1, получается, что крах неизбежен .
- Если g(f) = 0, тогда почти достоверно, что lim n>? sup Хn= ? и lim n>? inf Хn = 0. Это утверждение демонстрирует, что, если g(f) = 0, тогда почти достоверно, что lim n>? sup Хn= ? и lim n>? inf Хn = 0.
- Для заданной стратегии Ф*, которая максимизирует E[log Xn] и любой другой "существенно иной" стратегии Ф (не обязательно стратегии фиксированных дробных ставок) почти достоверно, что limn>? Хn(Ф*)/Хn (Ф) = ?.
- Ожидаемое время, необходимое чтобы текущий капитал Xn достиг заранее установленного значения С будет, асимптотически, наименьшим при стратегии, которая максимизирует E[log Xn].
- Если предположить, что отдача от одной ставки на i-ой попытке - биноминальная случайная переменная Ui, далее предположим, что вероятность успеха pi, где 1/2 < pi < 1. Тогда E[log Xn] максимизируется выбором значением для ставки при каждой попытке доли f *i = pi - qi которая максимизирует E[ log (1+fiUi)]. Эта часть устанавливает справедливость использования метода Kelly выбора fi* при каждой попытке (даже если от одной попытки к следующей меняется вероятность) для максимизации E[log Xn].
3.3 Пример использования свойств «критерия Келли». Обобщающая формула Келли
Разберем пример:
Игрок А играет против бесконечно богатого противника. Игрок выигрывает одну и ту же сумму при последовательных независимых бросках монеты с вероятностью p =0,53 (независимые события). Игрок А имеет начальный капитал X0 , и капитал может бесконечно делиться. Если мы применим шестое свойство, то получаем * = p - q = 0,53 - 0,47 = 0,06, Таким образом, в каждой игре он должен ставить 6 % текущего капитала, чтобы Xn рос с максимальной скоростью и с нулевой вероятностью краха. Если Игрок А постоянно ставит меньшую долю, чем 6 %, Xn также будет расти до бесконечности, но медленнее.
Если Игрок A постоянно ставит долей большей чем 6 %, но меньше fс , возникает то же самое. Решая уравнение g(f) = 0,53log (l +f) + 0,47log (l - f) = 0 численно на компьютере получаем fc = 0,11973Ї. Так, если ставка больше чем примерно 12 %, то даже при том, что Игрок А может временно наслаждаться быстрой скоростью роста, возможные колебания вниз непременно приведут величину Xn к нулю. Вычисление дает коэффициент роста g(f*)= f (0,06) = 0,001801 так, что после n последовательных ставок логарифм среднего величины капитала Игрока А будет стремиться к значению в 0,001801*n раз превышающему стартовый капитал. Приравнивая 0,001801n = log 2, получаем ожидаемое время, необходимое для удвоения капитала примерно равное n = 385.
Выше рассматривались игры с равномерными выплатами. Но, Критерий Кэлли может легко быть расширен на игры с неравными выплатами. Предположим, Игрок А выигрывает b единиц на каждую единицу ставки. Далее предположим, что на каждой попытке вероятность победы p> 0 и pb - q> 0, так что игра выгодна для Игрока А. Методы, подобные рассмотренным, могут использоваться для максимизации:
Вычисления дают f* = (bp -- q)/(b - 1), эта формула является обобщенной формулой Келли, показывающей какую долю от текущего количества денег нужно выделять для каждой отдельной ставки, чтобы максимизировать коэффициент роста g(f). Если адаптировать эту формулу для ставок на спорт, то она приобретает следующий вид:
С = (K*V) - 1)/(K - 1),
где
С -- коэффициент размера следующей ставки,
K -- коэффициент букмекера,
V - оценка вероятности проходимости события игроком.
ГЛАВА IV. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
4.1 Пример использования программы для расчета букмекерских «вилок»
Необходимо разработать программу, которая по заданным коэффициентам и сумме банка будет находить размеры ставок на каждый итог события, чтобы иметь гарантированную прибыль независимо от результата матча. Также она должна вычислять маржевую прибыль.
Суть программы заключается в следующем:
Имеется какой-либо БАНК (денежная сумма) и КОЭФФИЦИЕНТЫ K1 и K2 (для двух исходного события) и КОЭФФИЦИЕНТЫ K1, K2, KХ (для трех исходного события). Необходимо ввести значения в поле БАНК и в поле КОЭФФИЦИЕНТ нажать кнопку РАССЧИТАТЬ. Программа рассчитает нам маржу между этими коэффициентами (если она положительна, то арбитражная ситуация есть, если она отрицательная или равняется нулю - то, вилки нет) сумму ставки на каждый исход, при которой мы выигрываем одинаковую сумму независимо от результата события и конечную прибыль.
Диалоговые окна программы для расчета двух и трех исходного события изображены на рисунке 4.1. и рисунке 4.2. соответственно.
Рисунок 4.1. Диалоговое окно программы для двух исходного события
Рисунок 4.2. Диалоговое окно программы для трех исходного события
Все значения должны быть представлены в числовой форме, при несоблюдении этого правила программа выдает сообщение об ошибке.
Примеры таких ситуаций представлены на рисунке 3.3. и рисунке 3.4.
Рисунок 4.3. Диалоговое окно «Ошибка ввода данных» для поля КОЭФФИЦИЕНТ.
Рисунок 4.4. Диалоговое окно «Ошибка ввода данных» для поля БАНК.
4.2 Листинг программы для расчета букмекерских «вилок»
Текст модуля формы
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;