Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 414

 
Leanid Aladzyeu:

cospe

possível perda de dados devido à conversão do tipo .mq4 1697 29

tipo Doble no SL.

O compilador é hoje em dia rigoroso, deveria ser assim, MarketInfo retorna tipo duplo

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

O compilador é hoje em dia rigoroso, deveria ser assim, MarketInfo retorna tipo duplo

A variável "sumbol" está correcta, tenho-a como variável no invólucro do modificador.

Obrigado, coloquei(int) e tudo está bem.

Não sei como o fiz antes; a minha experiência na escrita de EAs é de 21 dias))

Não sei há quanto tempo estou a escrever os meus EAs e não sei como o fazer correctamente).

 

Leanid Aladzyeu:

Não sei como costumava escrever EAs (há 21 dias que os escrevo )). E a minha EA está persistentemente a chegar ao topo dos EAs livres)

Bem, então tem muita sorte, até à versão 600 a antiga MQL4 era horrível )) Por favor, envie-me o link para a minha EA, pode estar na sua caixa de correio
 
Alexey Volchanskiy:
Bem, então tem muita sorte, até a versão 600 a antiga MQL4 era horrível )) Por favor, envie-me o link para o MQL4 Expert Advisor.
Ao meu apelido e produto.
 

Por alguma razão, dá um erro na última linha.

'}' - nem todos os caminhos de controlo devolvem um valor Expert4.mq4

Todas as funções não ovóides devem terminar com o operador de retorno.

Estou apenas a olhar para este código do vídeo tutorial, mas pode ser para uma construção antiga.



#incluir#incluir <stderror.mqh>

//+------------------------------------------------------------------+
//|Perito4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#propriedade copyright "Mikhail
#ligação de propriedade ""
#propriedade versão "1.00"
#propriedade rigorosa

sinal int = 1;

int start()
{
se (sinal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, 0, "Test", 123, 0, Blue);
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (símbolo de corda, int cmd, volume duplo, preço duplo, int slippage,stoploss duplo,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = falso;
int ticket = -1;

int Retry = 10;
int cnt = 0;
se (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
bilhete = OrderSend(symbol, cmd, volume, preço, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
pausa;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt+++;
pausa;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuar;

padrão:
exit_loop +true;
pausa;

}
se (cnt> Retry)
exit_loop = true;


se (!exit_loop)
{
Sleep(1000);
RefreshRates();

}
senão
{
if(err != ERR_NO_ERROR)
{
Imprimir ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
regresso(bilhete);
}

Imprimir("Erro: ordem aberta falhou depois" + cnt + "atempts");
retorno(-1);


}// entretanto
}// se
}//saída
 
Mikhail Nikolaev:

Aqui....

}


}


regresso(bilhete);

}

 
Mikhail Nikolaev:

Leanid Aladzyeu:

Inserir correctamente o código no fórum

 
Mikhail Nikolaev:

Por alguma razão, dá um erro na última linha.

'}' - nem todos os caminhos de controlo devolvem um valor Expert4.mq4

Todas as funções não ovóides devem terminar com o operador de retorno.

Acabei de assistir a este código no vídeo tutorial, mas pode ser para construções antigas.



#incluir#incluir <stderror.mqh>

//+------------------------------------------------------------------+
//|Perito4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#propriedade copyright "Mikhail
#ligação de propriedade ""
#propriedade versão "1.00"
#propriedade rigorosa

sinal int = 1;

int start()
{
se (sinal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, 0, "Test", 123, 0, Blue);
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (símbolo de corda, int cmd, volume duplo, preço duplo, int slippage,stoploss duplo,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = falso;
int ticket = -1;

int Retry = 10;
int cnt = 0;
se (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
bilhete = OrderSend(symbol, cmd, volume, preço, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
pausa;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt+++;
pausa;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuar;

padrão:
exit_loop +true;
pausa;

}
se (cnt> Retry)
exit_loop = true;


se (!exit_loop)
{
Sleep(1000);
RefreshRates();

}
senão
{
if(err != ERR_NO_ERROR)
{
Imprimir ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
regresso(bilhete);
}

Imprimir("Erro: ordem aberta falhou depois" + cnt + "atempts");
retorno(-1);


}// entretanto
}// se
}//saída

Meu, é assim tão difícil formatar o código? Nem sequer vou olhar para ela por princípio - é uma dor nos olhos.
 
Estou de novo atrasado, não vai caber
 
Leanid Aladzyeu:
Estou de novo atrasado, não consigo que caiba.

Tudo bem, que navegador está a usar? Tente mudar para outro. Eu tenho FFox. Dei a resposta nos comentários do código logo no final.

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit