[¡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 627

 
chief2000:

Se ha sustituido "return(0)" por "return", pero esto no ha resuelto el "problema" - después de la optimización se siguen viendo los mismos resultados de 0-cero. ¿Existe alguna solución para no emitir ceros durante la optimización?

Gracias.


No sé si lo haces o no, te lo diré por si acaso, marca la casilla "Ignorar resultados inútiles".

Los resultados negativos (por balance) serán eliminados, no estoy seguro de los ceros, pero pruébalo.

 
Me pregunto cómo obtener un número "aleatorio" dentro de, digamos, 15 +/- 7 en cada nuevo tick, para que se genere aleatoriamente dentro de los límites dados ...
 

Así:

int random(){
   MathSrand(TimeLocal());
   while(true){
      int x = MathRand();
      if(x >= 8 && x <= 22)return(x);
   }
}

:)

 
ToLik_SRGV:

Así:

:)

¡¡¡Gracias!!! ;)
 
ToLik_SRGV:

No sé si lo sabes o no, pero por si acaso, marca la casilla "Saltar resultados inútiles".

Los resultados negativos (por saldo) se filtrarán, no estoy seguro de los nulos, pero deberías probarlo.

La cuestión es que quiero ver los resultados nulos: en las primeras etapas de la optimización a menudo tengo que seleccionar los mejores entre los resultados nulos (y en las etapas posteriores es útil revisarlos y comparar). Los ceros estorban porque estos mismos resultados no tienen ningún sentido y son demasiados: el tamaño de los archivos almacenados aumenta y dificulta visualmente la visualización de los resultados. ¡Gracias de todos modos!

 
granit77:

Si te refieres a las variables externas MA_Fast_Period y MA_Slow_Period, hay una solución. Si las variables se calculan en el Asesor Experto, entonces no hay nada que hacer.

Es tarde, mi cabeza ya no funciona... ¡pero parece una muy buena idea! Gracias.

 
artmedia70:
Me pregunto cómo obtener un número "aleatorio" dentro de, digamos, 15 +/- 7 en cada nuevo tick, para que se genere aleatoriamente dentro de los límites dados ...
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

Para obtener números reales aleatorios con distribución uniforme en el intervalo [a,b], utilice la fórmula

x = rand()*(b-a)/RAND_MAX + a;

Para mql, en la descripción de la función MathRand(), está escrito: La función devuelve un entero pseudoaleatorio en el rango de 0 a 32767

es decir, para mql RAND_MAX = 32767

 

Empecé a aprender mq4, e inmediatamente me encontré con algunos momentos oscuros.

Lo he intentado, por así decirlo. Escribí un simple Asesor Experto en Ma. Pero no quiere comerciar ni siquiera con la historia. No produce errores.

¿Puede decirme en qué he metido la pata?

int start()
  {
   //---проверим возможность входа в позицию
   bool flagchange = false;
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
   for (;;)
      {
      int flag= GetEma();
       if (flagchange != flag) // проверим, сигнал ема изменился? если да, то можно открыть или закрыть поз.
       flagchange = true;      // изменился!
       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 ==1) 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);
  }
      //////////////////////////////////////////////////////
  int 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 (1);
      else return (0);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   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);
        } 
 


bool flagchange = false;
int Slippage = 3;
int i = 0;
double lt = getLots() ; // lote mínimo
RefreshRates();
int total = OrdersTotal();
int ticket = -1;
for (;;)
{
int flag= GetEma();
if (flagchange != flag)

la sentencia for sin el parámetro? - ¿el punto? los bucles eternos no se escriben así, y en segundo lugar, hay variables globales para el EA - no para el terminal, se describen al principio del código antes de todas las funciones y la función start() incluyendo, como has escrito - en cada tick que llamas a la función start(), flagchange = false; y entonces intentas comparar esta bandera con el estado anterior, pero su estado siempre será falso

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


 
MarkTrade:

Empecé a aprender mq4, e inmediatamente me encontré con algunos momentos oscuros.

Lo he intentado, por así decirlo. Escribí un simple Asesor Experto en Ma. Pero no quiere comerciar ni siquiera con la historia. No muestra ningún error.

¿Puede decirme en qué he metido la pata?


¿Cuál es la finalidad del bucle de EA?

for (;;) {


}