Применение в ставках Excel and VBA для чайников
#41 OFFLINE
Добавлено 26 February 2014 - 18:05
Функция (возвращает 5 ответов--номер кластера, отв. по 1Х2 и ТМ2.5)
{CLASTG1G2(AB31:AC31)}
Function CLASTG1G2(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(1) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ
Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(15, 1) As Double
Dim Wix(15, 4) As Double
Dim SRR As Double
Dim Otvet(4) As Double
Vxod(0, 0) = 1.37
Vxod(1, 0) = 0.967
Vxod(2, 0) = 0.85
Vxod(3, 0) = 1.7458
Vxod(4, 0) = 3.9478
Vxod(5, 0) = 2.4466
Vxod(6, 0) = 2.738
Vxod(7, 0) = 0.8559
Vxod(8, 0) = 1.9972
Vxod(9, 0) = 1.503
Vxod(10, 0) = 1.1587
Vxod(11, 0) = 1.04227
Vxod(12, 0) = 0.852
Vxod(13, 0) = 1.3458
Vxod(14, 0) = 1.8986
Vxod(15, 0) = 2.4949
Vxod(0, 1) = 1.238
Vxod(1, 1) = 3.124
Vxod(2, 1) = 0.7298
Vxod(3, 1) = 0.5107
Vxod(4, 1) = 0.788
Vxod(5, 1) = 0.522
Vxod(6, 1) = 0.9894
Vxod(7, 1) = 1.1185
Vxod(8, 1) = 1.2544
Vxod(9, 1) = 1.689
Vxod(10, 1) = 0.478
Vxod(11, 1) = 2.223
Vxod(12, 1) = 1.6209
Vxod(13, 1) = 0.8605
Vxod(14, 1) = 0.87
Vxod(15, 1) = 1.7386
Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15
Wix(0, 1) = 0.4266
Wix(1, 1) = 0.1644
Wix(2, 1) = 0.408
Wix(3, 1) = 0.5904
Wix(4, 1) = 0.8835
Wix(5, 1) = 0.7349
Wix(6, 1) = 0.655
Wix(7, 1) = 0.3843
Wix(8, 1) = 0.53086
Wix(9, 1) = 0.4296
Wix(10, 1) = 0.4885
Wix(11, 1) = 0.217
Wix(12, 1) = 0.27966
Wix(13, 1) = 0.441
Wix(14, 1) = 0.57078
Wix(15, 1) = 0.555
Wix(0, 2) = 0.2857
Wix(1, 2) = 0.2466
Wix(2, 2) = 0.2943
Wix(3, 2) = 0.25
Wix(4, 2) = 0.0485
Wix(5, 2) = 0.1566
Wix(6, 2) = 0.2136
Wix(7, 2) = 0.301
Wix(8, 2) = 0.2747
Wix(9, 2) = 0.22
Wix(10, 2) = 0.2984
Wix(11, 2) = 0.2638
Wix(12, 2) = 0.2655
Wix(13, 2) = 0.2923
Wix(14, 2) = 0.267
Wix(15, 2) = 0.2685
Wix(0, 3) = 0.2877
Wix(1, 3) = 0.589
Wix(2, 3) = 0.2977
Wix(3, 3) = 0.1596
Wix(4, 3) = 0.068
Wix(5, 3) = 0.108
Wix(6, 3) = 0.13
Wix(7, 3) = 0.3144
Wix(8, 3) = 0.1944
Wix(9, 3) = 0.35
Wix(10, 3) = 0.213
Wix(11, 3) = 0.519
Wix(12, 3) = 0.4548
Wix(13, 3) = 0.26667
Wix(14, 3) = 0.162
Wix(15, 3) = 0.1759
Wix(0, 4) = 0.4768
Wix(1, 4) = 0.4795
Wix(2, 4) = 0.5719
Wix(3, 4) = 0.5186
Wix(4, 4) = 0.31068
Wix(5, 4) = 0.43
Wix(6, 4) = 0.4515
Wix(7, 4) = 0.5611
Wix(8, 4) = 0.4969
Wix(9, 4) = 0.45
Wix(10, 4) = 0.515
Wix(11, 4) = 0.48085
Wix(12, 4) = 0.5537
Wix(13, 4) = 0.5675
Wix(14, 4) = 0.452
Wix(15, 4) = 0.3888
For i = 0 To 15
SRR = 0
For j = 0 To 1
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2
Next j
Arrast(i) = SRR
Next i
For k = 0 To 4
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k
CLASTG1G2 = Otvet
End Function
#42 OFFLINE
Добавлено 04 March 2014 - 08:54
Function PARMOD(ByRef rah0 As Range, ByRef rah1 As Range, ByRef rah2 As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Set Win = rah0
Set HX = rah1
Set TM = rah2
Dim H, T, M As Variant
Dim S, P As Double
Dim Xt1, Yt1 As Double
Dim Fx, Ftm, B, C, EDP, EDDP, EDS, EDDS, BDP, CDS As Double
Dim REZ(1) As Double
H = 0.872 / HX.Value
T = 0.961 / TM.Value
M = 1.35
S = 2.25
P = 1.25
Xt1 = 0
Yt1 = 0
Do Until Abs(Yt1 - S) < 0.0001 And Abs(Xt1 - P) < 0.0001
Do Until Abs(Xt1 - P) < 0.0001
Fx = Exp(-S) * (1 + P + P ^ 2 / 4 + P ^ 3 / 36 + P ^ 4 / 576 + P ^ 5 / 14400)
B = Exp(-S) * (1 + P / 2 + P ^ 2 / 12 + P ^ 3 / 144 + P ^ 4 / 2880)
BDP = Exp(-S) * (0.5 + P / 6 + P ^ 2 / 48 + P ^ 3 / 720)
EDP = (Fx - H) * B
EDDP = B ^ 2 + BDP * (Fx - H)
Xt1 = P
P = P - EDP / EDDP
Loop
Fx = Exp(-S) * (1 + P + P ^ 2 / 4 + P ^ 3 / 36 + P ^ 4 / 576 + P ^ 5 / 14400)
B = Exp(-S) * (1 + P / 2 + P ^ 2 / 12 + P ^ 3 / 144 + P ^ 4 / 2880)
BDP = Exp(-S) * (0.5 + P / 6 + P ^ 2 / 48 + P ^ 3 / 720)
EDP = (Fx - H) * B
EDDP = B ^ 2 + BDP * (Fx - H)
Xt1 = P
P = P - EDP / EDDP
Fx = Exp(-S) * (1 + P + P ^ 2 / 4 + P ^ 3 / 36 + P ^ 4 / 576 + P ^ 5 / 14400)
Ftm = Exp(-S) * (1 + S + S ^ 2 / 2)
B = Exp(-S) * (1 + P / 2 + P ^ 2 / 12 + P ^ 3 / 144 + P ^ 4 / 2880)
C = -(S ^ 2 / 2) * Exp(-S)
CDS = Exp(-S) * (S ^ 2 / 2 - S)
EDS = C * (Ftm - T) * M - Fx * (Fx - H)
EDDS = (Fx * (Fx - H) + Fx ^ 2) / (H ^ 2) + M * (CDS * (Ftm - T) + C ^ 2) / (T ^ 2)
Yt1 = S
S = S - EDS / EDDS
Loop
If (S ^ 2 / 4 - P >= 0) And (1 - 1 / Win.Value - 2 / HX.Value <= 0) Then
REZ(0) = (S / 2 + (S ^ 2 / 4 - P) ^ 0.5) * 1.001
REZ(1) = (S / 2 - (S ^ 2 / 4 - P) ^ 0.5) * 1.001
PARMOD = REZ
ElseIf (S ^ 2 / 4 - P >= 0) And (1 - 1 / Win.Value - 2 / HX.Value > 0) Then
REZ(0) = (S / 2 - (S ^ 2 / 4 - P) ^ 0.5) * 1.001
REZ(1) = (S / 2 + (S ^ 2 / 4 - P) ^ 0.5) * 1.001
PARMOD = REZ
Else
PARMOD = "НЕОПРЕДЕЛЁННОСТЬ"
End If
End Function
Функция возвращает массив из двкх чисел (вводится как функц. массива в две горизонтальные ячейки),
получаем приближённые значения МО1 МО2 для линии БК…далее можно приблизительно расчитать кефы
на рынках где у нас нет данных по Кбук,….. то что получится по формулам надо обработать «маржой» допустим кефф на фаворита можно получить из расчётного делением на 1,05-1,06 на ничью поделив на 1,08-1.09
кефф на тотал примерно на 1,045-1,065 на счёт надо вводить большую маржу-12-17% (а для высоких кефоф и выше) ну и так далее. Оценки очень приближённые, но для каких-то прикидок могут пригодиться (если кефоф нет). Небольшие корректировки можно попробовать получить для отдельных групп кефоф изменяя выделленные жирным поправочные коэффициенты внутри функции. Ни каких предварительных преобразований вводимые в функцию начальные кефы не требуют (это частично учтено в кефах-поправках)
={PARMOD(A13;B13;C13)}
A13-кеф на П1 B13-кеф на Х C13-кеф на ТМ2.5
Расчёт ведётся только по КХ и тоталу, К на П1 используется только чтоб раскинуть МО в соответствии с силой команд—силной большее МО и наоборот….
Функция имеет параметр пересчёта как и другие ранее приведённые ф.
={PARMOD(A13;B13;C13;1)}
Иногда линии 1Х2 и ТМ-ТБ сильно рассогласованы и функция выдаёт неопределённость , особенно если повысить кефф при H = 0.872 / HX.Value до 0.9 тогда можно немного понизить искусственно кефф на ТМ если его задрали ввеерх (но учесть потом этот факт при обработке кефоф маржой).
Теоретически для определённого вида ставок и какой-то полосы коэффициентов можно временно сделать
параметры выделенные жирным передаваемыми в функцию и на большом объёме подобрать их примитивным способом—«поиском решения» по наилучшему совпадению (сумма квадратов отклонений) получаемых оценок (обработанных маржой) с БК.
Если у кого-то есть более точный алгоритм получения МО, то выкладывайте тут……..
Можно используя модель из ТФМ получить и кефы в лайве, что иногда трудно прикинуть и оценить некоторым начинающим игрокам.... разумеется надо уметь расчитывать рынки которые Вас интересуют...но материала в ТФМ более чем достаточно для этого.
Отредактировано Bambuk, 04 March 2014 - 09:00.
#43 OFFLINE
Добавлено 04 March 2014 - 09:27
Sub JOPA1()
'
' Macros1 jopa
'
'
Range("A1:A381").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
Array(7, 2), Array(8, 1), Array(9, 1), Array(10, 2), Array(11, 1), Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
(20, 1), Array(21, 1), Array(22, 1), Array(23, 2), Array(24, 2), Array(25, 2), Array(26, 2), _
Array(27, 2), Array(28, 2), Array(29, 2), Array(30, 2), Array(31, 2), Array(32, 2), Array( _
33, 2), Array(34, 2), Array(35, 2), Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), _
Array(40, 2), Array(41, 2), Array(42, 2), Array(43, 2), Array(44, 2), Array(45, 2), Array( _
46, 2), Array(47, 2), Array(48, 2), Array(49, 2), Array(50, 2), Array(51, 2), Array(52, 2), _
Array(53, 2), Array(54, 2), Array(55, 2), Array(56, 2), Array(57, 2), Array(58, 2), Array( _
59, 2), Array(60, 2), Array(61, 2), Array(62, 2), Array(63, 2), Array(64, 2), Array(65, 2), _
Array(66, 2), Array(67, 2), Array(68, 2), Array(69, 2), Array(70, 2)) _
, TrailingMinusNumbers:=True
End Sub
Array(56, 2), Выделенный жирным параметр отвечает за формат в столбце (56 считаем с начала преобразования) ..Все данные берутся вот от сюда ("A1:A381") и распаковываются вставляясь в область начиная вот от сюда Selection.TextToColumns Destination:=Range("B1") (столбец с которого начинаем)…
Если число столбцов другое то надо подкорректировать форматы 1-общий 2-текстовый.
Текстовый формат выбираем для столбцов где данные с точками, где буквы, и можно где даты наверно.
Потом кусок с точками нам надо из текстового формата преобразовать в формат где возможны дальнейшие вычисления с кефами БК. Делается это функцией
=ЕСЛИ(ЕОШИБКА(ПОИСК(".";X2));ЗНАЧЕН(X2);ЗНАЧЕН(ЗАМЕНИТЬ(X2;ПОИСК(".";X2);1;",")))
Х2-адрес яч с данными (где точки и текстовый формат), достаточно вставить формулу в одну яч. А потом просто протащить и скопировать в нужную область, где данные будут приводиться к нужному виду.
#44 OFFLINE
Добавлено 04 March 2014 - 15:43
#45 OFFLINE
Добавлено 04 March 2014 - 15:53
Gsan, on 04 March 2014 - 15:43, сказал:
Lastrow = ActiveSheet.UsedRange.Rows.Count 'Присваивается значение номера последней строки в рабочем диапазоне
Set Stolbez_A = Range(Cells(1, 1), Cells(Lastrow, 1)) 'Переменной присваивается столбец 1 в рабочей области данных
For Each Poisk In Stolbez_A 'Запускается цикл вытаскивания данных из строки и закидывания их в ячейки
a = Split(Poisk, ",")
For j = 0 To UBound(a)
Poisk.Offset(0, j) = a(j)
Poisk.Offset(0, j).NumberFormat = "@"
Poisk.Offset(0, j) = Replace(Format(Poisk, "0.00"), ",", ".")
Next j
Next Poisk
Set Stolbez_A = Nothing 'Переменная обнуляется
#46 OFFLINE
Добавлено 04 March 2014 - 19:09
Fedorok, on 04 March 2014 - 15:53, сказал:
Set Stolbez_A = Range(Cells(1, 1), Cells(Lastrow, 1)) 'Переменной присваивается столбец 1 в рабочей области данных
For Each Poisk In Stolbez_A 'Запускается цикл вытаскивания данных из строки и закидывания их в ячейки
a = Split(Poisk, ",")
For j = 0 To UBound(a)
Poisk.Offset(0, j) = a(j)
Poisk.Offset(0, j).NumberFormat = "@"
Poisk.Offset(0, j) = Replace(Format(Poisk, "0.00"), ",", ".")
Next j
Next Poisk
Set Stolbez_A = Nothing 'Переменная обнуляется
Вопрос--- а вот эти переменные надо описывать или нет---Poisk , a (а как я понял это массив..Poisk--типа объекта что ли?...ни ХУ не понимаю в программировании этом....) ? Если да то как? Я как понял распакуется с самого исходного столбца так как в цикле мы с нуля идём (нет смещения)..... или я чего-то не вкурил? (Две недели тока читаю книжку..... до Split чего-то не догнал....)
#47 OFFLINE
Добавлено 04 March 2014 - 19:48
Bambuk, on 04 March 2014 - 19:09, сказал:
Dim Lastrow As Long 'Объявляется переменная содержащая номер последней строки в используемом диапазоне
Dim Stolbez_A As Range 'Объявляется переменная содержащая данные 1-ого столбца
Dim Poisk As Range 'Объявляется переменная обозначающая ячейку в переменной Stolbez_A
Dim j As Integer 'Объявляется переменная количества столбцов в строке данных
Да, распакуется с самого исходного столбца. В функции split можно задать любой разделитель: будь то точка, запятая, знак табуляции, да хоть целое слово какое-нибудь, не важно.
#48 OFFLINE
Добавлено 04 March 2014 - 20:22
#49 OFFLINE
Добавлено 09 March 2014 - 16:52
Poisk.Offset(0, j ).NumberFormat = "@"
Poisk.Offset(0, j ) = Replace(Format(Poisk, "0.00"), ".", ",")
можно посмотреть распаковку со второй ячейки а эти операторы посмотреть в цикле
For i = 0 To UBound(a)
Poisk.Offset(0, i + 1).NumberFormat = "@"
Poisk.Offset(0, i + 1) = Replace(Format(Poisk, "0.00"), ",", ".")
Next i
Вот так всё работает (надо только дату объявить предварительно в текстовом формате а остальная область распаковки объявляется в общем формате...тогда эти два оператора можно выкинуть и всё будет нормально раскидываться с запятыми по яч.)
Sub Ìàêðîñ1()
'
' Ìàêðîñ1 Ìàêðîñ
'
'
Dim Lastrow As Long
Dim Stolbez_A As Range
Dim Poisk As Range
Dim i, j As Integer
Lastrow = ActiveSheet.UsedRange.Rows.Count
Set Stolbez_A = Range(Cells(1, 1), Cells(Lastrow, 1))
For Each Poisk In Stolbez_A
a = Split(Poisk, ",")
For j = 0 To UBound(a)
Poisk.Offset(0, j + 1) = a(j)
Next j
Next Poisk
Set Stolbez_A = Nothing
End Sub
#50 OFFLINE
Добавлено 30 May 2014 - 15:34
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Dim ADR As Variant
Dim j As Integer
j = 0
For ADR = 291401 To 291462
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://24score.com/soccer/info.php?id=" & ADR, Destination:=Range("$A$1" _
))
.Name = "info.php?id=" & ADR
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
j = j + 1
Range("O4:AN4").Select
Selection.Copy
Cells(10 + j, 15).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1:B120").Select
Selection.QueryTable.Delete
Selection.ClearContents
Next
End Sub
потом эти данные подвергаются дальнейшей обработке.
#51 OFFLINE
Добавлено 30 May 2014 - 18:32
регулируем в For ADR = 291401 To 291462 лучше грузить неболее 100 +- потом там по ходу разбираться где ошибки возникают (при большем объёме я не знаю как там разрулить... допустим 1000 (я не программист поэтому если возможны улучшения помогите начинающим....)
#52 OFFLINE
Добавлено 05 July 2014 - 13:43
fullstats.co.uk/livescorepro/upcoming-matches.html?sport=soccer&team=
задача - принимать данные с текущего события каждые 15 минут.
чтобы конечный вид таблицы сформировался проимерно в таком виде
[img]s11.postimg.org/qtd0885cj/Clipboard01.jpg[/img]
есть 2-3 макроса которые делают это, но надо их шлифовать
П.С. а может из вышеуказанного ресурса (24score.com) извлечь такую статистику?
или на www.football-data.co.uk , www.soccerbot.com есть что?
#53 OFFLINE
Добавлено 10 August 2014 - 19:38
два раза прописано
Vxod(0, 0) = 1.25
Vxod(1, 0) = 2.0288
Vxod(2, 0) = 2.25074
Vxod(3, 0) = 1.1487
Vxod(4, 0) = 1.4299
Vxod(5, 0) = 2.1028
Vxod(6, 0) = 1.6762
Vxod(7, 0) = 1.4966
Vxod(8, 0) = 1.4656
Vxod(9, 0) = 1.4579
Vxod(10, 0) = 1.2202
Vxod(11, 0) = 1.07
Vxod(12, 0) = 1.3399
Vxod(13, 0) = 1.3153
Vxod(14, 0) = 1.3
Vxod(15, 0) = 3.19
вместо второго столбца идёт первый (или если брать нумерацию с 0 то вместо 1 идёт нулевой который показан)
исправьте функ.
{=Bclaster1(U8:AB8)}
Код модуля
Function Bclaster1(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(7) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ
Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(15, 7) As Double
Dim Wix(15, 3) As Double
Dim SRR As Double
Dim Otvet(3) As Double
Vxod(0, 0) = 1.25
Vxod(1, 0) = 2.0288
Vxod(2, 0) = 2.25074
Vxod(3, 0) = 1.1487
Vxod(4, 0) = 1.4299
Vxod(5, 0) = 2.1028
Vxod(6, 0) = 1.6762
Vxod(7, 0) = 1.4966
Vxod(8, 0) = 1.4656
Vxod(9, 0) = 1.4579
Vxod(10, 0) = 1.2202
Vxod(11, 0) = 1.07
Vxod(12, 0) = 1.3399
Vxod(13, 0) = 1.3153
Vxod(14, 0) = 1.3
Vxod(15, 0) = 3.19
Vxod(0, 1) = 1.24515
Vxod(1, 1) = 1.18096
Vxod(2, 1) = 0.9186
Vxod(3, 1) = 0.9499
Vxod(4, 1) = 1.1
Vxod(5, 1) = 0.923
Vxod(6, 1) = 0.795
Vxod(7, 1) = 1.103
Vxod(8, 1) = 0.9616
Vxod(9, 1) = 1.014
Vxod(10, 1) = 1.6844
Vxod(11, 1) = 0.9659
Vxod(12, 1) = 1.182
Vxod(13, 1) = 1.0756
Vxod(14, 1) = 1.3319
Vxod(15, 1) = 0.787
Vxod(0, 2) = 0.90068
Vxod(1, 2) = 1.106
Vxod(2, 2) = 1.5457
Vxod(3, 2) = 0.8842
Vxod(4, 2) = 0.949
Vxod(5, 2) = 1.4304
Vxod(6, 2) = 1.6762
Vxod(7, 2) = 1.0126
Vxod(8, 2) = 0.9613
Vxod(9, 2) = 0.9907
Vxod(10, 2) = 0.8511
Vxod(11, 2) = 0.943
Vxod(12, 2) = 0.9818
Vxod(13, 2) = 1.0015
Vxod(14, 2) = 1.0511
Vxod(15, 2) = 2.235
Vxod(0, 3) = 1.7086
Vxod(1, 3) = 1.5317
Vxod(2, 3) = 0.96439
Vxod(3, 3) = 1.45885
Vxod(4, 3) = 1.5462
Vxod(5, 3) = 1.267
Vxod(6, 3) = 1.404
Vxod(7, 3) = 1.698
Vxod(8, 3) = 1.0661
Vxod(9, 3) = 1.7481
Vxod(10, 3) = 1.708
Vxod(11, 3) = 1.7577
Vxod(12, 3) = 1.441
Vxod(13, 3) = 1.5826
Vxod(14, 3) = 2.29
Vxod(15, 3) = 0.9967
Vxod(0, 4) = 2.1289
Vxod(1, 4) = 1.2665
Vxod(2, 4) = 1.3368
Vxod(3, 4) = 1.111
Vxod(4, 4) = 2.1706
Vxod(5, 4) = 2.0706
Vxod(6, 4) = 1.357
Vxod(7, 4) = 3.2485
Vxod(8, 4) = 1.2794
Vxod(9, 4) = 1.2215
Vxod(10, 4) = 1.3358
Vxod(11, 4) = 1.5945
Vxod(12, 4) = 1.2306
Vxod(13, 4) = 1.8365
Vxod(14, 4) = 1.35
Vxod(15, 4) = 1.5754
Vxod(0, 5) = 0.77625
Vxod(1, 5) = 1.1095
Vxod(2, 5) = 1.28907
Vxod(3, 5) = 0.9793
Vxod(4, 5) = 1.28187
Vxod(5, 5) = 0.8887
Vxod(6, 5) = 1.0243
Vxod(7, 5) = 0.7703
Vxod(8, 5) = 0.9238
Vxod(9, 5) = 1.3
Vxod(10, 5) = 1.0626
Vxod(11, 5) = 0.8781
Vxod(12, 5) = 1.6952
Vxod(13, 5) = 0.9347
Vxod(14, 5) = 1.2428
Vxod(15, 5) = 1.1611
Vxod(0, 6) = 1.7017
Vxod(1, 6) = 1.03686
Vxod(2, 6) = 0.951
Vxod(3, 6) = 0.93238
Vxod(4, 6) = 1.1162
Vxod(5, 6) = 1.5947
Vxod(6, 6) = 0.9389
Vxod(7, 6) = 2.2127
Vxod(8, 6) = 1.026
Vxod(9, 6) = 0.7255
Vxod(10, 6) = 0.9759
Vxod(11, 6) = 1.1127
Vxod(12, 6) = 0.8745
Vxod(13, 6) = 1.3756
Vxod(14, 6) = 0.957759
Vxod(15, 6) = 1.0708
Vxod(0, 7) = 1.0279
Vxod(1, 7) = 1.855
Vxod(2, 7) = 1.6137
Vxod(3, 7) = 1.8883
Vxod(4, 7) = 1.2936
Vxod(5, 7) = 1.1438
Vxod(6, 7) = 1.4752
Vxod(7, 7) = 1.0169
Vxod(8, 7) = 1.2299
Vxod(9, 7) = 1.2633
Vxod(10, 7) = 1.5143
Vxod(11, 7) = 1.1657
Vxod(12, 7) = 1.9391
Vxod(13, 7) = 1.822
Vxod(14, 7) = 1.96178
Vxod(15, 7) = 1.61435
Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15
Wix(0, 1) = 0.229
Wix(1, 1) = 0.5706
Wix(2, 1) = 0.72
Wix(3, 1) = 0.4921
Wix(4, 1) = 0.4181
Wix(5, 1) = 0.4351
Wix(6, 1) = 0.6068
Wix(7, 1) = 0.1747
Wix(8, 1) = 0.5
Wix(9, 1) = 0.4766
Wix(10, 1) = 0.382
Wix(11, 1) = 0.3034
Wix(12, 1) = 0.4919
Wix(13, 1) = 0.4037
Wix(14, 1) = 0.4404
Wix(15, 1) = 0.8604
Wix(0, 2) = 0.2109
Wix(1, 2) = 0.2507
Wix(2, 2) = 0.1907
Wix(3, 2) = 0.33158
Wix(4, 2) = 0.2241
Wix(5, 2) = 0.2922
Wix(6, 2) = 0.2321
Wix(7, 2) = 0.2289
Wix(8, 2) = 0.2832
Wix(9, 2) = 0.3
Wix(10, 2) = 0.344
Wix(11, 2) = 0.3065
Wix(12, 2) = 0.288
Wix(13, 2) = 0.2484
Wix(14, 2) = 0.2924
Wix(15, 2) = 0.093
Wix(0, 3) = 0.56
Wix(1, 3) = 0.1786
Wix(2, 3) = 0.08923
Wix(3, 3) = 0.1763
Wix(4, 3) = 0.3578
Wix(5, 3) = 0.2727
Wix(6, 3) = 0.16099
Wix(7, 3) = 0.5963
Wix(8, 3) = 0.2167
Wix(9, 3) = 0.2233
Wix(10, 3) = 0.2737
Wix(11, 3) = 0.39
Wix(12, 3) = 0.22
Wix(13, 3) = 0.3478
Wix(14, 3) = 0.2671
Wix(15, 3) = 0.0465
For i = 0 To 15
SRR = 0
For j = 0 To 7
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2
Next j
Arrast(i) = SRR
Next i
For k = 0 To 3
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k
Bclaster1 = Otvet
End Function
#54 OFFLINE
Добавлено 10 August 2014 - 20:45
#55 OFFLINE
Добавлено 11 August 2014 - 04:59
denvb, on 10 August 2014 - 20:45, сказал:
Если Вы такую работу начнёте сами делать то много времени убьёте на все заморочки (это или мощьный софт какой-то надо мудить или ещё как а тут можно в екселе всё делать встроенными функциями.). Вот примерно какие данные https://yadi.sk/i/qRRQ7FsaZPywe но тут мало--это я для поста в ветке Турбо (Качественные прогнозы на футбол) обрабатывал
Ссылка Здесь
а так вообще в БД данных больше раза в два (и это только потому что я играю только по 1Х2 и всё)
Вот примерно по одной паре объём дан--смотри конец поста (без кластеров и их ответов, по части приведённого можно раскидывать на группировки разными способами...часть из которых в этой теме для чайников и описаны--ибо я сам чайник в программировании).
Единственный большой минус--ексель не тянет такой объём вычислений прога виснет--надо после расчёта все данные копировать и вставлять как значения (можно оставить одну строку с формулами и вот её тянуть по базе и оставлять потом одну какую-то строку и всё иначе ексель не вытянет даже пять лиг ибо все данные вычисляются фактически только по резам игр (ну и кефы какие-то...). В теме турбо там есть ссылка на файл (кластеры для футбольных прогнозов там всё более подробно описано и даны встроенные функци и как ими пользоваться--в общих чертах)..далее просто можно развивать это направление (кому оно покажется привлекательным и неординарным).
3 0 1,766307 1,766307 0 0 0 1 0 0 0 0 0 -4,52513311 37,1563977 10,3727743 -0,16209348 0,04773274 0,264565 1,48 4,05 7,22 1,49-5,2-7,43 1,77 3,87 5,71 2,00E-05 0,0002 0,0014 0,0084 0,0385 0,126 0,2587 0,2687 0,1752 0,0818 0,0296 0,0087 0,0022 280 Atalanta Pescara 2 1 1,077 1,308 0,615 2,231 1,521781909 0,713556034 2,2353 3 13 1,94 1 2,06 13 1,83 1,52178191 21 1,52178191 1 0,71355603 1 1 11 0 1,57865385 1,1277793 9 9 32,3 22 23,1 30,9 0,99411 1 -0,25 23 -0,25 16 0 3 -1,5 21 -0,25 14 0 0 -0,25G3:-0,25D0 1D3:-0,25G3 -0,25D0:-1,5G0 -1G0:-0,25D0 -0,25G3:-0,25D0&-0,25D0:-1,5G0 1D3:-0,25G3&-1G0:-0,25D0 G3 D0 D0 G0 1 1 0 1,0839 1,2282 2,5946 32 21 27 27 0,407407407 0*1 24 1*1 34 2*1 67 0,385 0,231 0,385 0,154 0,154 0,692 1,53 4,33 8,67 1,86-5,2-3,71 1,49-5,2-7,43 1,49 5,2 7,43 0,333 0,333 0,333 0,111 0,111 0,778 1,48 0 0 -0,04538 -0,26923 0,449231 -0,41308 1,185185 0,777778 0,777778 0 0,65625 0 0,203103 0,441368 -0,23826486 0,388889 0,055556 0,33333 1,16667 1,33333 0,83333 1,66667 0,83333 1,58333 0,66667 2,16667 1,125 1,25 0,875 1,875 0,875 2 0,625 2,625 0,4167 0,25 0,3333 0,1667 0,1667 0,6667 0,25 0,0833 0,6667 0,3333 0,0833 0,5833
Отредактировано Bambuk, 11 August 2014 - 05:00.
#56 OFFLINE
Добавлено 11 August 2014 - 06:07
ТИПА AVERAGE STATISTICS 2014 - 2015
HOME AWAY
Goals scored 1.5 1.6
Goals conceded 0.8 1.3
Time first goal scored 45 mins 35 mins
Time first goal conceded 35 mins 41 mins
Yellow cards 1.4 1.7
Red cards 0.2 0.1
Subs used 2.9 2.9
Biggest victory 3-0 6-1
Biggest defeat 2-1 6-2
Отредактировано Bambuk, 11 August 2014 - 06:09.
#57 OFFLINE
Добавлено 12 August 2014 - 07:20
#58 OFFLINE
Добавлено 12 August 2014 - 08:43
игрок, on 12 August 2014 - 07:20, сказал:
В этой ветке можно допустим пообсуждать на примере какомто конкретном как чем пользоваться. Если У кого есть время свободное и желание допустим делать тоже самое что делает Турбо в своей ветке(Качественные прогнозы на футбол) но без догонялова...я могу дать тут некоторую формализованную процедуру как такие ставки выбрать. Но единственное что у меня нет кефоф на линию Z1>=1 (сейчас вот сижу демаю как её породить из других кефоф (например из 1Х2 и ТМ2.5)....
Просто если кефы будут по хоу тестирования то можно полностью сделать формализованный прибыльный алгоритм(если получится...могут кефы сильно валить вниз букмекеры)..
ну в целом это будет хорошая открытая практика... У меня времени просто нет вести такую ветку с примерами. Пишите тут кому это интересно.
Пока вот для начала функция кластеризации всего по двум параметрам. ОЧ12 и З1 (в публикации про кластеры написано что как вычислять или можно на сайтах брать...думаю для ОЧ12 можно с любого сайта так как ОЧ12=очки1/число игр1-очки2/число игр2, а вот этот З1 он хоть и отличаться будет от моего но думаю не шибко сильно с сайта wettbasis.touch-line.com (выше я приводил).
{CLASTZZZ(AB31:AC31)} (выделяются сразу две ячейки куда функция возвращает ответы и вводится формула как для работы с массивами) AB31:AC31-это две соседние ячейки в правой значение ОЧ и соседняя З1—они передаются в функцию)
Function CLASTZZZ(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i As Long
Dim smas(1) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ
Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(31, 1) As Double
Dim Wix(31, 1) As Double
Dim SRR As Double
Dim Otvet(1) As Double
Vxod(0, 0) = 0.33
Vxod(1, 0) = -1.299
Vxod(2, 0) = 0.2466
Vxod(3, 0) = 0.485
Vxod(4, 0) = -0.646
Vxod(5, 0) = -0.318
Vxod(6, 0) = -1.56
Vxod(7, 0) = 0.128
Vxod(8, 0) = 1.46
Vxod(9, 0) = -0.769
Vxod(10, 0) = -0.4469
Vxod(11, 0) = -1.083
Vxod(12, 0) = 0.623
Vxod(13, 0) = 0.035
Vxod(14, 0) = 0.9389
Vxod(15, 0) = -0.06417
Vxod(16, 0) = -0.4
Vxod(17, 0) = 0.707
Vxod(18, 0) = -0.3369
Vxod(19, 0) = 0.2879
Vxod(20, 0) = -0.0073
Vxod(21, 0) = 0.892
Vxod(22, 0) = 1.2635
Vxod(23, 0) = 0.2963
Vxod(24, 0) = 1.2732
Vxod(25, 0) = -1.086
Vxod(26, 0) = -0.043
Vxod(27, 0) = 0.517
Vxod(28, 0) = -0.347
Vxod(29, 0) = -0.833
Vxod(30, 0) = -0.03786
Vxod(31, 0) = -0.401
Vxod(0, 1) = 1.3826
Vxod(1, 1) = 0.944
Vxod(2, 1) = 3.079
Vxod(3, 1) = 2.433
Vxod(4, 1) = 1.249
Vxod(5, 1) = 1.298
Vxod(6, 1) = 1.32
Vxod(7, 1) = 2.122
Vxod(8, 1) = 2.061
Vxod(9, 1) = 1.61
Vxod(10, 1) = 0.7848
Vxod(11, 1) = 1.994
Vxod(12, 1) = 1.543
Vxod(13, 1) = 1.5749
Vxod(14, 1) = 1.7496
Vxod(15, 1) = 1.8314
Vxod(16, 1) = 1.83
Vxod(17, 1) = 1.1754
Vxod(18, 1) = 1.058
Vxod(19, 1) = 1.07
Vxod(20, 1) = 0.8818
Vxod(21, 1) = 2.173
Vxod(22, 1) = 3.57
Vxod(23, 1) = 1.71
Vxod(24, 1) = 2.78
Vxod(25, 1) = 1.3438
Vxod(26, 1) = 1.393
Vxod(27, 1) = 1.94
Vxod(28, 1) = 1.517
Vxod(29, 1) = 0.958
Vxod(30, 1) = 1.181
Vxod(31, 1) = 2.265
Wix(0, 0) = 0
Wix(1, 0) = 1
Wix(2, 0) = 2
Wix(3, 0) = 3
Wix(4, 0) = 4
Wix(5, 0) = 5
Wix(6, 0) = 6
Wix(7, 0) = 7
Wix(8, 0) = 8
Wix(9, 0) = 9
Wix(10, 0) = 10
Wix(11, 0) = 11
Wix(12, 0) = 12
Wix(13, 0) = 13
Wix(14, 0) = 14
Wix(15, 0) = 15
Wix(16, 0) = 16
Wix(17, 0) = 17
Wix(18, 0) = 18
Wix(19, 0) = 19
Wix(20, 0) = 20
Wix(21, 0) = 21
Wix(22, 0) = 22
Wix(23, 0) = 23
Wix(24, 0) = 24
Wix(25, 0) = 25
Wix(26, 0) = 26
Wix(27, 0) = 27
Wix(28, 0) = 28
Wix(29, 0) = 29
Wix(30, 0) = 30
Wix(31, 0) = 31
Wix(0, 1) = 0.442
Wix(1, 1) = 0.235
Wix(2, 1) = 0.656
Wix(3, 1) = 0.642
Wix(4, 1) = 0.317
Wix(5, 1) = 0.399
Wix(6, 1) = 0.17
Wix(7, 1) = 0.544
Wix(8, 1) = 0.53
Wix(9, 1) = 0.32
Wix(10, 1) = 0.298
Wix(11, 1) = 0.38
Wix(12, 1) = 0.56
Wix(13, 1) = 0.428
Wix(14, 1) = 0.617
Wix(15, 1) = 0.489
Wix(16, 1) = 0.428
Wix(17, 1) = 0.42
Wix(18, 1) = 0.375
Wix(19, 1) = 0.372
Wix(20, 1) = 0.445
Wix(21, 1) = 0.64
Wix(22, 1) = 0.81
Wix(23, 1) = 0.517
Wix(24, 1) = 0.846
Wix(25, 1) = 0.3
Wix(26, 1) = 0.46
Wix(27, 1) = 0.578
Wix(28, 1) = 0.345
Wix(29, 1) = 0.259
Wix(30, 1) = 0.38
Wix(31, 1) = 0.556
For i = 0 To 31
SRR = 0
For j = 0 To 1
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2
Next j
Arrast(i) = SRR
Next i
For k = 0 To 1
Otvet(k) = Wix((WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1), k)
Next k
CLASTZZZ = Otvet
End Function
Если "герой ТУРБО-2" сыщется я далее тут напишу всё остальное чё надо делать (так как тут одних приведённых простейших кластеров недостаточно....эксель желательно знать в общих чертах (на крайняк я вычислитель могу переслать--надо тока данные вставлять и смотреть ответ..правда его--вычислитель ещё сделать надо будет чтоб меньше запариваться с выбором пар).
#59 OFFLINE
Добавлено 12 August 2014 - 09:45
Замечание—они влияют на результат—первая забьёт больше одного мяча. При этом есть парадокс состоящий в следующем—ответы Z1>1_OUT формально перестают быть значимыми для события первая забьёт больше 0 (хотя тут понятно по смыслу что если допустим ответ (допустим в виде неравенства «Z1>1_OUT»>0,63 порождает более 60% случаев Z1>1 то он породит более 90% случаев
Z1>0…. (дело тут в том что для большего 0 случая кластеризация может проходить иным образом и
не совпадать с кластерами для Z1>1) поэтому надо адекватно воспринять далее написанное.
Атрибуты (это как вариант какие можно попробовать для дополнительных критериев) и приблизительная значимость (в %) для результата—первая(дом.) забьёт более 1-го мяча.
Z1>1_OUT 42%
Г1 22%
FOR-G 13.4 %
EFV2 8%
EFV1 6,2%
V1 2,3%
DELTA*Din 2%
Г2 1,3%
П2 1,3%
L1 0,8%
Атрибуты (это как вариант какие можно попробовать для дополнительных критериев) и приблизительная значимость для результата—первая(дом.) забьёт более 0 мячей.
Г1 11%
FOR-G 23.1 %
FOR-V 37.4 %
оч1-окно 9,6%
EFV2 6,2%
EFV1 5,9%
Вместо
FOR-G 23.1 %
FOR-V 37.4 %
Можно использовать фору F1(0) порождённую из линии 1Х2
F1(0)=К1*(1-1/КХ) (попутно вот для форы Ф2 F2(0)=К2*(1-1/КХ) )
И добавить сигнал L2 (проигрыши гостевой в гостях(приведённые к размерности вероятности ---делением на общее число игр по которым считаем)
Кстати вот эти форы (вычисляемые экспериментально)
FOR-G
FOR-V
Могут использоваться при их «конфликте» (расхождении) для порождения множеств для ставок (с прибылью)..ну это в других там темах а не в конкретной с ТУРБОНАДДУВОМ… а вот эта фора F1(0)=К1*(1-1/КХ) (это не фора БК!!! а аналог и так можно проставиться по идее в линии 1Х2 если это конечно выгоднее) тоже может использоваться---например в теме для новичков обсуждалась возможность ставок на Х (кстати надо у Андре спросить насчёт профита по его системе…так как он там поменял немного критерии для Х-ставок)..там можно наложить ограничение на F1(0) и выделить из множества пар для Х-ставок подмножество для ставок например Ф2(0) или 2Х (или сместить плечё на Х)—там кефы будут меньше и нет таких напрягающих нервы лузов как в Х (ставок правда мало таких будет в подмножестве .)
Отредактировано Bambuk, 12 August 2014 - 09:52.
#60 OFFLINE
Добавлено 12 August 2014 - 12:38
----как это всё примерно может работать.
Вот самый простой пример с одним дополнительным критерием к сигналу кластера
OUT Z1>1
Берём
OUT>0,57
EFV2=0,005…0,6
Смотрим по ретро данным балансы
П1 Х П2
257,51 162,94 145,9
% с оборрота=0,055368852 (5,5%)
Выборка 244 примера (всего объём дан. 5156) то есть 4,7% матчей берётся примерно—это мало конечно, но для пояснительного примера покатит….
Чтоб тут не говорили противники статистических подходов, но ни один вменяемый видя данные 257,51—выручено по П1// 162,94—по Х// 145,9—по П2
ставить в Х и П2 не будет!!!!(лучше вообще не ставить).
СЧЁТ И ПОРЯДОК ИГРАВШИХ КЕФОФ ТАКОЙ.
Valencia Real Sociedad/ 1/ 2/ 0/ 0/ 3,99
Valencia Granada CF/ 1/ 0/ 1,25/ 0/ 0/
Real Sociedad Granada CF/ 2/ 2/ 0/ 4,34/ 0
Barcelona Betis/ 4/ 2/ 1,22/ 0/ 0/
Real Madrid Betis/ 3/ 1/ 1,28/ 0/ 0/
Atl. Madrid Granada CF/ 5/ 0/ 1,3/ 0/ 0/
Valencia Valladolid/ 2/ 1/ 1,38/ 0/ 0/
Atl. Madrid Real Sociedad 0/ 1/ 0/ 0/ 6,31/