// Через 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; } }
结果(从下到上)
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
SB中的错误用粗体字标出。同时,你可以比较MT4Order和MT5Order函数的代码。
我在自己身上运行了你的代码(没有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
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)秒的单次运行?它也在谈论云!
这发生在可视化窗口打开的时候,我已经安全地忘记了。这没有任何意义。
我还没有开着测试车参加过比赛。
#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 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
学习了标准库 并写了一个测试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;
}
}
结果(从下到上)
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
我在自己身上运行了你的代码(没有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());
}
}
//+------------------------------------------------------------------+
我在我的上运行了你的代码(没有MT4)。
情况可能是这样的。
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
fxsaber, 2016.10.18 22:00
网络引擎错误
没有注意到。
由于它不会困扰任何人,当然除了少数人之外,它更有可能拥有更高的优先权。
据我所知--这个功能已经有一年了。
{
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());
}
你必须在每个继承类中写下同样的东西
{
return(typename(this));
}
在MQL中是否可以不拉这种尾巴?