Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 456

 
Zver4991:

¿De qué depende la calidad de la prueba y cómo puedo elevarla al máximo?

Consulte este sitio web, cómo probar un EA con una calidad de simulación del 99%.

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
Esto es así para el tipo BOOL. Es decir, para un bool de una versión anterior de MQL4. Esto no es cierto para un bool de un solo byte. Se producirá un desbordamiento si el valor es mayor que cero.

Me pregunto por qué entonces.

   bool b=2;

¿Compila sin errores ni advertencias?

 
artmedia70:

Me pregunto por qué entonces.

bool b=2;
¿compila sin errores ni advertencias?

El operador de asignación debe estar sobrecargado para el tipo bool. Controla el desbordamiento y si es más de 1, asigna y devuelve true.

En el estudio en el nivel de advertencia 4, a menudo hay advertencias cuando se intenta insertar algún tipo ilógico en una expresión lógica. O viceversa, cuando se utiliza un tipo lógico en operaciones aritméticas.

 
Zhunko:

El operador de asignación debe estar sobrecargado para el tipo bool. Controla el desbordamiento y, si es mayor que 1, asigna y devuelve true.

En el estudio en el nivel de advertencia 4, a menudo hay advertencias cuando se intenta insertar algún tipo ilógico en una expresión lógica. O viceversa, al aplicar un tipo lógico en operaciones aritméticas.

Sería más lógico

#property strict

para emitir un aviso y dejarlo como en la versión antigua sin

 
artmedia70:

no es exactamente cierto, pero lo esencial es correcto.

En realidad: cero corresponde a falso, y cualquier otro valor distinto de cero corresponde a verdadero

Sin depender de los valores predeterminados, cambio el init a una variable booleana y luego uso eso solamente.
 

Bueno, después de todo no soy programador...

Existe la cuenta número 1 - de cinco dígitos con un lote mínimo de 0,01 y un paso de 0,01 (build 584); la cuenta número 2 - de cuatro dígitos con un lote mínimo de 0,1 y un paso de 0,1 (build 584) y la cuenta número 3, igual que la número 2, pero el terminal build 509.

Y hay un arrastre de pérdidas de parada:

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

¿Por qué en la cuenta #1 el stoploss se arrastra normalmente, pero en las cuentas #2 y 3 "error 130"? Aunque la lógica se subvierte, pero funciona en un caso...

 
evillive:

Bueno, después de todo no soy programador...

Existe la cuenta número 1 - de cinco dígitos con un lote mínimo de 0,01 y un paso de 0,01 (build 584); la cuenta número 2 - de cuatro dígitos con un lote mínimo de 0,1 y un paso de 0,1 (build 584) y la cuenta número 3, simplemente takoe igual que la número 2, sólo que el terminal build 509.

Y hay una red de arrastre de paradas:

¿Por qué el stop loss de la cuenta 1 tiene un recorrido normal, pero las cuentas 2 y 3 muestran "Error 130"? Aunque la lógica se subvierte, pero funciona en un caso...


La propia pregunta implica que el problema es una cuenta de 5 o 4 dígitos. Mirando el código. ¿Dónde está definida la variable pipPoint y a qué equivale? Lo más probable es que ahí radique el problema.
 
pro_:

La propia pregunta sugiere que se trata de un recuento de 5 o 4 dígitos. Estoy mirando el código. ¿Dónde está definida la variable pipPoints y a qué equivale? Lo más probable es que ahí radique el problema.

He definido pipPoints = MarketInfo( Symbol(), MODE_POINT) en el init;

Aumenté el valor de MaxStop y el arrastre debería cambiar en incrementos con mayores, pero cambia en incrementos de 1 punto, al menos comienza a arrastrar a 4 dígitos... Todavía tendré que modificar la lógica, necesito un paso ajustable.

 
smdm:

¡Hola!

La pregunta es la siguiente. Tengo un indicador Heiken Ashi Smoothed https://www.mql5.com/ru/code/7930.

¿Qué cambios debería hacer en el código del indicador para poder adjuntar este indicador en un gráfico de cinco minutos en un marco temporal superior, por ejemplo en un marco temporal de treinta minutos o de una hora?

Gracias.


He hecho una pregunta similar - cómo aplicar un indicador del gráfico semanal en el gráfico H4. me golpeó en varios foros . y aquí también, pero no consiguió nada mejor que prescribir el tamaño de un gran TF-m en el código para una más pequeña, nadie sugirió. aunque si su indicador tiene una logística simple y toma para su cálculo de los cálculos de barras simples, es posible. si usted puede texto el código y una pantalla en n1 un estudio con sus explicaciones .
 

por lo que el indicador debe dibujar una línea vertical en la barra en la que el precio se cierra en el centro de la barra.....

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста

Razón de la queja: