【发布时间】:2016-08-14 09:47:55
【问题描述】:
我在 1H 和 4H 周期进行交易,并且我正在尝试实施编码,以在亏损时平仓现在是交易周期的一半(PERIOD_CURRENT)。
交易周期 4H = 4 [hr] = 240 [min] = 14,400 [s]
一个交易周期是4H,所以我希望能够在交易最初开仓2小时后亏损时自动平仓。
根据时间(以 1970 年 1 月 1 日以来的秒数为单位),我将 TimeCurrent() 与 OrderOpenTime() + 进行了比较4H 以秒为单位,但除以 2 得到两小时后的时间。
但这不起作用 - 我在下面添加了代码。
如果有人能对此有所了解,将不胜感激。
示例
OrderStartTime = 14,000,000
OrderCloseTime = 14,000,000 + 60 minutes * 240 minutes = 14,014,400 <<<<<
中途收盘
如果此时交易亏损= 14,000,000 + (60 * 240*0.5) = 140,007,200
for ( int earlcloses = OrdersTotal() - 1; earlcloses >= 0; earlcloses-- )
{
if ( OrderSelect( earlcloses, SELECT_BY_POS, MODE_TRADES ) )
if ( OrderType() == OP_SELL )
if ( OrderMagicNumber() == Period() )
if ( OrderOpenTime() + ( 60 * Period() * 0.5 ) <= TimeCurrent() )
if ( OrderOpenPrice() < Bid )
{ // |||||||||||||||||||||||||||||||||||||||||||
/* --serially-nested-if()-s CODEBLOCK-{}-START--- */
earlcloses = OrderClose( OrderTicket(),
LotSize,
MarketInfo( sym, MODE_BID )
+ MarketInfo( sym, MODE_SPREAD )
* MarketInfo( sym, MODE_POINT ),
300,
clrNONE
);
/* ------------------------ CODEBLOCK-{}-FINISH--- */
} // ||||||||||||||||||||||||||||||||||||||||||||
if ( earlcloses == true )
{ Sleep( 60000 );
int earlyclosesel = OrdersHistoryTotal()-1;
bool earlySelect = OrderSelect( earlyclosesel, SELECT_BY_POS, MODE_HISTORY );
if ( earlySelect == true )
{
int earlTicket = OrderTicket();
SendMail( "Notification of early position closure", "Trade #" + IntegerToString( earlTicket, 0 ) + "has been closed at" + DoubleToStr( OrderClosePrice(), 5 ) + "due to timeout" );
}
else if ( earlySelect == false )
{
Print( "EarlyClose failed with error #", GetLastError() );
}
}
}
【问题讨论】:
-
Trade Cycle = 4 Hours = 240 seconds- 显然是几分钟? -
是的,抱歉,已更正
-
60 minutes * 240minutes再次,它是什么,平方分钟?如果你想使用尺寸,那么它会像60 sec/min * 240 min = 14400 sec -
MQL 平台以秒为单位测量时间,因此如果自 1970 年 1 月 1 日以来订单开仓时间为 14,000,000 秒,那么自 1970 年 1 月 1 日以来平仓时间为 14,014,400 秒。自 1970 年 1 月 1 日以来,中途将是 14,007,200 秒,因此 60 * 240 = 14,400。不过没有提前关闭,所以我认为括号可能是问题
标签: trading algorithmic-trading mql4 metatrader4