// Через MT5-Стандартную Библиотеку - only MT5 // Выставляет SellLimit и затем устаналивает ему SL/TP void MT5Order( constdouble Price ) { CTrade Trade;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE) Trade.SetTypeFilling(ORDER_FILLING_RETURN);
// Через MT5-Стандартную Библиотеку - only MT5 // Выставляет SellLimit и затем устаналивает ему SL/TP void MT5Order( constdouble Price ) { CTrade Trade;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE) Trade.SetTypeFilling(ORDER_FILLING_RETURN);
MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5 MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
FirstRun = false; } }
Il risultato (dal basso verso l'alto)
2016.10.2016:49:14.9872016.10.1810:00:00 order modified [#3 sell limit 1.00 RTS-12.16 at 100] 2016.10.2016:49:14.9872016.10.1810:00:00 sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600) 2016.10.2016:49:14.9872016.10.1810:00:00 CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [invalid fill] 2016.10.2016:49:14.9872016.10.1810: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.2016:49:14.9872016.10.1810:00:00 CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done] 2016.10.2016:49:14.9862016.10.1810:00:00 sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 97600) 2016.10.2016:49:14.985 RTS-12.16 : real ticks begin from 2016.10.1800:00:00
L'errore in SB è evidenziato in grassetto. Allo stesso tempo potete confrontare il codice delle funzioni MT4Order e MT5Order.
Ho eseguito il tuo codice da solo (senza MT4):
2016.10.2019:05:31.1502016.09.1610:00:00 order performed buy 1.00 at 96500 [#3 buy 1.00 RTS-12.16 at 110] 2016.10.2019:05:31.1502016.09.1610:00:00 deal performed [#3 buy 1.00 RTS-12.16 at 96500] 2016.10.2019:05:31.1502016.09.1610:00:00 deal #3 buy 1.00 RTS-12.16 at 96500 done (based on order #3) 2016.10.2019:05:31.1502016.09.1610:00:00 stop loss triggered #2 sell 1.00 RTS-12.16100 sl: 110 tp: 90 [#3 buy 1.00 RTS-12.16 at 110] 2016.10.2019:05:31.1482016.09.1610:00:00 order performed sell 1.00 at 100 [#2 sell limit 1.00 RTS-12.16 at 100] 2016.10.2019:05:31.1482016.09.1610:00:00 deal performed [#2 sell 1.00 RTS-12.16 at 100] 2016.10.2019:05:31.1482016.09.1610:00:00 deal #2 sell 1.00 RTS-12.16 at 100 done (based on order #2) 2016.10.2019:05:31.1482016.09.1610:00:00 order [#2 sell limit 1.00 RTS-12.16 at 100] triggered 2016.10.2019:05:31.1212016.09.1610:00:00 CTrade::OrderSend: modify #2 at 100.00000 (sl: 110.00000 tp: 90.00000) [done] 2016.10.2019:05:31.1212016.09.1610:00:00 order modified [#2 sell limit 1.00 RTS-12.16 at 100] 2016.10.2019:05:31.1212016.09.1610:00:00 CTrade::OrderSend: sell limit 1.00 RTS-12.16 at 100 [done] 2016.10.2019:05:31.1212016.09.1610:00:00 sell limit 1.00 RTS-12.16 at 100 (0 / 0 / 96650) 2016.10.2019:05:31.118 RTS-12.16 : real ticks begin from 2016.09.1600:00:00 2016.10.2019:05:30.941 RTS-12.16,M1: testing of Experts\test_filling_mode.ex5 from 2016.09.1600:00 to 2016.09.2000:00 started 2016.10.2019:05:30.941 RTS-12.16,M1 (Open-Broker): generating based on real ticks 2016.10.2019:05:30.940 RTS-12.16,M1: history begins from 2015.01.1510:08 2016.10.2019:05:30.937 RTS-12.16,M1: history cache allocated for645942 bars and contains 15277 bars from 2015.01.1510:08 to 2016.09.1523:49
Per quanto ne sappiamo, questa caratteristica è vecchia di un anno. Dato che non dà fastidio a nessuno, tranne a pochi eletti ovviamente, è più probabile che abbia una priorità più alta.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
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
Bene, se improvvisamente non c'è storia, perché c'è una sola corsa per 28 (25 + 3) secondi? Parla anche della Nuvola!
Questo è successo mentre era aperta la finestra di visualizzazione, che avevo tranquillamente dimenticato. Non ha alcun senso.
Non ho corso nel tester.
#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;
}
}
Il risultato (bottom-up)
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
Studiato la Libreria Standard e scritto un test EA
#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;
}
}
Il risultato (dal basso verso l'alto)
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
Ho eseguito il tuo codice da solo (senza MT4):
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
#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());
}
}
//+------------------------------------------------------------------+
Ho eseguito il tuo codice sul mio (senza MT4):
Questo può essere il caso.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
fxsaber, 2016.10.18 22:00
Bug del motore web
Non l'ha notato.
Dato che non dà fastidio a nessuno, tranne a pochi eletti ovviamente, è più probabile che abbia una priorità più alta.
Per quanto posso dire - questa caratteristica è vecchia di un anno.
{
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());
}
Dovete scrivere la stessa cosa in ogni classe ereditata
{
return(typename(this));
}
Sarà possibile non tirare tali code in MQL?