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

 
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 предыдущего бара (свечи).

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

 
Так и не понял в чём вопрос?
 
MrBrooklin:

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

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

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

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

Примерно так:

//--- start work
   double start_price_ask=0.0;
   double start_price_bid=0.0;
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=3;
   if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CopyRates ");
      return;
     }
//---
   if(InpPending==stop)
     {
      start_price_ask=rates[1].high+ExtUpGap;
      start_price_bid=rates[1].low-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=rates[1].low-ExtDownGap;
         start_price_bid=rates[1].high+ExtUpGap;
        }
 

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

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

Vladimir Karputov, 2019.09.18 12:49

Примерно так:

//--- start work
   double start_price_ask=0.0;
   double start_price_bid=0.0;
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=3;
   if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CopyRates ");
      return;
     }
//---
   if(InpPending==stop)
     {
      start_price_ask=rates[1].high+ExtUpGap;
      start_price_bid=rates[1].low-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=rates[1].low-ExtDownGap;
         start_price_bid=rates[1].high+ExtUpGap;
        }

Супер!!! Благодарю!

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

 
Почему я не могу использовать пользовательский критерий при полном переборе параметров, в чем сакральный смысл этого?
 

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

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

Vladimir Karputov, 2019.08.31 14:38

Пожалуйста.

Обратите внимание на переменную m_first_start объявленную на глобальном программном уровне

bool        m_first_start  = false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()

в конце OnTick этой переменной присваивается значение "true"

//---
   m_first_start=true;
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {

и больше советник уже не будет размещать отложенные ордера до своего следующего перезапуска

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(m_first_start)
      return;

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

Для повышения самообразования подскажите, как изменить код, чтобы советник размещал отложенные ордера на каждом баре. Пробовал просто удалить все выделенное желтым цветом, но он сразу начинает открывать и устанавливать тысячи ордеров и позиций.

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

 
MrBrooklin:

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

Для повышения самообразования подскажите, как изменить код, чтобы советник размещал отложенные ордера на каждом баре. Пробовал просто удалить все выделенное желтым цветом, но он сразу начинает открывать и устанавливать тысячи ордеров и позиций.

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

Необходимо определять момент рождения нового бара и только тогда размещать отложенные ордера:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.043
*/
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters

//---
datetime m_prev_bars             = 0;        // "0" -> D'1970.01.01 00:00';

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(m_symbol.Name(),Period(),0);
   if(time_0==m_prev_bars)
      return;
   ЗДЕСЬ РАЗМЕЩАТЬ КОД ПО ВЫСТАВЛЕНИЮ ОТЛОЖЕННЫХ ОРДЕРОВ
//---
  }
//+------------------------------------------------------------------+
Файлы:
Test.mq5  4 kb