Советники: Fuzzy logic

 

Fuzzy logic:

Эксперт, принимающий решения на основе нечеткой логики (т.н. Fuzzy logic). При разработке классификатора и свертки для рангов были использованы материалы А.Недосекина (http://sedok.narod.ru/scoring_USA.html).

Author: Алексей

 

Тема очень интригует.

+1

 
Спасибо Bass. Наконец то начали использовать нечеткую логику(нейросети не считаются :))
 
Тема интересная. Где можно почитать о принципах построения нечеткого классификатора?
 

Сорри, нашел небольшой косячок - если у вашего брокера шаг лота 0,1, тогда нужно поменять строчку

volume=NormalizeDouble(TempVolume,2);
на
volume=NormalizeDouble(TempVolume,1);
И еще. Почему-то в ходе вычислений все время открываются позиции Sell, сейчас разбираться не хочу (времени нет), писал для себя и давно.
Т.е. решение нечеткой системы должно находиться в диапазоне [0,1], а по отладке не выходит больше 0,4.
Пытливым умам задание...
 
Bass:

Сорри, нашел небольшой косячок ...


Если вставить нормализацию всех TP  и SL, т.е. избавиться от ошибок модификации ордера в логах, то результат прогонов будет ... другим.
 

Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(

 
Elik1972:

Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(

Скорее всего, из-за того, что не выставляются стопы.
 

Код посмотрел более внимательно, разобрался, почему не открывались позиции 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, и в расчет они приниматься не будут. Пробуйте дальше, вставляйте свои функции, индикаторы.

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

 
Bass:
Elik1972:

Начинает у меня он хорошо, но в конце резко все сливает. Не подскажете почему? Тестил без оптимизации, на оптимизации почему-то все по нулям :(

Скорее всего, из-за того, что не выставляются стопы.
Вот и не понятно, почему ордер, последний открытый ордер он не модифицирует и не ставит ему стоп?
 

Вот ошибка-

StopLoss=NormalizeDouble(SL*Point,0);  

Исправить на -

StopLoss=NormalizeDouble(SL*Point,Digits);