[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 477

 
Sim... Certo.
 
Phew!!! Não ajuda. Ah. Eu vou compilar o cão na nova EA peça por peça!
 
Dimka-novitsek:
Phew!!! Não funciona. Ah, vou compilar o cão em uma nova EA peça por peça!


Isto é o que eu faço em casos como este:

- Eu comento todo o texto da função;

- Anoto o comentário em partes, compilo-o e espero que o erro apareça.

 
   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)); }

portanto

   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( );}
         }
       }
    }

como este

      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));
      }

e assim por diante

    Print (   "  Конец " );      

Dica 1: Estruture seu programa com recuos

Dica 2: ao procurar por tais erros, e muitos outros, use o comentário de partes de código /* */ - os erros de sintaxe são encontrados muito rapidamente

 
Dimka-novitsek:
Obrigado!!! É melhor eu dar uma olhada no código... Também tenho os parênteses em um pedaço de papel - equilibrado!!!

A regra de nidificação deve ser seguida.

 
Dimka-novitsek:
Onde está a ramificação? Ou eu sou estúpido... Quer dizer, nós apenas abrimos uma ordem sob as condições!
O se operador é um operador de sucursal, mas falta a segunda sucursal (ou outra) em seu código.
 

Obrigado!!!

Compila-se sem essa linha.

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);

E eu não vejo isso como um crime!!! Fui eu quem transferiu a EA inteira em partes e as compilou separadamente até encontrar a raiz, por assim dizer.

 
Dimka-novitsek:

Obrigado!!!

Compila-se sem essa linha.

E eu não vejo isso como um crime!!! Fui eu que carreguei a EA inteira em partes e as compilava separadamente até que a raiz fosse encontrada, por assim dizer.

faltando o suporte de fechamento para impressão

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));
 

Boa tarde... Eu escrevi um indicador simples (ver arquivo anexo).

Em poucas palavras, a essência do indicador: o indicador consiste em 3 linhas:

1 linha mostra a diferença de dois MAs em Close com períodos a e b (condicionalmente).

A segunda linha mostra a diferença de dois MAs em Close com os períodos c e d (condicionalmente);a≠b≠c≠d.

Alinha 3 exibe a diferença MA da Linha 1 e Linha 2, ou seja, MA(Linha 1-Linha 2) com um determinado período .

Pergunta: Por que a Linha3 (preta) é mostrada como uma linha reta no gráfico?


Nota para a imagem: o gráfico superior mostra o resultado desejado, o gráfico inferior mostra o meu indicador criado

Nota: Se alguém encontrar mais alguns bugs, ficarei muito grato por uma dica.

P.S. A fim de não desperdiçar o fórum, obrigado antecipadamente pelo seu feedback

Arquivos anexados:
aom3.mq4  12 kb
 

Primeiro, tente ligar o quarto tampão não-exibível ExtMapBuffer4 ao tampão indicador

SetIndexBuffer(3,ExtMapBuffer4);

porque você escreve

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

no início você descreve 3 linhas/buffers

a propósito, então você não precisará declará-lo como uma série de tempos e verificá-lo

Razão: