我是MQL5的新手。我曾经在MQL4中开发了很多东西,现在我也试图让我的代码在MQL5中运行。出于某种原因,我似乎无法做出像开设买入头位这样简单的事情。我正在使用这样的东西:
CTrade m_trade
if ( PositionsTotal() == 0 )
m_trade.Buy( 0.1, Symbol(), price, 0, 0 );
我想要的只是打开一个大小为0.1
的买入仓位。
在策略测试器中,它首先打开一个大小为0.1
的位置(到目前为止一直很好),但过了一段时间后该位置被关闭(不知道为什么它会被关闭)然后一个新的买入头寸开张,其大小尽可能大。
我做错了什么?
答案 0 :(得分:1)
在深入探讨之前,让我们首先进一步诊断情况:
#include<Trade\Trade.mqh>
...
CTrade m_trade;
...
if ( PositionsTotal() == 0 )
{
if ( !trade.Buy( 0.1, _Symbol ) )
{
//--- failure message
Print( "The .Buy() method failed. The return-code = ",
trade.ResultRetcode(),
". Code description: ",
trade.ResultRetcodeDescription()
);
}
else
{
Print( "The .Buy() method executed successfully. The return-code = ",
trade.ResultRetcode(),
" (",
trade.ResultRetcodeDescription(),
")"
);
}
}
如果上面Print()
- ed输出确认操作成功,您可以向 .Buy()
方法添加更多详细信息并重新测试:
#include<Trade\Trade.mqh>
...
CTrade m_trade;
...
double aVolume = 0.1;
double aPoint = SymbolInfoDouble( _Symbol, SYMBOL_POINT );
double anAsk = SymbolInfoDouble( _Symbol, SYMBOL_ASK );
double aBid = SymbolInfoDouble( _Symbol, SYMBOL_BID );
int aNumDigits = (int) SymbolInfoInteger( _Symbol, SYMBOL_DIGITS );
double aLongOpen = SymbolInfoDouble( _Symbol, SYMBOL_ASK ),
aLongSL = aBid - 1000 * aPoint,
SL = NormalizeDouble( aLongSL, aNumDigits ),
aLongTP = aBid + 1000 * aPoint,
TP = NormalizeDouble( aLongTP, aNumDigits );
if ( !trade.Buy( aVolume, _Symbol, aLongOpen, SL, TP, "Does this work?" ) )
{ ... }
对于短线,aShortOpen
,anAsk
为基础的{TP
,SL
} -prices和对称编辑更改适用。