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

 
посмотрите что пишет реткод после отправки ордера
 
Fast235 #:
посмотрите что пишет реткод после отправки ордера

Спасибо. 

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт

Значит проблемы с брокером.

 

Приветствую, прошу сильно не пинать)
Есть советник. В нем хочу реализовать функцию открытия позиции, если на нескольких валютных парах, бар с индексом 1, имеет одно и тоже направление(бычье или медвежье).
Пытаюсь это реализовать через iclose и iopen.

Все происходит в bool-ой функцие.
Хотел реализовать конструкцию следующего вида:
if ((iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))&&(iOpen("EURGBP", PERIOD_CURRENT, 1)>iClose("EURGBP", PERIOD_CURRENT, 1))&&(iOpen("EURJPY", PERIOD_CURRENT, 1)>iClose("EURJPY", PERIOD_CURRENT, 1)))
return false;
else if ((iOpen(NULL, PERIOD_CURRENT, 1)<iClose(NULL, PERIOD_CURRENT, 1))&&(iOpen("EURGBP", PERIOD_CURRENT, 1)<iClose("EURGBP", PERIOD_CURRENT, 1))&&(iOpen("EURJPY", PERIOD_CURRENT, 1)<iClose("EURJPY", PERIOD_CURRENT, 1)))
return false;

Но ничего не получилось, и открываются позиции при любой комбинации баров с индексом 1.


Но работает следующая конструкция.

if(iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))
return false;
  if(iOpen("EURGBP", PERIOD_CURRENT, 1)>iClose("EURGBP", PERIOD_CURRENT, 1))
 return false;
     if(iOpen("EURJPY", PERIOD_CURRENT, 1)>iClose("EURJPY", PERIOD_CURRENT, 1))
    return false;

Тут советник правильно находит комбинацию из баров. Но таким способом можно искать либо комбинации из бычьих баров, либо медвежьих.


Ибо код такого вида не работает.
if(iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))
{

  if(iOpen("EURGBP", PERIOD_CURRENT, 1)>iClose("EURGBP", PERIOD_CURRENT, 1))
 return false;
     if(iOpen("EURJPY", PERIOD_CURRENT, 1)>iClose("EURJPY", PERIOD_CURRENT, 1))
    return false;
}

else if(iOpen(NULL, PERIOD_CURRENT, 1)<iClose(NULL, PERIOD_CURRENT, 1))
{

  if(iOpen("EURGBP", PERIOD_CURRENT, 1)<iClose("EURGBP", PERIOD_CURRENT, 1))
 return false;
     if(iOpen("EURJPY", PERIOD_CURRENT, 1)<iClose("EURJPY", PERIOD_CURRENT, 1))
    return false;
}

И такого тоже)
if(iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))
{
if(iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))
 return false;
  if(iOpen("EURGBP", PERIOD_CURRENT, 1)>iClose("EURGBP", PERIOD_CURRENT, 1))
 return false;
     if(iOpen("EURJPY", PERIOD_CURRENT, 1)>iClose("EURJPY", PERIOD_CURRENT, 1))
    return false;
}

else if(iOpen(NULL, PERIOD_CURRENT, 1)<iClose(NULL, PERIOD_CURRENT, 1))
{
if(iOpen(NULL, PERIOD_CURRENT, 1)<iClose(NULL, PERIOD_CURRENT, 1))
 return false;
  if(iOpen("EURGBP", PERIOD_CURRENT, 1)<iClose("EURGBP", PERIOD_CURRENT, 1))
   return false;
     if(iOpen("EURJPY", PERIOD_CURRENT, 1)<iClose("EURJPY", PERIOD_CURRENT, 1))
    return false;
}


Так как все-таки правильно одновременно  искать комбинации медвежьих и бычьих баров? Еще раз прошу сильно не бить тапками)

 
Scarick #:

Приветствую, прошу сильно не пинать)
Есть советник. В нем хочу реализовать функцию открытия позиции, если на нескольких валютных парах, бар с индексом 1, имеет одно и тоже направление(бычье или медвежье).
Пытаюсь это реализовать через iclose и iopen.

if ((iOpen(NULL, PERIOD_CURRENT, 1)>iClose(NULL, PERIOD_CURRENT, 1))&&(iOpen("EURGBP", PERIOD_CURRENT, 1)>iClose("EURGBP", PERIOD_CURRENT, 1))&&(iOpen("EURJPY", PERIOD_CURRENT, 1)>iClose("EURJPY", PERIOD_CURRENT, 1)))
return false;
else if ((iOpen(NULL, PERIOD_CURRENT, 1)<iClose(NULL, PERIOD_CURRENT, 1))&&(iOpen("EURGBP", PERIOD_CURRENT, 1)<iClose("EURGBP", PERIOD_CURRENT, 1))&&(iOpen("EURJPY", PERIOD_CURRENT, 1)<iClose("EURJPY", PERIOD_CURRENT, 1)))
return false;

Так как все-таки правильно одновременно  искать комбинации медвежьих и бычьих баров? Еще раз прошу сильно не бить тапками)

Работайте через CopyRates и обязательно контролируйте сколько заказали и сколько получили. Вот пример:

   MqlRates rates_current[],rates_eurgbp[],rates_eurjpy[];
   ArraySetAsSeries(rates_current,true);
   ArraySetAsSeries(rates_eurgbp,true);
   ArraySetAsSeries(rates_eurjpy,true);
   int start_pos=0,count=3;
   if(CopyRates(Symbol(),Period(),start_pos,count,rates_current)!=count)
      return;
   if(CopyRates("EURGBP",Period(),start_pos,count,rates_eurgbp)!=count)
      return;
   if(CopyRates("EURJPY",Period(),start_pos,count,rates_eurjpy)!=count)
      return;
//---
   bool signal_buy=false,signal_sell=false;
   if((rates_current[1].open>rates_current[1].close) && (rates_eurgbp[1].open>rates_eurgbp[1].close) && (rates_eurjpy[1].open>rates_eurjpy[1].close))
     {
      signal_buy=true;
      signal_sell=false;
     }
   else
     {
      if((rates_current[1].open<rates_current[1].close) && (rates_eurgbp[1].open<rates_eurgbp[1].close) && (rates_eurjpy[1].open<rates_eurjpy[1].close))
        {
         signal_buy=false;
         signal_sell=true;
        }
     }
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Всем привет!

Ситуация.

Советник написан, допустим, на мувингах. Когда заканчиваешь тестировать его в тестере, использованные мувинги (с использованными параметрами) появляются в окне. Это ок.

Вопрос.

А когда заливаешь тот же советник на маркет, и пользователь скачивает демо - у него по завершению теста, так же они появятся? Или у mql есть какая-то политика конфиденциальности в этом плане?


Конечно, можно самому заморочиться и проверить. Но те кто, заливал продукты, поймут, что лучше просто спросить)  

 
Anton Iudakov #:

Всем привет!

Ситуация.

Советник написан, допустим, на мувингах. Когда заканчиваешь тестировать его в тестере, использованные мувинги (с использованными параметрами) появляются в окне. Это ок.

Вопрос.

А когда заливаешь тот же советник на маркет, и пользователь скачивает демо - у него по завершению теста, так же они появятся? Или у mql есть какая-то политика конфиденциальности в этом плане?


Спросить конечно проще, но далеко не каждый который заливал в маркет советники проверял после скачивания.

А по сути, какая разница откуда получен файл советника? Он одинаково будет работать как у разработчика, так и зашифрованный в маркете…

 
Anton Iudakov #:

Всем привет!

Ситуация.

Советник написан, допустим, на мувингах. Когда заканчиваешь тестировать его в тестере, использованные мувинги (с использованными параметрами) появляются в окне. Это ок.

Вопрос.

А когда заливаешь тот же советник на маркет, и пользователь скачивает демо - у него по завершению теста, так же они появятся? Или у mql есть какая-то политика конфиденциальности в этом плане?


TesterHideIndicators
 
Подскажите пожалуйста, как после тестирования советника в MQL5 выводить в сплывающем окне при наведении мыши на стрелочках любую свою статистику? 
Как протестировать торгового робота перед покупкой
Как протестировать торгового робота перед покупкой
  • www.mql5.com
Покупка торгового робота в MQL5 Маркете имеет одно большое преимущество перед всеми другими подобными предложениями - вы можете устроить комплексную проверку предлагаемой автоматической системы прямо в терминале MetaTrader 5. Каждый советник перед покупкой можно и нужно тщательно прогнать во всех неблагоприятных режимах во встроенном тестере торговых стратегий, чтобы получить о нем максимально полное представление.
 

Помогите подправить индикатор. Он рисует шаг/сетку  цены от указанного значения. Проблема в том, что когда я его удаляю, на графике остаются линии. Также я не могу на график добавить второй такой же индикатор. В общем, как сделать так, чтобы он удалялся полностью с графика и можно такой же индикатор кинуть на график с другими значениями. 

#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property indicator_chart_window

//---- для расчёта и отрисовки индикатора использовано ноль буферов
#property indicator_buffers 0
//---- использовано всего ноль графических построений
#property indicator_plots   0
//--- входные параметры 
input int count = 500;      //количество линий вверх вниз от цены
input int step  = 100;     //шаг линий 
input double pr = 1.1;  //цена от которой пляшем
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   
  }
//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLine(const string name="HLine",double price=0)
  {
//--- создадим горизонтальную линию 
   if(!ObjectCreate(0,name,OBJ_HLINE,0,0,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrDodgerBlue);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
   return(true);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   double price=pr;
//--- создадим горизонтальную линию 
   for(int i=0;i<=count;i++)
     {
      HLine("HLine"+(string)i,price+step*i*_Point);
      HLine("HLine"+(string)(i+count+1),price-step*i*_Point);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


 
Green handsome #:

Помогите подправить индикатор. Он рисует шаг/сетку  цены от указанного значения. Проблема в том, что когда я его удаляю, на графике остаются линии. Также я не могу на график добавить второй такой же индикатор. В общем, как сделать так, чтобы он удалялся полностью с графика и можно такой же индикатор кинуть на график с другими значениями. 

В OnDeinit нужно делать ObjectsDeleteAll - удалять по префиксу (в Вашем случае префикс - это "HLine")

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   );

Документация по MQL5: Графические объекты / ObjectsDeleteAll
Документация по MQL5: Графические объекты / ObjectsDeleteAll
  • www.mql5.com
ObjectsDeleteAll - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: