Discusión sobre el artículo "Lógica difusa en las estrategias comerciales" - página 6

 
Maxim Dmitrievsky:

Hola, puedes leer aquí https://www.mql5.com/es/articles/3856

también nuevo artículo pronto tal vez, tal vez no ..

hola maxim

gracias por tus fantasticas muestras

cuando depuro este ea


Fuzzy_logic_for_fuzzy_algotraders_Anywhere_v02.mq5

u otras muestras de lógica difusa

mql error de retorno

incorrecta fundición de punteros en RuleParser.mqh línea 712

por favor ayude a solucionar este error

mi versión del compilador es

Versión 5 build 2340 21 Feb 2020

muchas gracias

 
Esto es asombroso... Lo implementé con algunas pequeñas adiciones (como complementar las reglas según lo sugerido por el autor) en un triple canal' estrategia de reversión a la media y mejoró su rendimiento a la luna... gracias por compartir.
 
Hola, gracias por tus artículos, me has enseñado mucho, ¡gracias Maxim!
 

Tengo el siguiente código que comenzó con su ejemplo de un sistema difuso

double CalculateMamdani()
{
// buffers y arrays normalizados
 CopyBuffer(hnd1,0,0,1,arr1);
 NormalizeArrays(arr1);
   
 CopyBuffer(hnd2,0,0,1,arr2);
 NormalizeArrays(arr2);
    
 CopyBuffer(hnd3,0,0,1,arr3);
 NormalizeArrays(arr3);

 CopyBuffer(hnd4,0,0,1,arr4);
 NormalizeArrays(arr4);
   
 CopyBuffer(hnd5,0,0,1,arr5);
 NormalizeArrays(arr5);
    
 CopyBuffer(hnd6,0,0,1,arr6);
 NormalizeArrays(arr6);

 CopyBuffer(hnd7,0,0,1,arr7);
 NormalizeArrays(arr7);
   
 CopyBuffer(hnd8,0,0,1,arr8);
 NormalizeArrays(arr8);
    
 CopyBuffer(hnd9,0,0,1,arr9);
 NormalizeArrays(arr9);

// entradas - primer sistema difuso [RSI] 
 firstTerm.SetAll(firstInput,arr1[0]);
 secondTerm.SetAll(secondInput,arr2[0]);
 thirdTerm.SetAll(thirdInput,arr2[0]);
 // entradas - segundo sistema difuso [CCI]]
 fourthTerm.SetAll(fourthInput,arr4[0]);
 fifthTerm.SetAll(fifthInput,arr5[0]);
 sixthTerm.SetAll(sixthInput,arr6[0]);
 // entradas - tercer sistema difuso [Estocástico]]
 seventhTerm.SetAll(seventhInput,arr7[0]);
 eighthTerm.SetAll(eighthInput,arr8[0]);
 ninthTerm.SetAll(ninthInput,arr9[0]);
 
 Inputs.Clear();
 // añadir términos - primer sistema difuso [RSI]]
 Inputs.Add(firstTerm);
 Inputs.Add(secondTerm);
 Inputs.Add(thirdTerm);
// añadir términos - segundo sistema difuso [CCI} 
 Inputs.Add(fourthTerm);
 Inputs.Add(fifthTerm);
 Inputs.Add(sixthTerm);
 // añadir términos - tercer sistema difuso [Stockastic]
 Inputs.Add(seventhTerm);
 Inputs.Add(eighthTerm);
 Inputs.Add(ninthTerm);
 
 CList *FuzzResult=OurFuzzy.Calculate(Inputs);

 Output=FuzzResult.GetNodeAtIndex(0); ¡¡¡¡¡¡¡¡// necesita actualizarse para tener en cuenta tres salidas y no una !!!!!!!!
 
double res = Output.Value();

// añadir código para el método de agregación en tres salidas utilizando pesos

delete FuzzResult;

 return(res);
}

Estoy recodificando para que pueda manejar tres sistemas difusos separados

Claramente necesito considerar las salidas de los tres sistemas difusos

Me gustaría agregar las tres salidas usando pesos

Sugerencias para completar el código bienvenidas

Bob M

Dunedin

Nueva Zelanda