Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2187

 
Mikhail Zhitnev #:

Всем привет. Случайно обнаружил, что MQL4-функция  

не работает на виртуальном MT4-хостинге.  Это действительно так, или я что-то делаю неправильно?

ObjectGetValueByTime(...,time[shift],...)
 
DDFedor #:

 

  Не работает. Без установки свойств луча за пределами начальной и конечной точки прямой. Или необходимы дополнительные данные об условиях. 

 

Спасибо за инфу. Условия были простые - проверить пересечение цены и линии OBJ_TREND на текущем баре.  На обычном компе прекрасно работает.

 
Tretyakov Rostyslav #:

Эта похожая функция работает на виртуальном хостинге?

 
Mikhail Zhitnev #:

Эта похожая функция работает на виртуальном хостинге?

Не знаю, пробуйте)
 
DDFedor #:

   

  Ответ : использовать в переменной префиксы для каждого состояния ( окно, ТФ, символ , "что-то другое" ) , т.е. общая строка внутри кода будет одинаковая, но будет оперировать различными данными. 

Расскажите о Вашем опыте использования : 

- глобальных переменных   -  https://www.mql5.com/ru/docs/globals

- SQLite Database -  https://www.mql5.com/ru/docs/database  


Спасибо! Про префиксы буду изучать.

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

 
// 
// установить глобальную переменную для определенного периода и определенного номера окна 
string VeryNeedVar = "ItsPrefix_" + EnumToString(TF) + "_" + IntegerToString(ChartID()); // получить сборное имя переменной по периоду и номеру окна графика 
GlobalVariableSet(VeryNeedVar,123.456);
// получить значение глобальной переменной с определенным именем, зависящем от периода и номера подокна графика
string GetNeedVar = "ItsPrefix_" + EnumToString(TF) +  "_" + IntegerToString(ChartID()); // формирование строки имени глобальной переменной для получения значения 
double VarNomberTwo = GlobalVariableGet(GetNeedVar);
// как видно, строка, формирующая имя переменной одинакова ( должнa формироваться по единому условию )
// код - набросок для общего планирования , без проверок. 
// 
 
Valera Abramovich #:

Добрый день! Подскажите пожалуйста, как изменить советник чтобы он выставлял buy limit и sell limit, а не buy stop и sell stop.

В функции OrderSend() укажите OP_SELLLIMIT вместо OP_BUYSTOP и укажите OP_BUYLIMIT вместо OP_SELLSTOP. Если у каждого Вашего ордера стопприказы (СтопЛосс и ТейкПрофит) равны нулю, и при этом отложенные ордера устанавливаются достаточно далеко от текущей цены, то такой рецепт исправлений сработает. Если же стопприказы больше нуля, то нужно их реинициализировать, помня о том, что у всех Бай-ордеров тейк ставится выше цены открытия, а СтопЛосс - ниже. У Селл-ордеров - наоборот.

 
Vitaly Murlenko #:

А мне вот интересно, а существует ли способ, используя который можно отрисовать объект на графике, но "включить для него режим невидимки". Ну то есть, чтоб он стоял на положенном ему месте, но глазами был невидим? Просто как-то ранее это было не нужно, а вот теперь понадобилось... Например, пусть это будет линия тренда или горизонтальная линия. Изо-всех свойств объектов я нашёл только разрешение/запрет на отображение названия объекта в списке объектов. По-сути, мне без разницы, будет ли он в этом списке, или нет. Мне нужно, чтоб глазу человека он не был виден  на графике.

Я подумывал присвоить объекту цвет фона графика - но это не пройдёт, ибо мы не знаем цвет фона графика постороннего пользователя, а он может оказаться случайным.

Зачем мне это нужно? Я тут сделал человеку советника, а человек возмутился, что на графике присутствуют "лишние" линии. Дело в том, что можно обойтись без них, но это сильно усложняет код и отнимает как оперативную память, так и число рабочих тактов процессора. Вот я и подумал, а можно ли сделать их невидимыми?

Не прокатит?

clrNONE

Отсутствие цвета

-1

 
Vitaly Murlenko #:

В функции OrderSend() укажите OP_SELLLIMIT вместо OP_BUYSTOP и укажите OP_BUYLIMIT вместо OP_SELLSTOP. Если у каждого Вашего ордера стопприказы (СтопЛосс и ТейкПрофит) равны нулю и при этом отложенные ордера устанавливаются достаточно далеко от текущей цены, то такой рецепт исправлений сработает. Если же стопприказы больше нуля, то нужно их реинициализировать, помня о том, что у всех Бай-ордеров тейк ставится выше цены открытия, а СтопЛосс - ниже. У Селл-ордеров - наоборот.

попробовал. не работает. не выставляет ордера, даже с нулевыми стопприказами

 
Valera Abramovich #:

попробовал. не работает. не выставляет ордера, даже с нулевыми стопприказами

Надо еще SL и TP поменять местами
   if (b+TicketB==0)
   {
      price = NormalizeDouble(Ask+Step * Point,Digits);
      if (Stoploss>=STOPLEVEL && Stoploss!=0) TP = NormalizeDouble(price - Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) SL = NormalizeDouble(price + Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_SELLLIMIT,Lot,price,slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
   } 
   if (s+TicketS==0)
   {
      price=NormalizeDouble(Bid - Step * Point,Digits);
      if (Stoploss>=STOPLEVEL && Stoploss!=0) TP = NormalizeDouble(price + Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) SL = NormalizeDouble(price - Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_BUYLIMIT,Lot,price,slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
   } 
Смотрите всегда ошибки в журнале
Причина обращения: