Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1361

 
azolotta:

¡¡¡Gracias, eso sí que ha solucionado el problema!!!

Si no te importa, ¿podrías decirme qué tipo de construcción hay que añadir para que no muestre dos altos/bajos seguidos, sino una variabilidad (alto-bajo-alto)? Entiendo que necesito una comprobación, como "si el elemento anterior del array era alto, no incluyas el segundo alto consecutivo en el array, y espera al bajo", pero ¿cómo debo hacerlo?

Ya te lo he explicado.

 
DanilaMactep:

Buenas tardes a todos. Tengo el cheque puesto, pero olvidé probarlo. Menos mal que hoy me he acordado de ello... Aquí está esta comprobación del nivel de parada del mod.

Cuando se prueba esta comprobación, se producen los errores que se muestran en la siguiente captura de pantalla

Y lo que es interesante, como me aconsejaron, añadí a esta comprobación el dominio por 1,5 de la siguiente manera


Esta adición no resuelve el problema aparecido prueba da errores como en la captura de pantalla a continuación.

Si se comenta esta comprobación en el nivel de parada del mod, no hay errores. ¿Cuál es el error en el cheque, por favor, aconséjelo? Sin ella, no se puede iniciar el grial en el mundo real - será prohibido inmediatamenteL O_o

Creo que el error no está en la prueba, sino en el lugar donde la has prescrito

y también aquí puedes eliminar "*1,5"

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

Buenas tardes a todos. Tengo el cheque puesto, pero olvidé probarlo. Menos mal que hoy me he acordado de ello... Aquí está esta comprobación del nivel de parada del mod.

Cuando se prueba esta comprobación, se producen los errores que se muestran en la siguiente captura de pantalla

Y lo que es interesante, como me aconsejaron, añadí a esta comprobación el dominio por 1,5 de la siguiente manera


Esta adición no resuelve el problema aparecido prueba da errores como en la captura de pantalla a continuación.

Si se comenta esta comprobación en el nivel de parada del mod, no hay errores. ¿Cuál es el error en la comprobación, por favor, indíquelo? Sin ella, no se puede iniciar el grial en el mundo real - será prohibido inmediatamenteL O_o

Comprueba que devuelve un nivel de parada, suele ser 0.

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

Pues así.

 
Alekseu Fedotov:

Compruebe lo que devuelve el nivel de parada, a menudo es 0.

Así.

No necesita eso, es "si menos de estoplevel".

 
DanilaMactep:

Buenas tardes a todos.

Grave error... no lo vi de inmediato.

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

Se supone que es DOTS.

 
azolotta:
No mostrar dos altos/bajos seguidos, sino ser variable (alto-bajo-alto)

Puedes hacerlo de forma sencilla. Declarar una variable global y cambiarla en función de los eventos.

int direction=0;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

En los indicadores, utilice la función OnCalculate y todas sus variables.

Y el Start ya no está de moda:)

 
Aleksei Stepanenko:

Puedes hacerlo de forma sencilla. Declarar una variable global y cambiarla en función de los eventos.

En los indicadores, utilice la función OnCalculate y todas sus variables.

Y Start está fuera de moda:)

Gracias! ¡Es una manera genial!)

lo tengo sobreOnCalculate, estaré en él))

 
Aleksei Stepanenko:

Puedes hacerlo de forma sencilla. Declarar una variable global y cambiarla en función de los eventos.

En los indicadores, utilice la función OnCalculate y todas sus variables.

Y el Start ya no está de moda:)

no funcionan, el nuevo máximo/menor no los tendrá en cuenta
 

Buenas tardes. Cuando llamo al indicador en mi Asesor Experto, se indica un error en el cuadro, ¿por qué ocurre? Y no siempre. Funciona bien en

terminal, funciona bien.


 
Sergey Fionin:

Buenas tardes. Cuando llamo al indicador en mi Asesor Experto, se indica un error en el cuadro, ¿por qué ocurre? Y no siempre. Funciona bien en

terminal, funciona bien.


Esto es una violación por escrito, una prohibición por escrito del sistema.
Razón de la queja: