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

Vladimir Karputov:

Кто такой 'Time'? Точку останова поставьте перед выдачей приказа. Проверьте вообще на точку останова попадаете?

(И таки да: нечего писать несколько операторов в одну строку)

Time - во внешних настройках время в часах. К примеру через 7 часов после открытия позиции, если она не закрылась по стопу или тэйку, я хочу закрыть её.
Roman Kutemov:
Time - во внешних настройках время в часах. К примеру через 7 часов после открытия позиции, если она не закрылась по стопу или тэйку, я хочу закрыть её.

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

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

Vladimir Karputov, 2021.01.27 17:49

*** Точку останова поставьте перед выдачей приказа. Проверьте вообще на точку останова попадаете?

(И таки да: нечего писать несколько операторов в одну строку)


Vladimir Karputov:

Да, не попадал.

Исправил. Благодарю.

Что дает pythoon что не может дать R ? 
Vladimir Karputov:

Пример подсчета четырех типов отложенных ордеров в коде Min Max for N Bars Martingal

Vladimir Karputov:

Пример подсчета четырех типов отложенных ордеров в коде Min Max for N Bars Martingale 2

Vladimir Karputov:

Пример подсчета четырех типов отложенных ордеров в коде Min Max for N Bars Martingale 2




Владимир, почему-то не подсчитывает байлимитные ордера????

int count_buy_limits = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
        {
            if(o_orderInfo.OrderType()==ORDER_TYPE_BUY_LIMIT)
               {
                  count_buy_limits++;
               }    
        }

Fergert Фергерт:


Владимир, почему-то не подсчитывает байлимитные ордера????

int count_buy_limits = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
        {
            if(o_orderInfo.OrderType()==ORDER_TYPE_BUY_LIMIT)
               {
                  count_buy_limits++;
               }    
        }

1. Вставьте код правильно
2. Покажите весь код
4. Скриншот окна с позициями и отложенными ордерами 
Vladimir Karputov:
1. Вставьте код правильно
2. Покажите весь код
4. Скриншот окна с позициями и отложенными ордерами 

Ошибок компиляции нет..

ВОТ КОД:

#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade      o_trade;
COrderInfo  o_orderInfo;
CSymbolInfo o_symbolInfo;

MqlTradeRequest   order_req={0}, buylimit_req1={0}, buylimit_req2={0}, sellstop_req3={0};
MqlTradeResult    order_res={0}, buylimit_res1={0}, buylimit_res2={0}, sellstop_res3={0};

//double   lot_r    = GlobalVariableGet("glot"); // Глобальная переменная
//double   lot_r    = 0.33;
double   lot_r    = NormalizeDouble(AccountInfoDouble(ACCOUNT_BALANCE)/15000,2);

int      tp_r     = 125;

double   lot_bl1  = 2.5;
double   lot_bl2  = 3;

double   lot_v    = NormalizeDouble(lot_r + (lot_r * lot_bl1) + (lot_r * lot_bl2), 2);

int      set_bl1  = 500;   
int      set_bl2  = 1000;
int      set_v    = 1100;

int      tp_bl1   = 70;
int      tp_bl2   = 480;

int OnInit()
  {
      order_req.action           = TRADE_ACTION_DEAL;
      order_req.symbol           = _Symbol;
      order_req.price            = SymbolInfoDouble(order_req.symbol, SYMBOL_ASK);
      order_req.volume           = lot_r;
      order_req.tp               = order_req.price+tp_r*_Point;
      order_req.type             = ORDER_TYPE_BUY;
      order_req.type_filling     = ORDER_FILLING_FOK;
      
      buylimit_req1.action       = TRADE_ACTION_PENDING;
      buylimit_req1.symbol       = _Symbol;
      buylimit_req1.volume       = NormalizeDouble(lot_r*lot_bl1, 2);
      buylimit_req1.price        = SymbolInfoDouble(buylimit_req1.symbol, SYMBOL_ASK)-set_bl1*_Point;
      buylimit_req1.tp           = order_req.price-tp_bl1*_Point;
      buylimit_req1.type         = ORDER_TYPE_BUY_LIMIT;
      buylimit_req1.type_filling = ORDER_FILLING_RETURN;
      buylimit_req1.expiration   = ORDER_TIME_GTC;
      buylimit_req1.magic        = 01;
      
      buylimit_req2.action       = TRADE_ACTION_PENDING;
      buylimit_req2.symbol       = _Symbol;
      buylimit_req2.volume       = NormalizeDouble(lot_r*lot_bl2, 2);
      buylimit_req2.price        = SymbolInfoDouble(buylimit_req2.symbol, SYMBOL_ASK)-set_bl2*_Point;
      buylimit_req2.tp           = order_req.price-tp_bl2*_Point;
      buylimit_req2.type         = ORDER_TYPE_BUY_LIMIT;
      buylimit_req2.type_filling = ORDER_FILLING_RETURN;
      buylimit_req2.expiration   = ORDER_TIME_GTC;
      buylimit_req1.magic        = 02;
      
      sellstop_req3.action       = TRADE_ACTION_PENDING;
      sellstop_req3.symbol       = _Symbol;
      sellstop_req3.volume       = NormalizeDouble(lot_v, 2);
      sellstop_req3.price        = SymbolInfoDouble(sellstop_req3.symbol, SYMBOL_ASK)-set_v*_Point;
      sellstop_req3.sl           = buylimit_req2.price + 10*_Point;
      sellstop_req3.type         = ORDER_TYPE_SELL_STOP;
      sellstop_req3.type_filling = ORDER_FILLING_RETURN;
      sellstop_req3.expiration   = ORDER_TIME_GTC;
      
   
   if(OrdersTotal()==0 && PositionsTotal() == 0)
      {
         OrderSend(order_req, order_res);
         OrderSend(buylimit_req1, buylimit_res1);
         OrderSend(buylimit_req2, buylimit_res2);
         OrderSend(sellstop_req3, sellstop_res3);
      }
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {

  
  }
 
 void OnTick()
  {
       int count_buy_limits = 0;
       for(int i=OrdersTotal()-1; i>=0; i--)
        {
          if(o_orderInfo.OrderType()==ORDER_TYPE_BUY_LIMIT)
               {
                  count_buy_limits++;
               }
        }   
      if(count_buy_limits < 2 || PositionsTotal() == 0)
         {
            for(int r=PositionsTotal()-1; r>=0; r--)
               {
                  ulong ticket=PositionGetTicket(r);
                  o_trade.PositionClose(ticket);   
               }  
      
            for(int o=OrdersTotal()-1; o>=0; o--)
               {
                  ulong ticket1=OrderGetTicket(o);
                  o_trade.OrderDelete(ticket1);
               }
      ExpertRemove();
         }
  }
//+------------------------------------------------------------------+
Файлы:
001.jpg  173 kb
Fergert Фергерт:

Ошибок компиляции нет..

ВОТ КОД:

Внимательно просмотрите мой пример и Ваш пример. Нельзя бездумно копировать. Нужно немножко думать. Ищите ошибку в своём коде. 

Правильно вставляйте код (при помощи кнопки  Code - я на первый раз исправил Ваша сообщение)

Vladimir Karputov:

Внимательно просмотрите мой пример и Ваш пример. Нельзя бездумно копировать. Нужно немножко думать. Ищите ошибку в своём коде. 

Правильно вставляйте код (при помощи кнопки   - я на первый раз исправил Ваша сообщение)

Ага, все понял...
Fergert Фергерт:
Ага, все понял...

Да, Вы забыли, что если обходить цикл, то на каждой итерации нужно БРАТЬ:

      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties

Справка:

SelectByIndex

Выбирает ордер для дальнейшего доступа по указанному индексу

Документация по MQL5: Стандартная библиотека / Торговые классы / COrderInfo / SelectByIndex
Документация по MQL5: Стандартная библиотека / Торговые классы / COrderInfo / SelectByIndex
  • www.mql5.com
SelectByIndex(int) - COrderInfo - Торговые классы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5