Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 493

 
INGFX:

Владимир, спасибо за ваше терпение и помощь!
Действительно ошибся в коде ...
Впредь буду внимательнее. 

Ура! Теперь я могу спокойно идти спать. 
 

День добрый.

Подскажите как решить проблему. При попытке отправки файла функцией SendFTP() возникает ошибка 4014 - Системная функция не разрешена для вызова.

С настройками FTP все в порядке - отчеты и тестовый файл отправляются.

Заранее благодарен. 

 
Nikita Solodko:

День добрый.

Подскажите как решить проблему. При попытке отправки файла функцией SendFTP() возникает ошибка 4014 - Системная функция не разрешена для вызова.

С настройками FTP все в порядке - отчеты и тестовый файл отправляются.

Заранее благодарен. 

Вы случайно не из индикатора пытаетесь отправлять?
 
Karputov Vladimir:
Вы случайно не из индикатора пытаетесь отправлять?
Случайно да... А что нельзя?
 
Nikita Solodko:
Случайно да... А что нельзя?
Нельзя из-за того, что в случае сетевых задержек по ftp индикатор может затормозить весь терминал. А вот из советника - пожалуйста.
 
Karputov Vladimir:
Нельзя из-за того, что в случае сетевых задержек по ftp индикатор может затормозить весь терминал. А вот из советника - пожалуйста.
Спасибо.
 

 Привет всем. Пишу свой первый советник и столкнулся с проблеммой,которую не могу никак победить.

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

 Сигнал на покупку-продажу должен подаваться,если предыдущий бар открывался вне канала "Envelopes",если выше канала,то продажа,если ниже-покупка.По факту ордера ставятся,когда советнику захочется.Может долго гулять внутри канала и вдруг начать покупать ордера,хотя все остальные условия соблюдаются,если сигнал на продажу-продает,на покупку-покупает.Как это исправить?

 И как заставить его покупать по одному ордеру на бар,а не все сразу разрешенные количество ордеров через каждую секунду? 

 
Nickolay72:

 Привет всем. Пишу свой первый советник и столкнулся с проблеммой,которую не могу никак победить.

 Сигнал на покупку-продажу должен подаваться,если предыдущий бар открывался вне канала "Envelopes",если выше канала,то продажа,если ниже-покупка.По факту ордера ставятся,когда советнику захочется.Может долго гулять внутри канала и вдруг начать покупать ордера,хотя все остальные условия соблюдаются,если сигнал на продажу-продает,на покупку-покупает.Как это исправить?

 И как заставить его покупать по одному ордеру на бар,а не все сразу разрешенные количество ордеров через каждую секунду? 

Доброго времени суток. Перед отправкой приказа проверяйте наличие уже открытых позиций, если таковые имеются не отправлять приказ на открытие иначе отправлять. Насколько я понял ваш код этим у вас занимается функция  CountTrades(), но кода ее вы не показываете. Так что проверяйте значения возвращаемые этой функцией.
 
 Количесто ордеров в принципе цель второстепенная,до вчера у меня открывалось по одному ордеру,и пока ордер есть,следующий не открывался.А как заставить советника открывать ордера согласно приказу-когда предыдущий бар открылся выше(ниже) канала?Сейчас большинство ордеров убыточные,потому что открываются не по условиям.
Файлы:
Zmey.mq4  5 kb
 
Nickolay72:
 Количесто ордеров в принципе цель второстепенная,до вчера у меня открывалось по одному ордеру,и пока ордер есть,следующий не открывался.А как заставить советника открывать ордера согласно приказу-когда предыдущий бар открылся выше(ниже) канала?Сейчас большинство ордеров убыточные,потому что открываются не по условиям.
Если Open бара номер 1 выше/ниже канала.
Причина обращения: