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

 
Алексей КоКоКо:

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

Приветствую, обязательные параметры для текста это индекс окна, координатная привязка и собственно текст, остальные опциональные.

Нужно иметь в виду что есть два типа объектов: OBJ_LABEL и OBJ_TEXT, первый привязывается к пикселям окна, а второй к времени и цене на графике.

Допустим нужна текстовая метка в привязке к пикселям, тогда делаем так:

   ObjectCreate(0,name,OBJ_LABEL,0,0,0); // создаём объект в текущем (нулевом окне)
   ObjectSetString(0,name,OBJPROP_TEXT,text); // указываем какой текст должен в нём отображаться
   ObjectSetString(0,name,OBJPROP_FONT,fontname); // назначаем шрифт например Verdana или Tahoma
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize); // назначаем размер шрифта
   ObjectSetInteger(0,name,OBJPROP_COLOR, text_color); // назначаем цвет шрифта
   ObjectSetInteger(0,name,OBJPROP_CORNER,text_corner); // указываем от какого угла окна отсчитывать пиксели
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,text_anchor); // указываем как должен быть выровнен текст по центру или какому-то краю
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XOFFSET); // указываем координату по горизонтали
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YOFFSET); // указываем координату по вертикали
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // указываем можно ли выделять и двигать метку мышкой или нельзя

это почти минимальный код который рисует текстовую метку

для объекта OBJ_TEXT тоже самое только нужно задавать свойства цены и времени:

   ObjectSetDouble(0,name,OBJPROP_PRICE,0,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);



text_corner должен быть одним из значений-констант:

Идентификатор

Описание

CORNER_LEFT_UPPER

Центр координат в левом верхнем углу графика

CORNER_LEFT_LOWER

Центр координат в левом нижнем углу графика

CORNER_RIGHT_LOWER

Центр координат в правом нижнем углу графика

CORNER_RIGHT_UPPER

Центр координат в правом верхнем углу графика


подробнее тут: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner#enum_base_corner




text_corner должен быть одним из значений-констант:

Идентификатор

Описание

ANCHOR_LEFT_UPPER

Точка привязки в левом верхнем углу

ANCHOR_LEFT

Точка привязки слева по центру

ANCHOR_LEFT_LOWER

Точка привязки в левом нижнем углу

ANCHOR_LOWER

Точка привязки снизу по центру

ANCHOR_RIGHT_LOWER

Точка привязки в правом нижнем углу

ANCHOR_RIGHT

Точка привязки справа по центру

ANCHOR_RIGHT_UPPER

Точка привязки в правом верхнем углу

ANCHOR_UPPER

Точка привязки сверху по центру

ANCHOR_CENTER

Точка привязки строго по центру объекта


подробнее тут: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner



еще можно подключить стандартную библиотеку  #include <ChartObjects\ChartObject.mqh> и использовать её классы но это только усложнять себе жизнь как мне кажется

 
transcendreamer:

Приветствую, обязательные параметры для текста это индекс окна, координатная привязка и собственно текст, остальные опциональные.

Нужно иметь в виду что есть два типа объектов: OBJ_LABEL и OBJ_TEXT, первый привязывается к пикселям окна, а второй к времени и цене на графике.

Допустим нужна текстовая метка в привязке к пикселям, тогда делаем так:

это почти минимальный код который рисует текстовую метку

для объекта OBJ_TEXT тоже самое только нужно задавать свойства цены и времени:


Дай Бог тебе здоровья )Дело то не только в тексте, но и во многих вещах , даже буферы индикатора. Чего в телеге удалился?)

 
Алексей КоКоКо:

Дай Бог тебе здоровья )Дело то не только в тексте, но и во многих вещах , даже буферы индикатора. Чего в телеге удалился?)

Если что спрашивай, можешь в личных сообщениях, а из телеги удалился как обычно из-за приступа паранойи чтобы меня не вычислили чексисты 😀

 
Artyom Trishkin:

А правильный вариант ну очень простой...

И какой? Чего сразу не пишите?

 
Привет всем, вставил в один EA " starhour и stophour" Для того чтобы ордера открывались в определённое время,  но не додумал что ордер который был открыт например в 22:00 не закроется в stophour(23:00) 
Так как до этого не было сигнала индикатора на закрытия позиции а после 23:00  ему то вопще запрещено принимать какие то решения. 

Подскажите пожалуйста, как зделать чтобы ЕА можно было после stophour (23:00) закрывать открытые позиции. 
Или так-же просто закрыл все позиции в 23:00, чтобы не держать их всю ночь. 


Спасибо заранее
 
Eugen8519:
Привет всем, вставил в один EA " starhour и stophour" Для того чтобы ордера открывались в определённое время,  но не додумал что ордер который был открыт например в 22:00 не закроется в stophour(23:00) 
Так как до этого не было сигнала индикатора на закрытия позиции а после 23:00  ему то вопще запрещено принимать какие то решения. 

Подскажите пожалуйста, как зделать чтобы ЕА можно было после stophour (23:00) закрывать открытые позиции. 
Или так-же просто закрыл все позиции в 23:00, чтобы не держать их всю ночь. 


Спасибо заранее

поставить " starhour и stophour"  только на открытие ордеров

 
MakarFX:

поставить " starhour и stophour"  только на открытие ордеров

В том то и вся проблема, он и только открывает и закрывает ордера starthour->stophour
А открытые ордера не закрывает после stophour

Так как после stophour  нельзя торговать



Стоят глобальные параметры

bool           UseTimeLimit = true;
int            startHour    = 15;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;



 И в OnTick

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
 
Eugen8519:
В том то и вся проблема, он и только открывает и закрывает ордера starthour->stophour
А открытые ордера не закрывает после stophour
Покажи функцию закрытия ордеров
 
Eugen8519:
В том то и вся проблема, он и только открывает и закрывает ордера starthour->stophour
А открытые ордера не закрывает после stophour

примерно так

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
....
if(YesStop==false)
  {
   условие для открытия ордеров
  }
 
MakarFX:

примерно так

Вот так закрывает ордера



(EMA0[m_bar_current]<WMA0[m_bar_current] && EMA0[m_bar_current+1]>WMA0[m_bar_current+1]) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
//if(color_buffer[m_bar_current+1]<color_buffer[m_bar_current]) //Sell
   if(EMA0[m_bar_current]>WMA0[m_bar_current] && EMA0[m_bar_current+1]<WMA0[m_bar_current+1]) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }


void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }
Причина обращения: