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

 
MisterRight:
Очень хочется получить ответ на свой вопрос по поводу параметра begin в функции onCalculate
Или хотя бы увидеть код, в котором возникают такие ситуации, когда begin != 0.
Спасибо!

Статья 'Индикатор от индикатора в MQL5'. Для удобства рекомендую после открытия статьи в браузере выполнить 'Ctrl' + 'F' и ввести в поле поиска 'begin'. Теперь в статье будут подсвечены все вхождения слова 'begin':


Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
Понял, спасибо большое!)
Ctrl+F пользуюсь для поиска по встроенной справке, но не всегда получается найти.
 
Такой вопрос специалистам по mql. Как в эксперте меняются отметки закрытия позиций? Я хочу сделать так, чтобы на закрытии селлов была красная стрелочка влево, а у баев - синяя стрелочка влево. Я бы тогда сразу видел, что это не противоположное открытие, а именно закрытие. Ну, так было в МТ4 и горя не знал, хочется сделать также в МТ5. Заранее спасибо. 
 

Есть индикатор для скачивания новостей. Примерный код оттуда ниже. WebRequest возвращает 406. cookie указывать другой надо или в чем проблема может быть? Еще полгода назад всё работало.

   string cookie=NULL,headers;
   char post[],result[];     string TXT="";
   int res=-1;
//--- to work with the server, you must add the URL "https://www.google.com/finance"  
//--- the list of allowed URL (Main menu-> Tools-> Settings tab "Advisors"): 
   cookie="accept-encoding: deflate";
   string google_url="https://ec.forexprostools.com/?columns=exc_currency,exc_importance&importance=1,2,3&calType=week&timeZone=15&lang=1";
//--- 
   ResetLastError();
//--- download html-pages
   int timeout=500/*0*/; //--- timeout less than 1,000 (1 sec.) is insufficient at a low speed of the Internet
   int max_try=5;
   int n=0;
   while(res==-1)
     {
      res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
      ...
     }

Вот что приходит:

"<html><head><title>406 Not Acceptable</title></head><body><center><h1>406 Not Acceptable</h1></center><hr><center>nginx/1.16.1</center></body></html>" (length: 149)
Документация по MQL5: Сетевые функции / WebRequest
Документация по MQL5: Сетевые функции / WebRequest
  • www.mql5.com
WebRequest - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Всем доброго времени суток. Вопрос по работе функции WebRequest, при отправке POST запроса он не отправляет массив с данными. На стороне сервера получаю " <WSGIRequest: POST '/'> ". Ниже код:

string headers=NULL;
   char   data[],result[];
   string result_headers;
   string url="http://127.0.0.1:8000";

   ResetLastError();
   string params = "email=app@exemple.com&account=56781234";
   StringToCharArray(params, data, 0, StringLen(params));
   //ArrayResize(data,StringToCharArray(params,data,0,WHOLE_ARRAY,CP_UTF8));
   Print("data: ", CharArrayToString(data));
   int res=WebRequest("GET", url, headers, 0, data, result, result_headers);

   if(res!=200)
     {
      Print("Ошибка передачи файла на сервер #"+(string)res+", LastError="+(string)GetLastError());
     }
   else
     {
      Print(ArraySize(result));
     }
 
Alexander Mikryukov:

Всем доброго времени суток. Вопрос по работе функции WebRequest, при отправке POST запроса он не отправляет массив с данными. На стороне сервера получаю " <WSGIRequest: POST '/'> ". Ниже код:

Так у вас вроде GET? Вот я json отправляю (MQL5). Всё работает.

   char data[]; 
   ArrayResize(data, StringToCharArray(jv.Serialize(), data/*, 0, WHOLE_ARRAY*/)-1);
   
   
   char res_data[];
   string res_headers=NULL;
   int r=WebRequest("POST",m_uri, "Content-Type: application/json\r\n", 5000, data, res_data, res_headers);
   Print(__FUNCTION__+": web server response code: ",(string)r);
   if(r!=-1)
     {
      Print(__FUNCTION__+": JSON message sent: "+CharArrayToString(data));
      if(save_to_file)
        {
         string file_name=file_name_prefix+"_"+m_symbol+"_"+(string)m_magic_number+".csv";
         int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE|FILE_CSV);
         if(file_handle!=INVALID_HANDLE)
           {
            FileSeek(file_handle,0,SEEK_END);
            FileWriteString(file_handle,"\n"+CharArrayToString(data));
            FileClose(file_handle);
           }
        }
     }

p.s. Что за дурацкое выражение "доброго времени суток"? Вот, например, статья по этому вопросу. Сорри за флуд :)

 

В справке:

datetime  iTime( 
   const string        symbol,          // символ 
   ENUM_TIMEFRAMES     timeframe,       // период 
   int                 shift            // сдвиг 
   );
В этом коде shift воспринимается как КОЛИЧЕСТВО БАРОВ относительно текущего момента.
Тут же в примере такое:
 int bar_index=iBarShift(symbol,tf,time,exact); 
   
 datetime bar_time=iTime(symbol,tf,bar_index); 
В справке указано, что iBarShift возвращает ИНДЕКС бара.

По моим представлениям, количество баров и индекс бара - это разные параметры.

Я бы ещё это понял, если бы нумерация баров начиналась с текущего мометнта (текущий = 0).
Но OnCalculate() выдаёт порядковый номер бара от начала истории окна.

Объясните, пожалуйста, что я не так понял?
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Выяснил сам.

В справке по  iBarShift написана ересь.
Функция возвращает не индекс бара в понимании OnCalculate(),
а смещение бара, т.е. shift.

За такое во времена инквизиции сожгли бы на костре:)
Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
  • www.mql5.com
iBarShift - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
[Удален]  
User_mt5:
Выяснил сам.

В справке по  iBarShift написана ересь.
Функция возвращает не индекс бара в понимании OnCalculate(),
а смещение бара, т.е. shift.

За такое во времена инквизиции сожгли бы на костре:)

Я совсем не спец во всём этом.... Но на костёр - самый первый кандидат.. это ВЫ. Прежде, чем написать "такую ересь", вам следовало бы самому ознакомиться с документацией!..

П.С. И разобраться что, куда и как...
 

 Здроровья всем!

 Вопрос простой и наивный. Я написал советника  на Mql5. Хочу по этому алгоритму поработать с криптовалютами на бирже например BitMex. Никак не могу понять как переписать советника для этой биржи на другом языке, понятно что лучше на Си, так как Mql5 вроде как подобен Си.