En busca del "grial" sagrado... - página 9

 
Hoper23 >> :
El problema es que el objetivo de la tarea está claro, pero la posibilidad de su implementación en MQL no parece clara, ya que todavía no estoy familiarizado con la función de matriz incorporada del optimizador de pruebas. Estoy tratando de releer el manual de MQL pero aún no he encontrado este bloque. Y el optimizador hecho a sí mismo por thecore no es tan poco fiable como poco comprensible. Las variables están escritas de forma bastante rara, no hay ninguna anotación y son fundamentalmente diferentes de la versión de trabajo mencionada en el enlace anterior. Si no es difícil, querido elcore, explique su punto de vista del optimizador, para que pueda ajustar los 19 parámetros y auto-reemplazar el resultado.

Me resulta extraño escuchar esto de un programador, pero intentaré desglosarlo (no deletrearlo):

1. Suponga que tiene una función con N parámetros de entrada

Función(n1,n2,...,n19);

2.Parámetros

n1 varía de n1Min a n1Max con el paso n1Step

....

n19 cambia de n19Min a n19Max con n19Step


Es necesario:

- Pasar por todos (para el método lineal) los parámetros entrantes o no todos (para el método de convergencia rápida) los parámetros entrantes.

Hay muchos métodos de convergencia rápida, uno de los cuales es el algoritmo genético.

- Cada vez que se introduce un nuevo lote de parámetros, se obtiene el resultado de la función en la salida.

- Debe escribir un bloque para analizar estos resultados y decidir si el resultado es

Bien.

Entiendo que tienes problemas con la unidad de análisis. Porque si no sabes cómo escribir una función o cómo

o cómo mirar a través de los parámetros de entrada, no es para mí, es para las clases de programación o la gente que le gusta deletrear

los fundamentos de la programación.

Qué hace la unidad de análisis:

1.Toma la barra BAR_Y más antigua que desea analizar, y desliza los datos actuales en el momento Y en su

función. Es decir, su función piensa que BAR_Y es TimeCurrent.

2.Ahora tome tantas barras en la profundidad de la historia como su Función(n1,n2,...,n19) tomaría si estuviera en la barra 0.

y obtener algún resultado.

Por ejemplo, su estrategia busca un extremo a lo largo de iMA3,iMA2,iMA1. Entonces tenemos iMA_Y+2,iMA_Y+1,iMA_Y

Si es un punto extremo, nos detenemos, si no, hacemos Y++;

DE ACUERDO. Encontramos el punto del extremo en la posición t, es decir, iMAt+2,iMAt+1,iMAt

Ahora tenemos que calcular si se activará el TP o el SL

Es decir, desde el punto t bajamos las barras t-1 y analizamos la distancia desde la Apertura[t] hasta el Máximo[t] y hasta el Mínimo[t],

y luego de Open[t] a High[t-1] y a Low[t-1], si no alcanzamos el TP o el SL vamos más allá - tomamos t-2 y así sucesivamente hasta que funcione

TP o SL o ambos.

Hemos encontrado la PRIMERA condición para la Función(n1,n2,...,n19).

Guardemos el resultado,

A continuación hacemos t-- y procedemos al análisis hasta la barra 0.

4. Desplazamos Y-- y repetimos el proceso.

Así encontramos todas las ocurrencias de nuestra función Función(n1,n2,...,n19) hasta el momento actual.

5.Analizar el momento actual y ver si hubo situaciones similares en el pasado y cómo terminaron.

6.Guarda el resultado.

7.Tome el siguiente conjunto de parámetros n1,,n19 para Function(n1,n2,...,n19) y compruébelo

8.Repetir hasta que se agoten los parámetros.

9. elegimos el mejor conjunto de parámetros o varios conjuntos, y según sus recomendaciones, establecemos COMPRA, VENTA o

no hacer nada.

Eso es todo.

Espero que sea difícil, porque realmente lo es.


 
Hoper23 >> :
El problema es que el propósito de la tarea está claro, pero la posibilidad de su implementación en el lenguaje MQL no parece clara, ya que todavía no estoy familiarizado con la función del array incorporado del probador-optimizador. Actualmente estoy intentando releer el manual de MQL pero aún no he encontrado este bloque. Y el optimizador hecho a sí mismo por thecore no es tan poco fiable como poco comprensible. Las variables están escritas de forma bastante rara, no hay ninguna anotación y son fundamentalmente diferentes de la versión de trabajo mencionada en el enlace anterior. Si no es difícil, querido thecore, explique su punto de vista del optimizador, para que yo pudiera meter los 19 parámetros y autocompletar el resultado.

Por cierto, no empieces con el bloque de enumeración - es mucho más fácil de escribir que el parser.

Y si todo lo que he dicho te parece demasiado complicado, busca el auto-optimizador de xeon.

Utiliza el optimizador de MetaTrader. No busques la función de auto-optimización incorporada. No hay ninguno.

 
Figar0 >> :

Aquí está el indicador de klot con el optimizador GA incrustado en el indicador.

Creo que Hoper23 no llegará al análisis genético independientemente de que este enlace esté roto o no.

Más aún, no está roto.

 

thecore==>por tu razonamiento, así como el mío, obtienes for(S = Sstart; S <= Send; S += Sstep), bien, en términos generales. Esto es lo que tengo

void Optimization()
{
 int StartBar = iBarShift(Symbol(), 0, TimeCurrent()-60*( EndDate+ OptimDuration));
 int EndBar = iBarShift(Symbol(), 0, TimeCurrent()-60* EndDate);
 int Count = 0;
 double CurRF = -999999;
 ArrayInitialize( EqualProfit, 0);
 ArrayInitialize( TransCount, 0);
 ArrayInitialize( MaxDrowDown, 0);
 for( S = Sstart; S <= Send; S += Sstep)
 for( O = Ostart; O <= Oend; O += Ostep)
 for( I = Istart; I <= Iend; I += Istep)
 for( G = Gstart; G <= Gend; G += Gstep)
 for( M = Mstart; M <= Mend; M += Mstep)
 for( CC = CCstart; CC <= CCend; CC += CCstep)
 for( CCI = CCIstart; CCI <= CCIend; CCI += CCIstep)
 for( F_EMA = F_EMAstart; F_EMA <= F_EMAend; F_EMA += F_EMAstep)
 for( S_EMA = S_EMAstart; S_EMA <= S_EMAend; S_EMA += S_EMAstep)
 for( SMA = SMAstart; SMA <= SMAend; SMA += SMAstep)
 for( stK = stKstart; stK <= stKend; stK += stKstep)
 for( stP = stPstart; stP <= stPend; stP += stPstep)
 for( stD = stDstart; stD <= stDend; stD += stDstep)
 for( W = Wstart; W <= Wend; W += Wstep)
 for( H = Hstart; H <= Hend; H += Hstep)
 for( C = Cstart; C <= Cend; C += Cstep)
 for( Skill = Skillstart; Skill <= Skillend; Skill += Skillstep)
 for( SkillMAX = SkillMAXstart; SkillMAX <= SkillMAXend; SkillMAX += SkillMAXstep)
 for( shirina = shirinastart; shirina <= shirinaend; shirina += shirinastep)
   {
    int CurTrans =0;
    double CurOpenPrice = 0;
    int EqualMax = 0;
    int EqualMin = 0;
     for(int i = StartBar; i >= EndBar; i--)
      {
       EqualMin = MathMin( EqualProfit[ Count], EqualMin);
       if( EqualProfit[ Count] > EqualMax)
        {
         MaxDrowDown[ Count] = MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);
         EqualMax = EqualProfit[ Count];
         EqualMin = EqualMax;
        }
        MaxDrowDown[ Count] = MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);
    if( EqualProfit[ Count] != 0)
     if( CurRF < MaxDrowDown[ Count]/ EqualProfit[ Count])
      {
       CurRF = MaxDrowDown[ Count]/ EqualProfit[ Count];
       int Num = Count;
       int BestS = S;
       int BestO = O;
       int BestI = I;
       int BestG = G;
       int BestM = M;
       int BestCC = CC;
       int BestCCI = CCI;
       int BestF_EMA = F_EMA;
       int BestS_EMA = S_EMA;
       int BestSMA = SMA;
       int BeststK = stK;
       int BeststP = stP;
       int BeststD = stD;
       int BestW = W;
       int BestH = H;
       int BestC = C;
       int BestSkill = Skill;
       int BestSkillMAX = SkillMAX;
       int Bestshirina = shirina;

        }
     
    Count++;
   } // Цикл переменных 
 
   
 Alert("Оптимизация завершена. Прибыль max ", EqualProfit[ Num]," пунктов. Сделок ", TransCount[ Num], ". Просадка ", MaxDrowDown[ Num]);
 Alert("Параметры: S = ", BestS, ", O = ", BestO, ", I = ", BestI, ", G = ", BestG, ", M = ", BestM, ", CC = ", BestCC, ", CCI = ", BestCCI,
  ", F_EMA = ", BestF_EMA, ", S_EMA = ", BestS_EMA, ", SMA = ", BestSMA, ", stK = ", BeststK, ", stP = ", BeststP, ", stD = ", BeststD,
   ", W = ", BestW, ", H = ", BestH, ", C = ", BestC, ", Skill = ", BestSkill, ", SkillMAX = ", BestSkillMAX, ", shirina = ", Bestshirina);
 LastOptim = TimeCurrent();
 GlobalVariableSet("LastOptimization", LastOptim);
 if( CurRF < 0)
  if(MessageBox("Фактор восстановления меньше нуля./nПринимать данные оптимизированные параметры?", "Вопрос", MB_YESNO) == IDNO) 
    return;    
        BestS = S;
        BestO = O;
        BestI = I;
        BestG = G;
        BestM = M;
        BestCC = CC;
        BestCCI = CCI;
        BestF_EMA = F_EMA;
        BestS_EMA = S_EMA;
        BestSMA = SMA;
        BeststK = stK;
        BeststP = stP;
        BeststD = stD;
        BestW = W;
        BestH = H;
        BestC = C;
        BestSkill = Skill;
        BestSkillMAX = SkillMAX;
        Bestshirina = shirina;

 GlobalVariableSet("AutoS", S);
 GlobalVariableSet("AutoO", O);
 GlobalVariableSet("AutoI", I);
 GlobalVariableSet("AutoG", G);
 GlobalVariableSet("AutoM", M);
 GlobalVariableSet("AutoCC", CC);
 GlobalVariableSet("AutoCCI", CCI);
 GlobalVariableSet("AutoF_EMA", F_EMA);
 GlobalVariableSet("AutoS_EMA", S_EMA);
 GlobalVariableSet("AutoSMA", SMA);
 GlobalVariableSet("AutostK", stK);
 GlobalVariableSet("AutostP", stP);
 GlobalVariableSet("AutostD", stD);
 GlobalVariableSet("AutoW", W);
 GlobalVariableSet("AutoH", H);
 GlobalVariableSet("AutoC", C);
 GlobalVariableSet("AutoSkill", Skill);
 GlobalVariableSet("AutoSkillMAX", SkillMAX);
 GlobalVariableSet("Autoshirina", shirina);
Más allá, no sé cómo arreglar el resultado positivo y sustituir la variable automáticamente.
 
Hoper23 писал(а) >>

yyyyy ..... "El enlace que te llevó a esta página está 'muerto' o borrado" ¡¡¡Buena referencia!!! Algo parecido a la dirección de irse a la mierda. (sin ánimo de ofender, sólo por diversión).

Aquí hay un agradecimiento), a mí para el enlace, klot'y para la solución realmente listo en un plato), ahí tienes tanto probador y optimizador, sólo ajustar un poco para adaptarse a sus necesidades ... Y todo se abre.

 

¡¡¡Respuesta no abierta!!!


 
Hoper23 >> :

thecore==>por tu razonamiento, así como el mío, obtienes for(S = Sstart; S <= Send; S += Sstep), bien, en términos generales. Esto es lo que tengo

1.No intentes resolver el problema de frente.

Por qué es necesario guardar TODAS las variantes de todas las soluciones posibles.

No estás resolviendo un problema matemático. Estás buscando en la historia una situación similar a la que tienes

hoy y ahora para decidir qué hacer.

Por lo tanto, primero hay que describir la situación actual y buscarla específicamente.

Esto reducirá el número de pases, variables y resultados en un MONTÓN.

A continuación, para - no sé cómo fijar un resultado positivo y ponerlo en una variable automáticamente.

En la primera etapa, lo guardé en un archivo. Recibido en el historial de unas 10.000-50.000 opciones ganadoras.

Luego se analizan en Excel.

2.No busque una coincidencia exacta. No es que estemos describiendo una onda sinusoidal.

3.Escribe primero un bloque de recogida de datos para UNA variable, depúralo y luego añade otras 18 o las que tengas.

 

Bien. La idea es lógica. Entonces, ¿cómo se resuelve la fórmula para optimizar sobre combinaciones con un solo parámetro? La cuestión es que en este ejemplo están interrelacionados. Todavía no conozco otro ejemplo debido a mi limitado conocimiento del lenguaje MQL.

Combination = MathFloor((L1End-L1Start)/L1Step)*MathFloor((L2End-L2Start)/L2Step);
 

Esta tontería está pensada para optimizar los

extern int setWeek   = 0;          //День недели старта оптимизации
extern int setHour   = 02;         //Час старта оптимизации
extern int setMinute = 25;         //Минута старта оптимизации
extern int ProgNumber= 2;          //номер программы оптимизации
extern bool OptimStart=false;
extern bool report=false;
#include <MacroAutoOptimization.mqh> 


int init() {


 if(IsOptimization()){
    string Str;
    int Cmd, Step, HandleStep;    
    HandleStep=FileOpen("ExpertMessage.csv", FILE_CSV| FILE_READ| FILE_WRITE,0x7F);
    if( HandleStep>0){
       Str  = FileReadString( HandleStep);
       Cmd  = StrToInteger(StringSubstr( Str,0,StringFind( Str,";",0)));
       Step = StrToInteger(StringSubstr( Str,StringFind( Str,";",0)+1,StringLen( Str)-StringFind( Str,";",0)-1))+1;
       FileSeek( HandleStep,0, SEEK_SET);
       FileWrite( HandleStep, Cmd+";"+ Step);
       FileClose( HandleStep);
  }} 

  
   return(0);
  }


int deinit()
  {
   Comment("Привет!");
   return(0);
  }

int start()
{

 if(IsOptimization()==false && IsTesting()==false){
        double Itog[][17];
        int TecWeek=TimeDayOfWeek(TimeLocal());
        int TecHour=TimeHour(TimeLocal());
        int TecMinute=TimeMinute(TimeLocal());
        if(! OptimStart){  
           if( TecWeek== setWeek){  
              if( TecHour== setHour){ 
                 if( TecMinute>= setMinute && TecMinute< setMinute+4){ 
                    if( AutoStart( ProgNumber, Itog)<0){Print("Оптимизация завершилась неудачей!");}
                    deinitialization();
                    OptimStart=true;
                    report=true;
        }}}}
        if( TecHour!= setHour){ OptimStart=false;}              //Обнуление флага старта оптимизации
        if(ArrayRange( Itog,0)>0){
//         Переменные для оптимизации
           stK     = Itog[0][7];
           stP   = Itog[0][8];
           stD  = Itog[0][9];
           W = Itog[0][10];
           H  = Itog[0][11];
           C  = Itog[0][12];
           CCI  = Itog[0][13];
           F_EMA  = Itog[0][14];
           S_EMA  = Itog[0][15];
           SMA  = Itog[0][16];
           shirina  = Itog[0][17];
           S  = Itog[0][18];
           O  = Itog[0][19];
           I  = Itog[0][20];
           M  = Itog[0][21];
           G  = Itog[0][22];
           CC  = Itog[0][23];
           if( report){
              Print("Новые параметры ", stK," | ", stP," | ", stD," | ", W," | ", H," | ", C," | ", CCI," | ", F_EMA," | ", S_EMA," | ", SMA," | ", shirina," | ", S," | ", O," | ", I," | ", M," | ", G," | ", CC);
              report=false;
     }}}   

Viene con una biblia.

бла-бла-бла

Y hay un biblah que lo acompaña.

бла-бла-бла

Y NO FUNCIONA NADA... o más bien se lía sola, estresa la CPU, pero no hay cambios en las variables y lo hace todo rápido - un par de segundos y ya está. No lo entiendo.
 
Hoper23 >> :

Esta tontería está pensada para optimizar los

Viene con una biblia.

Y luego está la biblia.

Y no funciona... o más bien se hace un lío, estresa la CPU, pero no cambia las variables y lo hace todo rápido: un par de segundos y ya está. No lo entiendo.



Has empezado a trabajar con el auto-optimizador de xeon

TestCommander (autooptimización) Herramienta para comerciantes

Así que pregúntale.

Por cierto, este producto ya está pagado, si no recuerdo mal.

Hay una ayuda en él, todo está claramente explicado allí.