Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1862

 

voila

запарились бы в дебагере расставлять :D

это еще не самое большое дерево, которое может получиться

double decision_tree(double &features[]) { 
    if ( features[11] <= 0.000385 )  {
        if ( features[9] <= -0.000275 )  {
            if ( features[9] <= -0.000465 )  {
                if ( features[5] <= 0.00034 )  {
                    if ( features[10] <= -0.00034 )  {
                        return 2; }
                    if ( features[10] > -0.00034 )  {
                        if ( features[11] <= -0.00031 )  {
                            return 1; }
                        if ( features[11] > -0.00031 )  {
                            return 2; } } }
                if ( features[5] > 0.00034 )  {
                    return 1; } }
            if ( features[9] > -0.000465 )  {
                if ( features[4] <= -0.000465 )  {
                    return 1; }
                if ( features[4] > -0.000465 )  {
                    if ( features[9] <= -0.000425 )  {
                        if ( features[5] <= -0.00015 )  {
                            return 1; }
                        if ( features[5] > -0.00015 )  {
                            return 2; } }
                    if ( features[9] > -0.000425 )  {
                        if ( features[8] <= -0.000165 )  {
                            if ( features[4] <= -0.000395 )  {
                                if ( features[5] <= -0.00033 )  {
                                    return 1; }
                                if ( features[5] > -0.00033 )  {
                                    return 2; } }
                            if ( features[4] > -0.000395 )  {
                                return 2; } }
                        if ( features[8] > -0.000165 )  {
                            if ( features[8] <= -4.5e-05 )  {
                                return 1; }
                            if ( features[8] > -4.5e-05 )  {
                                return 2; } } } } } }
        if ( features[9] > -0.000275 )  {
            if ( features[3] <= 0.000605 )  {
                if ( features[1] <= -0.00036 )  {
                    return 2; }
                if ( features[1] > -0.00036 )  {
                    if ( features[9] <= -0.000115 )  {
                        if ( features[2] <= 0.000165 )  {
                            if ( features[4] <= -0.000125 )  {
                                if ( features[7] <= -0.00014 )  {
                                    if ( features[6] <= -0.000265 )  {
                                        if ( features[8] <= -0.0003 )  {
                                            return 1; }
                                        if ( features[8] > -0.0003 )  {
                                            return 2; } }
                                    if ( features[6] > -0.000265 )  {
                                        return 1; } }
                                if ( features[7] > -0.00014 )  {
                                    if ( features[10] <= -0.00015 )  {
                                        return 1; }
                                    if ( features[10] > -0.00015 )  {
                                        return 2; } } }
                            if ( features[4] > -0.000125 )  {
                                return 1; } }
                        if ( features[2] > 0.000165 )  {
                            return 2; } }
                    if ( features[9] > -0.000115 )  {
                        if ( features[1] <= -0.000175 )  {
                            if ( features[8] <= 0.000145 )  {
                                return 1; }
                            if ( features[8] > 0.000145 )  {
                                if ( features[2] <= -9.5e-05 )  {
                                    return 0; }
                                if ( features[2] > -9.5e-05 )  {
                                    return 2; } } }
                        if ( features[1] > -0.000175 )  {
                            if ( features[11] <= 0.000195 )  {
                                if ( features[11] <= -5.5e-05 )  {
                                    if ( features[5] <= 9.5e-05 )  {
                                        return 1; }
                                    if ( features[5] > 9.5e-05 )  {
                                        if ( features[2] <= -2.5e-05 )  {
                                            return 0; }
                                        if ( features[2] > -2.5e-05 )  {
                                            return 1; } } }
                                if ( features[11] > -5.5e-05 )  {
                                    if ( features[8] <= -8.5e-05 )  {
                                        if ( features[2] <= 2.5e-05 )  {
                                            return 1; }
                                        if ( features[2] > 2.5e-05 )  {
                                            return 2; } }
                                    if ( features[8] > -8.5e-05 )  {
                                        return 1; } } }
                            if ( features[11] > 0.000195 )  {
                                if ( features[4] <= -0.00024 )  {
                                    return 0; }
                                if ( features[4] > -0.00024 )  {
                                    if ( features[2] <= 0.00021 )  {
                                        if ( features[1] <= 1.5e-05 )  {
                                            return 1; }
                                        if ( features[1] > 1.5e-05 )  {
                                            return 1; } }
                                    if ( features[2] > 0.00021 )  {
                                        if ( features[5] <= 0.00024 )  {
                                            return 0; }
                                        if ( features[5] > 0.00024 )  {
                                            return 1; } } } } } } } }
            if ( features[3] > 0.000605 )  {
                if ( features[11] <= 0.000195 )  {
                    return 2; }
                if ( features[11] > 0.000195 )  {
                    return 0; } } } }
    if ( features[11] > 0.000385 )  {
        if ( features[11] <= 0.00049 )  {
            if ( features[3] <= 0.000155 )  {
                if ( features[8] <= 0.00036 )  {
                    return 0; }
                if ( features[8] > 0.00036 )  {
                    return 1; } }
            if ( features[3] > 0.000155 )  {
                if ( features[11] <= 0.00041 )  {
                    if ( features[5] <= 0.00047 )  {
                        return 0; }
                    if ( features[5] > 0.00047 )  {
                        return 1; } }
                if ( features[11] > 0.00041 )  {
                    return 1; } } }
        if ( features[11] > 0.00049 )  {
            if ( features[4] <= -0.00022 )  {
                return 1; }
            if ( features[4] > -0.00022 )  {
                if ( features[2] <= 0.000345 )  {
                    return 0; }
                if ( features[2] > 0.000345 )  {
                    if ( features[7] <= 0.00061 )  {
                        return 1; }
                    if ( features[7] > 0.00061 )  {
                        return 0; } } } } }


 return 3; }
 

Проверка, что дерево одинаково работает.

На mql:

2020.07.11 23:17:15.120 code check (EURUSD,M5)  Result 2.0
2020.07.11 23:17:15.121 code check (EURUSD,M5)   0.00000  0.00030  0.00031  0.00019  0.00005 -0.00009 -0.00014 -0.00014 -0.00008 -0.00025 -0.00014 -0.00038

В питоне:

lll = [0.00000,  0.00030,  0.00031,  0.00019,  0.00005, -0.00009, -0.00014, -0.00014, -0.00008, -0.00025, -0.00014, -0.00038]
lll = np.array(lll).reshape(1,-1)
clf.predict(lll)

>>> clf.predict(lll)
array([2])
 
Renat Akhtyamov:

кажись допер я до Вашего того, что в офф-лайне никак....

портфель штукенция есчо та....

в офф-лайне живет норм, протестил

аж шуба заворачивается

тупо ошибка была

Roman, ищи у себя ошибку, должно прекрасно работать на истории

;)

парный, 7 лет назад

нашел, нашел недоделку в стратегии!!!

предварительное тестирование до 10х в день

чо счас будет........

 
@Maxim Dmitrievsky парсер  еще нужен?
Файлы:
parser.zip  2 kb
 
Renat Akhtyamov:

в офф-лайне живет норм, протестил

аж шуба заворачивается

тупо ошибка была

Roman, ищи у себя ошибку, должно прекрасно работать на истории

;)

парный, 7 лет назад

нашел, нашел недоделку в стратегии!!!

предварительное тестирование до 10х в день

чо счас будет........

Так я не чего и не говорил, что на истории не работает :))
Я говорил, что не доделал для истории, и пока отложил разработку.
А так, подготовка исторических данных, это один из важных этапов.
И все модели строятся, тестируется, с учётом истории. 
Это же статистика ))
Рад за тебя, что всё получается.

 
Nanix:
@Maxim Dmitrievsky парсер  еще нужен?

спасибо, скобок все равно не хватает, например, здесь

if(L_55_1  >  0.00047) {
    if(L_30_1  <= 0.00044)
        { return 2;}
    if(L_30_1  >  0.00044) {
        if(L_25_1  <= 0.00047) {
            if(L_5_1  <= 0.00012)
                { return 0;}
            if(L_5_1  >  0.00012)
                { return 2;} }
        if(L_25_1  >  0.00047) return 2; } }

красные - как должно быть

мой все проставляет. Иначе, условия будут криво работать и дерево не то посчитает

 
Maxim Dmitrievsky:

спасибо, скобок все равно не хватает, например, здесь

красные - как должно быть

мой все проставляет. Иначе, условия будут криво работать и дерево не то посчитает

По твоим кодам я примерно начал понимать как работает деревья. Слабенький алгоритм по сравнению с полиномом, по мне так....
 
Mihail Marchukajtes:
По твоим кодам я примерно начал понимать как работает деревья. Слабенький алгоритм по сравнению с полиномом, по мне так....

не болтай ерундой

 
Maxim Dmitrievsky:

не болтай ерундой

Отнюдь не ерунда емкость кода дерева и полинома существенно отличаются при равных возможностях работы. А как известно чем проще код тем он надёжней. По моему всё логично, но это моё мнение.... исключительно..
 
Maxim Dmitrievsky:

не болтай ерундой

Макс , не спорь с экспертом, не красиво как то ;)

Причина обращения: