Ошибки, баги, вопросы - страница 1740

 
Что это за фигня?!
2016.10.20 15:40:44     Tester  MQL5 Cloud Server "4.agents.mql5.com:443" not found
2016.10.20 15:40:41     Core 1  connection closed
2016.10.20 15:40:16     History nothing to analyze

2016.10.20 15:40:16     Core 1  common synchronization completed
2016.10.20 15:40:16     Tester  RTS-12.16,M1 (BCS-MetaTrader5): visual testing of Experts\fxsaber\Test9.ex5 from 2016.10.19 00:00 to 2016.10.20 00:00
2016.10.20 15:40:16     Core 1  authorized (agent build 1455)
2016.10.20 15:40:16     Core 1  connected
2016.10.20 15:40:16     Core 1  connecting to 127.0.0.1:3000

Ну если, вдруг, нет истории, то по какой причине аж 28 (25 + 3) секунд идет одиночный прогон? Да еще про Облако талдычит!

Это произошло при открытом окне визуализации, о котором благополучно забыл. Ничего не понятно. 

 
Alexey Kozitsyn:
В тестере не гонялся.
Изучил Стандартную Библиотеку и написал проверочный советник
#define SLTP (10 * _Point)

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

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price )
{
  CTrade Trade;
  
  if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
    Trade.SetTypeFilling(ORDER_FILLING_RETURN);

  Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);

  const ulong Ticket = Trade.ResultOrder();
  
  if (Ticket > 0)
  {
    COrderInfo Order;
    
    if (Order.Select(Ticket))
      Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT4Order( const double Price )
{
  const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
  
  if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
    
    MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
    MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
    
    FirstRun = false;
  }
}

Результат (снизу-вверх)
2016.10.20 16:49:14.987 2016.10.18 10:00:00   order modified [#3 sell limit 1.00 RTS-12.16 at 100]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.987 2016.10.18 10:00:00   CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [invalid fill]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   failed modify order #2 sell limit 1.00  at 100.00000 sl: 0.00000 tp: 0.00000 -> 100.00000, sl: 110.00000 tp: 90.00000 [Unsupported filling mode]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done]
2016.10.20 16:49:14.986 2016.10.18 10:00:00   sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.985 RTS-12.16 : real ticks begin from 2016.10.18 00:00:00
Жирным выделена ошибка в СБ. Заодно можно сравнить код функций MT4Order и MT5Order.
 
fxsaber:
Изучил Стандартную Библиотеку и написал проверочный советник
#define SLTP (10 * _Point)

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

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price )
{
  CTrade Trade;
  
  if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
    Trade.SetTypeFilling(ORDER_FILLING_RETURN);

  Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);

  const ulong Ticket = Trade.ResultOrder();
  
  if (Ticket > 0)
  {
    COrderInfo Order;
    
    if (Order.Select(Ticket))
      Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT4Order( const double Price )
{
  const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
  
  if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
    
    MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
    MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
    
    FirstRun = false;
  }
}

Результат (снизу-вверх)
2016.10.20 16:49:14.987 2016.10.18 10:00:00   order modified [#3 sell limit 1.00 RTS-12.16 at 100]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.987 2016.10.18 10:00:00   CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [invalid fill]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   failed modify order #2 sell limit 1.00  at 100.00000 sl: 0.00000 tp: 0.00000 -> 100.00000, sl: 110.00000 tp: 90.00000 [Unsupported filling mode]
2016.10.20 16:49:14.987 2016.10.18 10:00:00   CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done]
2016.10.20 16:49:14.986 2016.10.18 10:00:00   sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600)
2016.10.20 16:49:14.985 RTS-12.16 : real ticks begin from 2016.10.18 00:00:00
Жирным выделена ошибка в СБ. Заодно можно сравнить код функций MT4Order и MT5Order.

Ваш код запустил у себя (без МТ4):

2016.10.20 19:05:31.150 2016.09.16 10:00:00   order performed buy 1.00 at 96500 [#3 buy 1.00 RTS-12.16 at 110]
2016.10.20 19:05:31.150 2016.09.16 10:00:00   deal performed [#3 buy 1.00 RTS-12.16 at 96500]
2016.10.20 19:05:31.150 2016.09.16 10:00:00   deal #3 buy 1.00 RTS-12.16 at 96500 done (based on order #3)
2016.10.20 19:05:31.150 2016.09.16 10:00:00   stop loss triggered #2 sell 1.00 RTS-12.16 100 sl: 110 tp: 90 [#3 buy 1.00 RTS-12.16 at 110]
2016.10.20 19:05:31.148 2016.09.16 10:00:00   order performed sell 1.00 at 100 [#2 sell limit 1.00 RTS-12.16 at 100]
2016.10.20 19:05:31.148 2016.09.16 10:00:00   deal performed [#2 sell 1.00 RTS-12.16 at 100]
2016.10.20 19:05:31.148 2016.09.16 10:00:00   deal #2 sell 1.00 RTS-12.16 at 100 done (based on order #2)
2016.10.20 19:05:31.148 2016.09.16 10:00:00   order [#2 sell limit 1.00 RTS-12.16 at 100] triggered
2016.10.20 19:05:31.121 2016.09.16 10:00:00   CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [done]
2016.10.20 19:05:31.121 2016.09.16 10:00:00   order modified [#2 sell limit 1.00 RTS-12.16 at 100]
2016.10.20 19:05:31.121 2016.09.16 10:00:00   CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done]
2016.10.20 19:05:31.121 2016.09.16 10:00:00   sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 96650)
2016.10.20 19:05:31.118 RTS-12.16 : real ticks begin from 2016.09.16 00:00:00
2016.10.20 19:05:30.941 RTS-12.16,M1: testing of Experts\test_filling_mode.ex5 from 2016.09.16 00:00 to 2016.09.20 00:00 started
2016.10.20 19:05:30.941 RTS-12.16,M1 (Open-Broker): generating based on real ticks
2016.10.20 19:05:30.940 RTS-12.16,M1: history begins from 2015.01.15 10:08
2016.10.20 19:05:30.937 RTS-12.16,M1: history cache allocated for 645942 bars and contains 15277 bars from 2015.01.15 10:08 to 2016.09.15 23:49


 

 
Код:
#property version   "1.00"
#define SLTP (10 * _Point)

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static bool FirstRun=true;

   if(FirstRun)
     {
      const double Price=SymbolInfoDouble(_Symbol,SYMBOL_BID)+100*_Point;

      MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
                       //MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)

      FirstRun=false;
     }
  }
//+------------------------------------------------------------------+

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order(const double Price)
  {
   CTrade Trade;

   if((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE)==SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Trade.SetTypeFilling(ORDER_FILLING_RETURN);

   Trade.OrderOpen(_Symbol,ORDER_TYPE_SELL_LIMIT,1,0,Price,0,0,ORDER_TIME_GTC,0,__FUNCTION__);

   const ulong Ticket=Trade.ResultOrder();

   if(Ticket>0)
     {
      COrderInfo Order;

      if(Order.Select(Ticket))
         Trade.OrderModify(Order.Ticket(),Order.PriceOpen(),Order.PriceOpen()+SLTP,Order.PriceOpen()-SLTP,Order.TypeTime(),Order.TimeExpiration());
     }
  }
//+------------------------------------------------------------------+
 
Alexey Kozitsyn:

Ваш код запустил у себя (без МТ4):

2016.10.20 19:05:30.941 RTS-12.16,M1 (Open-Broker): generating based on real ticks
Возможно, дело в этом
2016.10.20 16:49:14.944 RTS-12.16,M1 (BCS-MetaTrader5): generating based on real ticks
 
fxsaber:
Возможно, дело в этом
2016.10.20 16:49:14.944 RTS-12.16,M1 (BCS-MetaTrader5): generating based on real ticks
Ничего не трогал, так что, видимо, нужно искать на стороне брокера.
 
fxsaber:
Не заметили
На сколько понимнится - этой фиче уже год как будет.
Так как оно ни кому не мешает, кроме избранных, конечно, то скорее всего занимаются более приорететными задачами.
 
Sergey Dzyublik:
На сколько понимнится - этой фиче уже год как будет.
Это только в Публикциях профиля фича?
 
Задета тема изящности MQL
class A
{
public:
  virtual string classname() const
  {
    return(typename(this));
  }
};

class B : public A
{
public:  
  virtual string classname() const
  {
    return(typename(this));
  }
};

void OnStart()
{
  B b;
  
  Print(b.classname());
}

В каждом наследуемом классе приходится прописывать одно и то же

virtual string classname() const
{
  return(typename(this));
}

Будет возможность не тянуть такие хвосты в MQL?

Причина обращения: