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

 
ANDREY:

Спасибо за ценную информацию

Еще подскажите пожалуйста, а как запомнить в переменную какое по ходу выражение оказалось истинным? А точнее -  вычисленный в функции минимум к свече какого таймфрейма относится? Как сохранить в переменную индентификатор этого ТФ?
Спасибо

Просто объявите bool переменные

bool variant_H4 = Bid-iLow( NULL ,PERIOD_H4,1) >= 0.0030,
     variant_H1 = Bid-iLow(NULL ,PERIOD_H1,1) >= 0.0030,
     variant_M30 = Bid-iLow(NULL ,PERIOD_M30,1) >= 0.0030;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov:

Просто объявите bool переменные

Спасибо за полезную информацию.

А подскажите еще пожалуйста , как сохранить в желтую переменную голубое значение с точностью до 5 знака, если тестирование происходит на минутном графике

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}

Спасибо.

 
Доброго дня! Подскажите, как в mql4 привязать текст к линии, чтобы при перемещении последней надпись также смещалась, как на скринах. Знаю, что есть два способа привязки объекта: в пикселях к углу экрана и в координатах время/цена. В первом варианте получу статичный текст, да и во втором не совсем, то что хочу. С координатой цены (вертикальной привязкой) понятно - беру цену линии и добавляю к ней пару _Point, чтобы текст был чуть выше линии. А вот как быть со временем? К последнему бару привязывать не хочу ибо разное смещение графика будет тянуть за собой надпись вправо-влево. Здесь бы сделать жёсткую горизонтальную привязку к правому краю экрана, но не пойму как.
 
Oleksandr Nozemtsev:
Доброго дня! Подскажите, как в mql4 привязать текст к линии, чтобы при перемещении последней надпись также смещалась, как на скринах. Знаю, что есть два способа привязки объекта: в пикселях к углу экрана и в координатах время/цена. В первом варианте получу статичный текст, да и во втором не совсем, то что хочу. С координатой цены (вертикальной привязкой) понятно - беру цену линии и добавляю к ней пару _Point, чтобы текст был чуть выше линии. А вот как быть со временем? К последнему бару привязывать не хочу ибо разное смещение графика будет тянуть за собой надпись вправо-влево. Здесь бы сделать жёсткую горизонтальную привязку к правому краю экрана, но не пойму как.
Линии сам рисуешь или индикатор?
 
MakarFX:
Линии сам рисуешь или индикатор?

Линия создаётся индикатором при загрузке. Текст нужен, чтобы информацию об этом уровне показывать сразу над линией, а не выводить в Алерт (Алерт работает).

 
Oleksandr Nozemtsev:

Линия создаётся индикатором при загрузке. Текст нужен, чтобы информацию об этом уровне показывать сразу над линией, а не выводить в Алерт (Алерт работает).

Выложи код создания линий
 
MakarFX:
Выложи код создания линий

int OnInit()

  {

//Создадим линию "name_line", если её пока нет

   if(ObjectFind(0, name_line) == -1)

     {

      //Если цена не задана, то установим ее на уровне текущей цены Ask

      if(!price_line)

         price_line = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

      //Сбросим значение ошибки

      ResetLastError();

      //Создаём линию

      if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

         Print("Линия Line. Ошибка ", GetLastError());

      //

      ObjectSet(name_line, OBJPROP_COLOR, color_line);         //Цвет линии

      ObjectSet(name_line, OBJPROP_STYLE, style_line);          //Стиль линии

      ObjectSet(name_line, OBJPROP_WIDTH, width_line);        //Толщина линии

      ObjectSet(name_line, OBJPROP_BACK, back_line);           //Передний/задний план

      ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//Доступность объекта для клика мышью.

      ObjectSet(name_line, OBJPROP_SELECTED, selection_line);  //Выделенность объекта. О - не выделен при создании

     }

   return(INIT_SUCCEEDED);

  }

 
Oleksandr Nozemtsev:

Лови

//+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                            https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link      "https://www.mql5.com/ru/users/makarfx"
#property version   "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ObjectsDeleteAll(0,"My_");
   //--- indicator buffers mapping
   if(ObjectFind(0,"My_BuyLine")!=0)
     {
      HLineCreate(0,"My_BuyLine",0,Ask+50*Point,clrTeal,2,1,false,true,false);
     }
   if(ObjectFind(0,"My_SellLine")!=0)
     {
      HLineCreate(0,"My_SellLine",0,Bid-50*Point,clrCrimson,2,1,false,true,false);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"My_");
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   DoTime = TimeCurrent()+(Period()*60*7);
   if(ObjectFind(0,"My_BuyLine")==0)
     {
      buy = NormalizeDouble(ObjectGet("My_BuyLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_BuyText",0,DoTime,buy+5*Point,"BuyText","Arial",10,clrTeal,0,0,false,false,false);     
     }
   if(ObjectFind(0,"My_SellLine")==0)
     {
      sell = NormalizeDouble(ObjectGet("My_SellLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_SellText",0,DoTime,sell-5*Point,"SellText","Arial",10,clrCrimson,0,0,false,false,false);     
     }
   if(buy!=ObjectGet("My_BuyLine",OBJPROP_PRICE1)||sell!=ObjectGet("My_SellLine",OBJPROP_PRICE1))
     {
      ObjectMove(0,"My_BuyText",0,DoTime,buy+5*Point);
      ObjectMove(0,"My_SellText",0,DoTime,sell-5*Point);
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
      { 
      Print(__FUNCTION__, ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR, clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE, style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK, back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN, hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER, z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text(const long              chart_ID=0,               // ID графика 
                 const string            name="Text",              // имя объекта 
                 const int               sub_window=0,             // номер подокна 
                 datetime                time=0,                   // время точки привязки 
                 double                  price=0,                  // цена точки привязки 
                 const string            text="Text",              // сам текст 
                 const string            font="Arial",             // шрифт 
                 const int               font_size=10,             // размер шрифта 
                 const color             clr=clrRed,               // цвет 
                 const double            angle=0.0,                // наклон текста 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                 const bool              back=false,               // на заднем плане 
                 const bool              selection=false,          // выделить для перемещений 
                 const bool              hidden=true,              // скрыт в списке объектов 
                 const long              z_order=0)                // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим объект "Текст" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
      { 
      Print(__FUNCTION__,": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+------------------------------------------------------------------+
 
MakarFX:

Лови

Ого сколько! Я думал дело в паре строчек кода) Буду осмысливать. Спасибо!

 
Alexey Viktorov:

Просто объявите bool переменные

А подскажите еще пожалуйста , как сохранить в желтую переменную голубое значение с точностью до 5 знака, если тестирование происходит на минутном графике

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}
Спасибо
Причина обращения: