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

 
Sí... Sí.
 
¡¡¡Uf!!! No ayuda. Ah. ¡Recopilaré el perro en el nuevo EA pieza por pieza!
 
Dimka-novitsek:
¡¡¡Uf!!! No funciona. ¡Ah, voy a recopilar el perro en un nuevo EA pieza por pieza!


Esto es lo que hago en casos como este:

- Comento todo el texto de la función;

- Me apunto el comentario por partes, lo compilo y espero a que aparezca el error.

 
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),  
     "    NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

así que

   for( int A=0; A<100 ; A++)
   {
       double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
       double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
       int BUY=0,SELL=0;int ticket; 
       Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
           
       for(int i=1; i<=OrdersTotal(); i++)
       {  
         if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
         {                                       // Анализ ордеров:
            if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
            if (OrderMagicNumber( ) !=magicnumber)continue;
            if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
            if (OrderType()==1) {SELL++;ticket=OrderTicket( );}
         }
       }
    }

así

      if (strela1<strela2&&BUY==0&&SELL==0)
      {  

         OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
         NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
         Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
         "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
         "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits));
      }

y así sucesivamente

    Print (   "  Конец " );      

Consejo 1: Estructure su programa con sangrías

Consejo 2: cuando busque estos errores, y muchos otros, utilice los comentarios de las partes del código /* */ - los errores de sintaxis se encuentran muy rápidamente

 
Dimka-novitsek:
¡¡¡Gracias!!! Será mejor que eche un vistazo al código... También tengo los soportes en un papel - ¡¡¡equilibrado!!!

la fragmentación no significa que sea correcta: hay que seguir la regla de anidamiento

 
Dimka-novitsek:
¿Dónde está la ramificación? O soy un estúpido... Quiero decir, ¡acabamos de abrir una orden bajo las condiciones!
El operador if es un operador de bifurcación, pero la segunda bifurcación (else) falta en tu código.
 

¡¡¡Gracias!!!

Se compila sin esa línea.

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits);

¡¡¡Y no lo veo como algo criminal!!! Fui yo quien transfirió todo el EA por partes y las recopiló por separado hasta encontrar la raíz, por así decirlo.

 
Dimka-novitsek:

¡¡¡Gracias!!!

Se compila sin esa línea.

¡¡¡Y no lo veo como algo criminal!!! He llevado todo el EA por partes y lo he recopilado por separado hasta encontrar la raíz, por así decirlo.

falta el corchete de cierre de Print

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits));
 

Buenas tardes... He escrito un indicador sencillo (ver archivo adjunto).

Brevemente, la esencia del indicador: el indicador consta de 3 líneas:

1 línea muestra la diferencia de dos MAs sobre Close con períodos a y b (condicionalmente).

La segunda línea muestra la diferencia de dos MAs en Close con períodos c y d (condicionalmente);a≠b≠c≠d.

Lalínea 3 muestra el MA de la diferencia entre la línea 1 y la línea 2, es decir, el MA (línea 1-línea 2) con un periodo determinado.

Pregunta: ¿Por qué la línea 3 (negra) se muestra como una línea recta en el gráfico?


Nota a la imagen: el gráfico superior muestra el resultado deseado, el gráfico inferior muestra mi indicador creado

Nota: Si alguien encuentra algún otro error, le estaré muy agradecido por un consejo

P.D. Para no ensuciar el foro, gracias de antemano por sus comentarios

Archivos adjuntos:
aom3.mq4  12 kb
 

En primer lugar, intente vincular el cuarto búfer no visualizable ExtMapBuffer4 al búfer indicador

SetIndexBuffer(3,ExtMapBuffer4);

porque escribes

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

al principio describes 3 líneas/buffers

por cierto, entonces no será necesario declararlo como una serie temporal y comprobarlo