Тема очень интригует.
+1
Сорри, нашел небольшой косячок - если у вашего брокера шаг лота 0,1, тогда нужно поменять строчку
volume=NormalizeDouble(TempVolume,2);
на
volume=NormalizeDouble(TempVolume,1);
Т.е. решение нечеткой системы должно находиться в диапазоне [0,1], а по отладке не выходит больше 0,4.
Пытливым умам задание...
Сорри, нашел небольшой косячок ...
Если вставить нормализацию всех TP и SL, т.е. избавиться от ошибок модификации ордера в логах, то результат прогонов будет ... другим.
Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(
Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(
Код посмотрел более внимательно, разобрался, почему не открывались позиции Buy.
double arGator[7] ={10,20,30,40,40,30,20,10};
double arWPR[7] ={-95,-90,-80,-75,-25,-20,-10,-5};
double arAC[7] ={5,4,3,2,2,3,4,5};
double arDeMarker[7] ={0.15,0.2,0.25,0.3,0.7,0.75,0.8,0.85};
double arRSI[7] ={25,30,35,40,60,65,70,75};
В этих массивах задаются границы нечетких описаний (в данном случае - значения индикаторов). Так вот, в случае симметричных показаний индикаторов (типа Gator), я установил ранги так же симметрично (т.е. если показания Gator находятся в районе 10, то вероятность открытия Buy и Sell одинаковая и ранг равен 0,5, т.е показана сама возможность открытия позиции.). В целом (при свертке) это снижает значение свертки, поэтому и открывались только Sell.
Можно убрать симметричные индикаторы из расчета следующим способом:
double Weight[7] ={0,0.267,0,0.4,0.333};
Т.е. веса первого и третьего индикатора равны 0, и в расчет они приниматься не будут. Пробуйте дальше, вставляйте свои функции, индикаторы.
Теперь открываются и бай и селл ордера, но на основе трех индикаторов. Сорри за первоначальный вариант, давно его делал, уже и не упомнишь все.
Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(
Вот ошибка-
StopLoss=NormalizeDouble(SL*Point,0);
Исправить на -
StopLoss=NormalizeDouble(SL*Point,Digits);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Fuzzy logic:
Author: Алексей