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

 
Все понятно. Видимо это не мое
 
ilyav:

Все я сдаюсь.У вас нет готового советника который бы выводил принт цены тех отложек что я показал стрелками на скриншоте?

И вообще не понимаю почему эта функция работает без передачи всяких ЦЕН

??? 

Вы показываете неработоспособный код - как минимум он не компилируется - так как в нём несоответствие открывающих и закрывающих скобок. А во-вторых = поломанная логика.

 
Vladimir Karputov:

Вы показываете неработоспособный код - как минимум он не компилируется - так как в нём несоответствие открывающих и закрывающих скобок. А во-вторых = поломанная логика.

Переписал ваш код

Но он у меня выдает дальние от цены отложенники

void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 
                 }
               Print("buy : ",price_nearest_buy_stop);
                return;  
              }
              
               
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 return;
              }
           }
  }
  
 
 
ilyav:

Переписал ваш код

Но он у меня выдает дальние от цены отложенники

Принты должны стоять после цикла OrdersTotal.

И что такое price1? Как Вы её получаете?
 

А в таком варианте вообще Выводит на принт все имеющиеся

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
                 Print("buy : ",price_nearest_buy_stop);
                 
              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 
              }
           }
  }
 
Vladimir Karputov:

Принты должны стоять после цикла OrdersTotal.

И что такое price1? Как Вы её получаете?
//|  Выбран режим торговли 3 ? Тогда торгуем его    

      if(РежимТорговли==3)

        {

        price1=m_symbol.Bid();

        TradeMode3();

И в заголовке советника прописал

double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

И если все верно вот заключительный вариант

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }

              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }

              }

           }
   Print("Цена ближнего SELL_STOP : ",price_nearest_sell_stop);
   Print("Цена ближнего BUY_STOP : ",price_nearest_buy_stop);
  }
//+------------------------------------------------------------------+

Вроди все работает. Если есть ошибки скажите. Спасибо вам огромное.

 

Прошу помощи в решении такой задачи.

Допустим у меня есть текущий тайм фрейм - M1, мне надо знать время последнего бара N заданного бара любого верхнего TF, при этом час может быть не 60 минут, а 45 или иное любое время, а кроме того есть выходные, а надо узнавать с любого TF дату последнего бара текущего TF.

Как это реализовать?

 
ilyav:

И в заголовке советника прописал

И если все верно вот заключительный вариант

Вроди все работает. Если есть ошибки скажите. Спасибо вам огромное.

Перед строкой

price1=m_symbol.Bid();

нужно обновлять котировки:

if(!RefreshRates())
   return;
 
Aleksey Vyazmikin:

Прошу помощи в решении такой задачи.

Допустим у меня есть текущий тайм фрейм - M1, мне надо знать время последнего бара N заданного бара любого верхнего TF, при этом час может быть не 60 минут, а 45 или иное любое время, а кроме того есть выходные, а надо узнавать с любого TF дату последнего бара текущего TF.

Как это реализовать?

Указываете номер бара, имя символа и нужный таймфрейм:

//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }

Проверяете (на всякий случай) - если возвратила функция время D'1970.01.01 00:00:00' - значит ошибка.

 

Столкнулся с проблемой что ордер на продажу не выставился

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

Правильно ли я понимаю что брокер принял ордер а потом отклонил?

На каком основании тогда и почему не написал? В журналах больше ошибок нет. До этой ошибки было больше 50 ордеров и все без ошибок. После этой ошибки тоже ошибок не видно.

Можно ли избавится от этой проблемы?