Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 493

 
INGFX:

Vladimir, ¡gracias por tu paciencia y ayuda!
Realmente se cometió un error en el código ...
Tendré más cuidado a partir de ahora.

¡Sí! Ahora puedo ir a dormir en paz.
 

Buenas tardes.

Por favor, aconséjeme cómo resolver el problema. Al intentar enviar un archivo con SendFTP() se produce un error 4014 - No se permite llamar a la función del sistema.

La configuración del FTP es correcta: se envían los informes y el archivo de prueba.

Gracias de antemano.

 
Nikita Solodko:

Buenas tardes.

Por favor, aconséjeme cómo resolver el problema. Al intentar enviar un archivo con SendFTP() se produce un error 4014 - No se permite llamar a la función del sistema.

La configuración del FTP es correcta: se envían los informes y el archivo de prueba.

Gracias de antemano.

¿Por casualidad estás tratando de enviar desde el indicador?
 
Karputov Vladimir:
¿Por casualidad estás tratando de enviar desde un indicador?
Accidentalmente, sí... ¿Por qué no puedes?
 
Nikita Solodko:
Accidentalmente sí... ¿Por qué no puedes?
No se puede porque en caso de retrasos en la red ftp, el indicador puede ralentizar todo el terminal. Pero puedes hacerlo desde el EA.
 
Karputov Vladimir:
No es posible debido a que en caso de retrasos en la red ftp, el indicador puede ralentizar todo el terminal. Pero desde la EA, son bienvenidos a hacerlo.
Gracias.
 

Hola a todos. Estoy escribiendo mi primer EA y me encuentro con un problema que no puedo resolver.

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

Mi EA debería dar señal de compra y de venta si la barra anterior se abrió fuera del canal"Envelopes",si estaba por encima del canal, entonces vender, si estaba por debajo comprar, pero en realidad siempre envía órdenes cuando le da la gana, puede que se ponga largo dentro del canal y de repente empiece a dar órdenes de compra, aunque todas las demás condiciones están bien, si la señal de venta vende y la de compra, compra.

¿Cómo hacer que compre una orden por barra, en lugar de todas a la vez el número de órdenes permitido cada segundo?

 
Nickolay72:

Hola a todos. Estoy escribiendo mi primer EA y me encuentro con un problema que no puedo resolver.

Mi EA debería dar una señal de compra y venta si la barra anterior se abrió fuera del canal"Envelopes",si estaba por encima del canal, entonces vender, si estaba por debajo comprar, pero en realidad siempre envía órdenes cuando le da la gana, puede que se ponga largo dentro del canal y de repente ordene comprar, aunque todas las demás condiciones están bien, si señal de venta, vender, comprar, comprar.

¿Cómo hacer que compre una orden por barra, en lugar de todas a la vez el número de órdenes permitido cada segundo?

Buen día. Antes de enviar una orden, compruebe si ya tiene posiciones abiertas. Si las hay, no envíe una orden de apertura, en caso contrario, envíela. Por lo que entiendo su código, esta función CountTrades() se encarga de ello. Por lo tanto, compruebe los valores devueltos por esta función.
 
Hasta ayer se abrió una orden y la siguiente no se abrirá hasta que se abra la siguiente orden, pero ¿cómo hacer que mi EA abra las órdenes cuando la barra anterior estaba por encima (debajo) del canal?
Archivos adjuntos:
Zmey.mq4  5 kb
 
Nickolay72:
Hasta ayer tenía un pedido cada uno, y mientras hay un pedido, el siguiente no se abre.¿Cómo hacer que mi EA abra órdenes según la orden cuando la barra anterior ha abierto por encima (por debajo) del canal? En este momento, la mayoría de las órdenes están perdiendo, porque no se abren de acuerdo con las condiciones.
Si la barra libre 1 es mayor/menor que el canal.
Razón de la queja: