Использование скользящих средних для определения формы игрока с битой в игре в крикет

Попытка использовать простую алгоритмическую торговую стратегию в области крикета для определения текущей формы игрока с битой.

Скользящие средние. Это последовательность средних значений, полученных из последовательных сегментов значений данных, или, проще говоря, среднее значение вычисляется путем взятия значений некоторых значений за предыдущие дни, скажем, за последние 10 дней (для коротких скользящих среднее) или, скажем, за последние 50 дней (для долгосрочных скользящих средних). Скользящее среднее на следующий день рассчитывается путем исключения значения первого дня и включения последнего значения на сегодняшний день или текущего дня. 10-дневная скользящая средняя будет вычисляться путем определения цен закрытия за первые 10 дней в качестве первой точки данных. Следующая точка данных снизит самую раннюю цену, добавит цену на 11-й день и возьмет среднее значение. Чаще всего скользящие скользящие используются для определения направления тренда, т. Е. Повышения или понижения значения.

Стратегия кроссовера в торговле акциями: инвесторы используют скользящую среднюю в качестве индикатора для определения движения цены акций, т. е. того, растет она или падает. Базовая стратегия с использованием скользящих средних - это техника кроссовера.

Возьмите 2 MA, один долгосрочный (скажем, 50 дней) и один краткосрочный (скажем, 10 дней). Пересечение - это точки пересечения графиков, то есть точки, где краткосрочные скользящие средние становятся выше долгосрочной скользящей средней и наоборот.

Сигнал на ПОКУПКУ срабатывает, когда краткосрочная MA пересекает долгосрочную MA (Short term MA ›Long Term MA), что указывает на то, что цены на акции начинают расти. Точно так же сигнал на ПРОДАЖУ срабатывает, когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю (краткосрочная ‹долгосрочная скользящая средняя), указывая на то, что цены начинают снижаться, и инвестору следует держаться подальше от акций и продать акции, если таковые имеются.

Применение к игрокам с битой: игроков с битой обычно называют не в форме (хорошо выступают) или не в форме (не выполняют). Можно провести аналогию с фондовым рынком и экосистемой крикета, где игроки аналогичны акционерной компании, а количество набранных ими очков аналогично цене акций. Используемая стратегия ничем не отличается от крикета. Мы вычисляем 2 MA: одну краткосрочную (скажем, для 4 иннингов) и одну долгосрочную (скажем, для 15 иннингов). Вместо цен мы используем количество пробежек, набранных игроком с битой в данном иннинге.

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

Импорт необходимых модулей

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Чтение записей и расчет скользящих средних для 15 иннингов (длинных) и 4 иннингов (коротких).

df1 = pd.read_csv("51880batting.csv")
#player 51880 from statsguru is Chris Gayle
maLong  = df1['runs'].rolling(window = 15, center = False).mean()
maShort = df1['runs'].rolling(window = 4, center = False).mean()

Сюжет:

plt.plot(df1['runs'].rolling(window=15,center=False).mean(),color = 'k')
plt.plot(df1['runs'].rolling(window=4,center=False).mean(), color= 'g')
plt.show()

Нахождение точек пересечения и расчет среднего значения для следующих 3 иннингов, если краткосрочная скользящая средняя ›долгосрочная скользящая средняя (эквивалент сигнала ПОКУПКИ).

sp = 0 
snp = 0
playCnt = 0
noplayCnt = 0
x = 15               #long term averages begin from index 15
while( x <= 260):    #number of innings is 263 
 if(maLong[x] < maShort[x]):
  if(maLong[x+1] > maShort[x+1]):   #crossover detected
    print ‘no play at’ , x
    snp= snp +df1[‘runs’][x+1] + df1[‘runs’][x+2] + df1[‘runs’][x+3]
    noplayCnt = noplayCnt+3
 
 if(maLong[x] > maShort[x]):
  if(maLong[x+1] < maShort[x+1]):   #crossover detected
   print ‘play at’ ,x
   sp = sp + df1[‘runs’][x+1] + df1[‘runs’][x+2] + df1[‘runs’][x+3] 
   playCnt = playCnt+3
 x = x+1

Расчет и отображение средних значений:

#overall career average
overallAvg = df1[‘runs’].mean()
#average over the next 3 innings after positive or 'BUY' signal
playAvg = sp/playCnt
#average over the next 3 innings after negative or 'SELL' signal noPlayAvg = snp/noplayCnt 
     
print 'Career average: ', overallAvg
print 'Positive Signal average: ', playAvg
print 'Negative Signal average: ', noPlayAvg

Результаты для Криса Гейла

Среднее за карьеру: 34.928030303
Положительное Среднее значение сигнала: 48
Отрицательное Среднее значение сигнала: 32

Результаты для Вират Коли:

Среднее за карьеру: 45.0595238095
Положительное Среднее значение сигнала: 59
Отрицательное Среднее значение сигнала: 30

Среднее количество забитых пробежек намного выше (48 и 59) в иннингах, где считается, что игроки с битой находятся в хорошей форме, чем в среднем за карьеру ~ 35 и ~ 45 соответственно. Это может быть дополнительно развито с использованием WMA (взвешенных скользящих средних), где более поздним иннингам при вычислении средних значений придается больший вес, и я считаю, что это даст еще лучшие результаты.

Полный код и наборы данных можно найти в моем профиле Github.

Данные взяты из Cricinfo Statsguru.

Для получения дополнительной информации о скользящих средних и стратегии кроссовера посетите эту ссылку на Investopedia.

Если вам понравилась статья, нажмите кнопку в виде сердечка внизу.