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

 
INGFX:

Vladimir, obrigado pela sua paciência e ajuda!
Realmente cometeu um erro no código ...
Vou ter mais cuidado a partir de agora.

Viva! Agora posso ir dormir em paz.
 

Boa tarde.

Por favor, aconselhar como resolver o problema. Ao tentar enviar um ficheiro com SendFTP() há um erro 4014 - Não é permitida a chamada da função de sistema.

As definições de FTP são OK - relatórios e ficheiro de teste são enviados.

Obrigado de antemão.

 
Nikita Solodko:

Boa tarde.

Por favor, aconselhar como resolver o problema. Ao tentar enviar um ficheiro com SendFTP() há um erro 4014 - Não é permitida a chamada da função de sistema.

As definições de FTP são OK - relatórios e ficheiro de teste são enviados.

Obrigado de antemão.

Por acaso está a tentar enviar de indicador?
 
Karputov Vladimir:
Está, por acaso, a tentar enviar de um indicador?
Acidentalmente, sim... Porque não pode?
 
Nikita Solodko:
Acidentalmente, sim... Porque não pode?
Não pode porque em caso de atrasos na rede ftp, o indicador pode atrasar todo o terminal. Mas pode fazê-lo a partir da EA.
 
Karputov Vladimir:
Não é possível devido ao facto de, em caso de atrasos na rede ftp, o indicador poder abrandar todo o terminal. Mas, da EA, é bem-vindo para o fazer.
Obrigado.
 

Olá a todos. Estou a escrever o meu primeiro AE e estou a enfrentar um problema que não posso vencer.

void OnTick()
{
 datetime EaStartTime = StringToTime(StartTime);  // время начала работы советника
 datetime EaEndTime = StringToTime(EndTime);      // время окончания работы советника
 datetime CurrTime = TimeCurrent();               // это если нужно взять время терминала
 if (CurrTime < EaStartTime || CurrTime >= EaEndTime)
  return;                                         // если еще не время торговать - выход
{
 PriceLow=iEnvelopes(NULL,0,MA_Period,MA_Shift,MA_Method,Applied_Price,Deviation,0,1);
 PriceHigh =iEnvelopes(NULL,0,MA_Period,MA_Shift,MA_Method,Applied_Price,Deviation,1,1);
 MacdCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,PRICE_CLOSE,MODE_MAIN,0);
 SignalCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
 SignalMAPrevious=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,PRICE_MEDIAN,1);
 SignalMAThis=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,PRICE_MEDIAN,0);
 PriceCurrentOpen=iOpen(NULL,0,1);
 PriceCurrentClose=iClose(NULL,0,1);
  if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }
 }
}  
void CheckForOpen()
{
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return; 
 }
}

O meu EA deve dar um sinal de compra e venda se o bar anterior foi aberto fora do canal"Envelopes",se estava acima do canal, depois vender, se estava abaixo da compra, mas de facto envia sempre ordens quando lhe apetece, pode demorar muito tempo dentro do canal e de repente começar a comprar ordens, embora todas as outras condições estejam bem, se o sinal de venda-venda, comprar.

Como fazê-lo comprar uma encomenda por bar, em vez de todas de uma só vez o número de encomendas permitidas a cada segundo?

 
Nickolay72:

Olá a todos. Estou a escrever o meu primeiro AE e estou a enfrentar um problema que não posso vencer.

O meu EA deve dar um sinal de compra e venda se o bar anterior foi aberto fora do canal"Envelopes",se estava acima do canal, depois vender, se estava abaixo da compra, mas de facto envia sempre ordens quando lhe apetece, pode demorar muito tempo dentro do canal e de repente comprar ordem, embora todas as outras condições estejam bem, se vender sinal, vender, comprar, comprar.

Como fazê-lo comprar uma encomenda por bar, em vez de todas de uma só vez o número de encomendas permitidas a cada segundo?

Bom dia. Antes de enviar uma ordem, verifique se já tem posições em aberto. Se houver alguma, não envie uma ordem para abrir, caso contrário, envie-a. Tanto quanto sei o vosso código, esta função CountTrades() lida com ele. Portanto, verificar os valores devolvidos por esta função.
 
Até ontem uma ordem foi aberta e a próxima não será aberta até que a próxima ordem seja aberta, mas como fazer a minha EA abrir as ordens quando a barra anterior estava acima (abaixo) do canal?
Arquivos anexados:
Zmey.mq4  5 kb
 
Nickolay72:
Até ontem tinha uma encomenda cada, e enquanto houver uma encomenda, a seguinte não será aberta.Como fazer a minha EA abrir ordens de acordo com a ordem quando a barra anterior tiver aberto acima (abaixo) do canal? Neste momento, a maioria das encomendas está a perder, porque não são abertas de acordo com as condições.
Se o Open Bar 1 for mais alto/mais baixo do que o canal.