[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 534

 
Alex007:
Desde que fui expulso de um fio separado, vou tentar perguntar aqui, porque não encontrei uma pergunta semelhante:

Troco meu Expert Advisor no MT4. Tudo estava bem antes deste posto. Hoje decidi desativar a EA, pressionei o botão EA na minha barra de ferramentas e em vez de sorrir, apareceu uma cruz na minha tabela. E, de repente, um acordo foi aberto. Um, dois... mais e mais. Abri as configurações do consultor especializado e habilitei o OnlyBuy na janela correspondente (a EA ainda está desativada). O negócio foi feito novamente, e foi uma venda inversa! Depois reabri as configurações e desabilitei sua capacidade de negociar (sem controle). Isto também não funciona. O Expert Advisor vive sua própria vida. Entrei em contato com o suporte e recebi a seguinte resposta" Isto é muito provavelmente um problema com seu consultor especializado". Favor apagar seu terminal e instalar um novo a partir de nosso site sem instalar nenhum outro EAs.
Caros Conselheiros Especialistas, por favor, nos dê sua opinião sobre este assunto, especialmente sobre a parte destacada. Gosto especialmente da frase clara "muito provavelmente" . Como pode ser e qual é o problema?
Você não pode dizer o que está errado sem rever o código. A primeira coisa que vem à mente é que o deinit() tem a condição de abrir um negócio depois que o programa é fechado. De onde você tirou tal EA?
 
Sinto muito - não há milagres! Eu não percebi como duas MTs abriram. Eu estava negociando em um deles, e o outro estava negociando em paz. É um azar para os velhos tempos também - pareço ser bom com computadores, e aqui está algo como isto ....
 
VladislavVG:

Nota - em MKL4 as prioridades são ligeiramente diferentes daquelas em C, lido em comum. Portanto, é melhor colocar parênteses.

Obrigado! Agora eu entendo porque os parênteses.

Aqui está uma velha história. Terminei o robô com uma canção de minha própria composição. Espero que funcione. E de repente 'fim_do_programa' - parêntese esquerda desequilibrada C:\TeleTRADE_peritosvariantprogram.mq4 (365, 1)

Como sempre, olhei através dos parênteses e remendei. Parece que não vejo nada. O que pode ser novamente?

int Profit=0;                                
    for (i=0; i<OrdersHistoryTotal(); i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
   {
    if(OrderSymbol()!= Symbol()) continue;
    if(OrderType()>=2)continue;
    Profit+=OrderProfit();     }}
    
 
 
 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol(!= Symbol()) continue;
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
//+------------------------------------------------------------------+

//------- :  Коды ошибок
string ErrorDescript(int error_code){string error_string;switch(error_code){
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                               
 

Ugh! ! Acho que tirei o parênteses extra do caminho.

 
Dimka-novitsek:

Obrigado! Agora eu entendo porque os parênteses.

...

Pessoal, vocês podem me dizer se isso é permitido ou se eu perdi alguma coisa?

if(OrderType()>=2)continue;
 
paladin80:

Pessoal, vocês podem me dizer se isso é permitido ou se eu perdi alguma coisa?


Por que não, é uma intriga regular

Outra questão é que em qualquer próxima construção os códigos para COMPRA e VENDA podem mudar e o código deixará de funcionar abruptamente.

 
ilunga:

Por que não, é uma intriga normal

Outra questão é que em qualquer próxima construção os códigos para COMPRA e VENDA podem mudar e o código deixará de funcionar abruptamente.

Sim, isso é lógico. Assim é melhor:

if(OrderType()=OP_BUY || OrderType()=OP_SELL) continue;
Dimych, se o compilador mostra um lugar onde falta um parêntese, isso não significa que este seja o lugar a ser procurado. s vezes, se um parêntese for colocado incorretamente (ou faltar) no início do código, o erro aparece no final. Portanto, você pode procurá-lo no comentário /* ... */.
 
paladin80:

Sim, isso faz sentido. É melhor assim, então:

Dimy, se o compilador mostra um lugar onde falta um parêntese, isso não significa que devemos procurar lá. Às vezes, se um parêntese for colocado incorretamente (ou faltar) no início do código, o erro irá aparecer no final. Portanto, procure-o comentando o código /* ... */.

Só não é assim...) "=" não é uma condição, mas uma operação de atribuição.

Então, deveria ser assim:

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;

ou ainda melhor assim (para que você não tenha que usá-lo duas vezes)

int type = OrderType(); 
if(type!=OP_BUY && type!=OP_SELL) continue;
 
ilunga:

Não é assim...) "=" não é uma condição, mas uma operação de atribuição.

Então vá assim:

Ou melhor ainda, assim (para não ter que ir duas vezes).

O seu é melhor, eu esqueci de colocar !) Provavelmente, deveria ser "|||" em vez de "&&".
 
Dimka-novitsek:

Obrigado! Agora eu entendo porque os parênteses.

Aqui está uma velha história. Terminei o robô com uma canção de minha própria composição. Espero que funcione. E de repente 'fim_do_programa' - parêntese esquerda desequilibrada C:\TeleTRADE_peritosvariantprogram.mq4 (365, 1)

Como sempre, olhei através dos parênteses e consertei. Parece que não vejo nada. O que pode ser novamente?


 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol() != Symbol()) continue; // тут не хватает скобки
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
Como a maioria dos corretores trabalha com citações de 5 dígitos, um deslize de 6 pips não é suficiente
Razão: