[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 628

 
IgorM:

¿la sentencia for sin un parámetro? - la segunda es que hay variables globales para el EA - no para el terminal, están descritas al principio del código antes de todas las funciones, incluyendo la función start(), como has escrito - en cada tick que se llama a la función start(), flagchange = false; y entonces se intenta comparar esta bandera con el estado anterior, pero su estado siempre será falso

Si está empezando a probar su mano - tome cualquier Asesor Experto listo de Kodobase y cambie las condiciones para entrar en el mercado a las suyas - será más rápido.


Vinin
¿Cuál es el objetivo del bucle?

¿Quiere decir que la función start() se ejecuta en cada tic? Entonces el bucle es realmente innecesario.

 

MarkTrade:

Entonces, ¿la función start() se ejecuta en cada tic? Entonces un bucle es realmente innecesario.

https://book.mql4.com/ru/programm/special
 

Es interesante cómo bailan las chicas... De pie al unísono y cantando...

Probé y probé, añadí/cambié funciones/condiciones/datos en base a los resultados, obtuve más o menos buenos resultados en términos de rentabilidad y drawdown... sin optimización. Recargó toda la historia y empezó a caer en picado, no - Ciruela, ni siquiera - Gran Ciruela...

Si antes recargaba el historial de cotizaciones(tenía un historial de EURUSD precargado antes de hacer la prueba, lo recargaba por si acaso - tenía errores de calidad de modelado en 2010 por alguna razón...)... Antes de recargar el historial el Asesor Experto soportó con éxito, bueno casi con éxito diferentes pruebas de ida y vuelta, operó con éxito en el historial de tres años, pero después de recargar las cotizaciones comenzó a tener drawdowns dos o tres veces al mes y no funcionó durante más de dos-tres meses después de la prueba comenzó ... No he cambiado ninguna condición, sólo el historial...

Resulta que en el servidor se está reescribiendo la historia? ¿Como en tiempos inmemoriales en la URSS?

¿Qué sentido tiene todo esto, entonces?

 
artmedia70:

Las chicas bailan de forma interesante... se levantaron juntos y cantaron...

Probé y probé, añadí/creé funciones/condiciones/datos, obtuve más o menos buenos resultados en términos de rentabilidad y drawdown... sin optimización. He recargado todo el historial y ha empezado a bajar, no, ha sido una GRAN PIFIA, ni siquiera una GRAN PIFIA...

Si antes de recargar el historial de cotizaciones(antes de hacer la prueba tenía todo el historial del EURUSD precargado, para estar seguro lo recargaba, pero por alguna razón tenía errores en la calidad del modelado desde 2010)... Antes de recargar el historial el Asesor Experto soportó con éxito, bueno casi con éxito diferentes pruebas de ida y vuelta, operó con éxito en el historial de tres años, pero después de recargar las cotizaciones comenzó a tener drawdowns dos o tres veces al mes y no funcionó durante más de dos-tres meses después de la prueba comenzó ... No he cambiado ninguna condición, sólo el historial...

Resulta que en el servidor se reescribe la historia? ¿Como en tiempos inmemoriales en la URSS?

¿Y cuál es el objetivo de todo esto?

Si su MT todavía no está desconectada del servidor, entonces es el momento de hacerlo (y no la conecte innecesariamente de nuevo) - cada vez que inicie el probador o la optimización, la MT recibe una extensión (etc.) del servidor. Por lo tanto, cuando el spread es de 1 pip, todo será super-maravilloso, pero si en otro momento aumenta a 4-5 - el Asesor Experto probablemente comenzará a perder dinero. Naturalmente, es mejor optimizar en las peores condiciones, porque es más probable que ocurran en el comercio real.

 

Aquí hay un poco de reelaboración.

глобальные переменные (в самом начале, под #property link )
bool flagchange = false;
bool PrevFlag = false;
bool flag = false; 

int start()
  {
   //---вход в позицию
   //int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
      flag = GetEma();
        if (PrevFlag != flag) // проверим, сигнал ема изменился?
         {flagchange = true;      // изменился!
         PrevFlag = flag;}
        else flagchange = false;
        if (flagchange == True)
         {       
           int Total=OrdersTotal(); // есть открытые позиции?
           if(Total>0)
            {
              for(i=Total-1; i>=0; i--) 
              {
                if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) 
                  {
                    if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
                     {
                       if(OrderType()==OP_BUY) 
                         bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
                       else
                         Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
                     if(Result!=true) 
                        {          
                          Print("LastError = ",GetLastError()); 
                         }              
                      }
                   }
                else 
                   if (flag ==true) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
                   else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
              }
           }                                            
        }
     
   return(0);
  }
      //////////////////////////////////////////////////////
  bool GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (True);
      else return (False);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        }

Todavía no se negocia :(

 
chief2000:

Si su MT aún no está desconectada del servidor es hora de hacerlo (y no conectarla innecesariamente) - cada vez que ejecuta un probador u optimiza la MT recibe un spread (etc.) del servidor. Por lo tanto, cuando el spread es de 1 pip, todo será super-maravilloso, pero si en otro momento aumenta a 4-5 - el Asesor Experto probablemente comenzará a perder dinero. Naturalmente, es mejor optimizar en las peores condiciones, porque es más probable que ocurran en el comercio real.

Todo está claro y se entiende desde hace tiempo... Pero es sábado... ¿Puede cambiar el diferencial hoy? No... Probablemente ahora esté en su punto más bajo, es decir, en las mejores condiciones... Pero no... Incluso con cualquier spread, el EA operaba bien... antes del reinicio del historial.
 
artmedia70:
Todo está claro y se entiende desde hace tiempo... Pero es sábado... ¿Puede cambiar el diferencial hoy? No... Probablemente ahora esté en su punto más bajo, es decir, en las mejores condiciones... No... Incluso con cualquier spread, el EA operaba bien... antes del reinicio del historial.
Si se observa el curso de las operaciones en el gráfico, ¿qué ha cambiado?
 
Techno:
Bien, si miras el progreso de las operaciones en el gráfico, ¿qué ha cambiado?
La reducción de la renta variable ha aumentado muchas veces... Resulta que hay más condiciones para abrir posiciones. En realidad abre más posiciones...
 
MarkTrade:

Aquí hay un poco de reelaboración.

Todavía no hay comercio :(

Debe haber un error en alguna parte en las condiciones / lógica
porque MetaEditor no tiene un depurador, así que hago esto:

añadir al final del código

Comentario( "flag= ", flag, " PrevFlag=", PrevFlag, ......);

return(0);

}

y en el modo de visualización en el probador a baja velocidad ver lo que cambia y lo que no

 
artmedia70:
La reducción de la renta variable ha aumentado muchas veces... Resulta que las condiciones para abrir posiciones han aumentado. En realidad abre más posiciones...
No me refiero a la tabla de pruebas, sino a la tabla de cotizaciones, a grandes rasgos, ¿cuáles son los cambios en aperturas, cierres?