[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 54

 
vovan-gogan:

Não é o mesmo no meu exemplo? Qual é a diferença? Exceto que eu não adicionei uma função inicial.


Ou melhor ainda, assim.

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan:

Mas eu não vejo a diferença para tentar. Por favor, diga-me o que eu fiz de errado.

Você tenta e escreve o resultado. A ordem não pode ser definida de acordo com sua condição, devido à falta de verificações necessárias ao defini-la. Além disso, não faria mal adicionar um manipulador de erros quando ele não é instalado por uma razão ou outra, o deslizamento faz > 0 - esta é a primeira coisa que mostra imediatamente.
 
Você está se referindo a um deslizamento em uma ordem pendente?
 
vovan-gogan:
Você quer dizer escorregamento em uma ordem pendente?


Não se preocupe com o texto - basta defini-lo e pronto...Verifique.

Pelo menos no testador tudo deve funcionar - se você não conseguir definir uma ordem devido a uma curta distância, ela será definida na próxima vez - sua pergunta era sobre outra coisa - então você terminará tudo o resto - verifique como está no testador.

 
Roman.:


Não mexa no texto - configure-o e pronto...Verifique.

Pelo menos no testador tudo deve funcionar - se você não definir a ordem por causa da pequena distância, da próxima vez ela será definida - sua pergunta agora era sobre algo mais - então você terminará tudo o resto - verifique como está, no testador.


Obrigado por querer ajudar, mas nesta situação particular eu gostaria que primeiro me ajudasse a entender meu erro. Se eu uso constantemente soluções desenvolvidas por outros, e não me dou conta de meus erros, é pouco provável que eu cresça como programador. Espero que você concorde com isso.
 
vovan-gogan:

Não é o mesmo no meu exemplo? Qual é a diferença? Exceto que eu não adicionei a função de partida.


Reaproveitar o conceito de variáveis locais e globais. Além disso, devido a esta construção

 if (OrdersTotal()>= 1) return(0);  

se uma posição for aberta manualmente ou por outra EA na mesma conta comercial, a EA não definirá uma ordem pendente quando a condição comercial disparar para estabelecer uma ordem pendente, ela funcionará muito bem para um testador de estratégia.

No caso geral, você precisa organizar um loop pelas ordens abertas ou definidas por este mesmo Expert Advisor, dependendo da lógica de seu algoritmo, na ausência de ordens pendentes, defini-lo e aumentar o contador de ordens e imprimir as informações.

 
vovan-gogan:

Obrigado por sua disposição de ajudar, mas nesta situação particular gostaria que você me ajudasse antes de tudo a entender meu erro. Se eu usar constantemente soluções escritas por outros e não perceber meus erros, dificilmente serei capaz de crescer como programador. Espero que você concorde com isso.


De acordo. Reveja o conceito de variáveis locais e globais no terminal do cliente.



int start()                            // Спец. функция start
  {
    int Orders=0;    
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
         
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
vovan-gogan:

Obrigado por sua disposição de ajudar, mas nesta situação particular gostaria que você me ajudasse a entender meu erro primeiro.


Faça já a pergunta... :-Р

Tente a variante do meu posto anterior.

Leia o tutorial e a documentação aqui - ainda não vi carne moída mais detalhada mastigada em nenhum lugar.

 
Obrigado pela dica sobre variáveis globais e locais) Vou ler mais)
 
Alexandr24:
Diga-me por que quando eu abro um gráfico (em tempo real) com Prazo M30 e aplicar o indicador com parâmetro int shift=iBarShift(NULL,PERÍODO_M5,some_time); shift será como deve ser, mas quando eu executar o mesmo indicador através do testador com o período M30 shift não é calculado?

Quem sabe como resolver este problema?