Новая бета-версия MetaTrader 4 Client Terminal build 660: виртуальный хостинг, web-запросы, работа с сигналами из MQL-программ и стакан цен - страница 6

 

Правильно понимаю, что стакан цен помогает только быстро выставлять отложенные ордера?

Данных о денежных объемах в стакане нет.  

(Кстати, при нажатии на ближайшую "яркую" стрелочку ордер не всегда выставляется) 2014.06.25 23:44:10.770 '2604079': order sell limit 1.00 EURUSD opening at 1.36305 failed [Invalid S/L or T/P]

 

И еще интересно, по какому принципу будет выделяться виртуальный сервер.

У каждого советника свои запросы. Одно дело, когда советник анализирует две машки и стохастик, а что если в советнике используются нейронные сети требующие шустрый процессор, и вся информация о работе  будет сохранятся в файлах  /files/ объем которых будет расти по 10 гб каждый день.  Какие лимиты у сервера?


 
dr0:

Правильно понимаю, что стакан цен помогает только быстро выставлять отложенные ордера?

Данных о денежных объемах в стакане нет.  

Правильно.

 

dr0:

И еще интересно, по какому принципу будет выделяться виртуальный сервер.

У каждого советника свои запросы. Одно дело, когда советник анализирует две машки и стохастик, а что если в советнике используются нейронные сети требующие шустрый процессор, и вся информация о работе  будет сохранятся в файлах  /files/ объем которых будет расти по 10 гб каждый день.  Какие лимиты у сервера?

Вряд ли будут озвучены какие-то характеристики, на которые можно рассчитывать, это повод для претензий.

Кто-то из MQ уже отвечал, что "ресурсов хватит, но без фанатизма". 10 Гб в день никто терпеть не будет, также как и постоянную загрузку процессора на 50%.

 
В Функции OnCalculate(), которая вызывается в пользовательском индикаторе, есть параметр
const int prev_calculated, // обработано баров на предыдущем вызове

почему-то этот параметр не работает при установке индикатора на график, открытый автономно. Он всегда равен нулю. А индикатор пересчитывает ВСЕ бары на КАЖДОМ тике.

"Лечится" этот недостаток очень просто, надо добавить одну переменную (counted_bars), как в "старом" MQL4, и применять ее вместо параметра prev_calculated. А при выходе запоминать, чему равен rates_total.
int counted_bars=0;

//+------------------------------------------------------------------+
//| 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[])
{
// prev_calculated: - при запуске = 0,
// далее, на всех тиках равен предыдущему значению rates_total

        ***

        counted_bars = rates_total;
//--- return value of prev_calculated for next call
        return(rates_total);
} // end OnCalculate()

Разработчики, может исправите недостаток?
 
prorab:
В Функции OnCalculate(), которая вызывается в пользовательском индикаторе, есть параметр

почему-то этот параметр не работает при установке индикатора на график, открытый автономно. Он всегда равен нулю. А индикатор пересчитывает ВСЕ бары на КАЖДОМ тике.

"Лечится" этот недостаток очень просто, надо добавить одну переменную (counted_bars), как в "старом" MQL4, и применять ее вместо параметра prev_calculated. А при выходе запоминать, чему равен rates_total.

Разработчики, может исправите недостаток?

Нет.

Автономный график обновляется всегда каждый раз заново и неизвестно, какие данные у него были изменены. Поэтому prev_counted для автономного графика всегда будет 0

Вам придётся решать проблему самостоятельно.

 
Подскажите пожалуйста где можно скачать последнюю бета версию ?
 
Rosh:

Вызовы WebRequest() запрещены в индикаторах.В справку добавим про это.


Кстати, ваш пример возвратил ошибку 4060

4060

ERR_FUNCTION_NOT_CONFIRMED

Функция не разрешена


Всё понял. Только скажите исходя из каких соображений эта функция запрещена в индикаторах?
 
stringo:

Нет.

Автономный график обновляется всегда каждый раз заново и неизвестно, какие данные у него были изменены. Поэтому prev_counted для автономного графика всегда будет 0

Вам придётся решать проблему самостоятельно.

Не согласен!

В справке указано:

"Необходимо отметить связь между значением, возвращаемым функцией OnCalculate() и вторым входным параметром prev_calculated. 
Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. 
Это позволяет реализовать экономные алгоритмы расчета пользовательского индикатора с тем, чтобы избежать повторных расчетов для тех баров, 
которые не изменились с предыдущего запуска этой функции. 

Для этого обычно достаточно вернуть значение параметра rates_total, которое содержит количество баров при текущем вызове функции. 
Если с момента последнего вызова функции OnCalculate() ценовые данные были изменены (подкачана более глубокая история или были заполнены пропуски истории), 
то значение входного параметра prev_calculated будет установлено в нулевое значение самим терминалом. 

Примечание: если функция OnCalculate возвращает нулевое значение, то в окне DataWindow клиентского терминала значения индикатора не показываются.

Для лучшего понимания будет полезно запустить индикатор, код которого приложен ниже.
"

... это все, других уточнений нет. На автономные даже намека нет.

Следовательно, в графиках открываемых автономно параметр prev_calculated также должен содержать "значение, которое вернула функция OnCalculate() на предыдущем вызове".
Поскольку это не так, то значит имеет место обычный БАГ. Или недокументированная осбенность (ФИШКА).

Ну, а решать какие данные у графика, открытого автономно были изменены, предоставьте мне.  

Если будет нужно, я сам способен обнулить этот параметр.

 

В visual mode ObjectCreate возвращает ошибку 4202 (Объект не существует).

 

bool objectCreated;

void OnTick()
{
   objectCreated = ObjectCreate(ChartID(), "obj23423423", OBJ_ARROW_THUMB_UP, 0, Time[0], Ask);
   
   if (!objectCreated)
      Print("Error #",GetLastError());
}
 

Как часто можно обращаться к встроенным функциям? Т.е. есть ли вообще какие-то ограничения?

Например

  acbalance = AccountBalance();
  acequity  = AccountEquity();

 Далее вывод в Comment() переменных acbalance и acequity

Если вся эта конструкция работает в OnTick(), то всё нормально. А если в OnTimer(), то значения эквити отражается неверно. Значение близкое, но неверное. Разумеется, при наличии открытых позиций. И если посмотреть в терминале, то значения эквити телепаются, а значения эквити в комменте заморожены. В OnInit() таймер включён: EventSetMillisecondTimer(500);

 

prorab:


... это все, других уточнений нет. На автономные даже намека нет.

Следовательно, в графиках открываемых автономно параметр prev_calculated также должен содержать "значение, которое вернула функция OnCalculate() на предыдущем вызове". Поскольку это не так, то значит имеет место обычный БАГ. Или недокументированная осбенность (ФИШКА).

Ну, а решать какие данные у графика, открытого автономно были изменены, предоставьте мне.  

Если будет нужно, я сам способен обнулить этот параметр.



Отключим автономные графики? Запросто

Повторяю. У автономных графиков нет функции добавления данных. Только полное обновление. Это не баг. Это реальность.

Решать Вам. Полностью согласен

Железобетонно. Как раз об этом я и говорил: "Вам придётся решать проблему самостоятельно"