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

 
такой вопрос если мой советник стоит на графике к примеру фунтбакс и я хочу что бы он видел горизонтальную линию с графика евробакса такая фишка получается ни катит ?
 
Aleksandr Egorov:
такой вопрос если мой советник стоит на графике к примеру фунтбакс и я хочу что бы он видел горизонтальную линию с графика евробакса такая фишка получается ни катит ?

Обратите внимание на первый параметр функции

string  ObjectName( 
   long  chart_id,           // идентификатор графика 
   int   pos,                // номер в списке объектов 
   int   sub_window=-1,      // номер окна 
   int   type=-1             // тип объекта 
   );

он присутствует во всех функциях работы с графическими объектами.

Используя правильный идентификатор без затруднений получаете свойства объекта с любого графика.

Документация по MQL5: Графические объекты / ObjectName
Документация по MQL5: Графические объекты / ObjectName
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
 
ну long это м5 и тд 0 текущий график, а стринг сумбол как? нужно что бы на фунте с графика евро може чето не понимаю
 
Aleksandr Egorov:
ну long это м5 и тд 0 текущий график, а стринг сумбол как? нужно что бы на фунте с графика евро може чето не понимаю

Нет, никаких таймреймов - нужен идентификатор графика: ChartID

ОДин из вариантов: на графике на котором нанесена линия запустить скрипт, который распечатает ChartID, дальше уже можно обращаться к свойству линии из другого графика. Например, если это горизонтальная линия, то через  ObjectGetDouble

 
Vladimir Karputov:

Нет, никаких таймреймов - нужен идентификатор графика: ChartID

ОДин из вариантов: на графике на котором нанесена линия запустить скрипт, который распечатает ChartID, дальше уже можно обращаться к свойству линии из другого графика. Например, если это горизонтальная линия, то через  ObjectGetDoublспасибо

спасибо

 
Aleksandr Egorov:

спасибо

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

 
Aleksandr Egorov:

спасибо

Вариант номер #2: задаём имя, тип объекта и в каком окне его искать ("0" - в главном окне). Поиск производится в OnInit и если объект найден - сохраняем идентификатор графика в переменную m_obj_chart_id.

//+------------------------------------------------------------------+
//|                                    Object from another chart.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input string      InpObjName     = "Object Name";  // Object: Name
input ENUM_OBJECT InpObjType     = OBJ_HLINE;      // Object: Type
input int         InpObjSubWindow= 0;              // Object: Window Index
//---
long     m_obj_chart_id=-1;   // Object ChartID
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//--- variables for chart ID
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   Print("ChartFirst =",ChartSymbol(prevChart)," ID =",prevChart);
   while(i<limit)// We have certainly not more than 100 open charts
     {
      currChart=ChartNext(prevChart); // Get the new chart ID by using the previous chart ID
      if(currChart<0)
         break;          // Have reached the end of the chart list
      int total=ObjectsTotal(currChart,InpObjSubWindow,InpObjType);
      for(int j=0; j<total; j++)
         if(ObjectName(currChart,j,InpObjSubWindow,InpObjType)==InpObjName)
           {
            m_obj_chart_id=currChart;
            break;
           }
      prevChart=currChart;// let's save the current chart ID for the ChartNext()
      i++;// Do not forget to increase the counter
     }
//---
   if(m_obj_chart_id==-1)
      return(INIT_FAILED);
   else
      Print("Object Name ",InpObjName," found on chart ",m_obj_chart_id);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Файлы:
 
Если ставить рыночные ордера (TRADE_ACTION_DEAL) с заданными уровнями Stop Loss и Take Profit, а у брокера запрет на установку ордера сразу с SL или TP, то ордер будет отменён или установлен с обнулёнными значениями SL и ТР?
 
Vladimir Karputov:

Вариант номер #2: задаём имя, тип объекта и в каком окне его искать ("0" - в главном окне). Поиск производится в OnInit и если объект найден - сохраняем идентификатор графика в переменную m_obj_chart_id.

еще больше спасибо вам 

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Vladimir Karputov, 2019.08.31 08:16


И Ваша ошибка в формировании стартовой цены:

//--- start work
   double start_price_ask=m_symbol.Ask()-ExtUpGap;
   double start_price_bid=m_symbol.Bid()+ExtDownGap;

рекомендую сделать стартовую цену отдельно для Stop и отдельно для Limit отложенных ордеров.

Здравствуйте, Владимир!

Помогите модифицировать старт работы скрипта, который приведен ниже:

//--- start work


   double start_price_ask=0.0;
   double start_price_bid=0.0;
   if(InpPending==stop)
     {
      start_price_ask=m_symbol.Ask()+ExtUpGap;
      start_price_bid=m_symbol.Bid()-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=m_symbol.Ask()-ExtUpGap;
         start_price_bid=m_symbol.Bid()+ExtDownGap;
        }

Нужно, что бы скрипт устанавливал отложенные ордера не от ask и bid, а от hight и low предыдущего бара (свечи).

С уважением, Владимир.