我是MQL5的新手。我过去经常使用MQL4开发,现在我也在尝试让我的代码在MQL5中工作。由于某些原因,我似乎不能让非常简单的事情,如开设一个买入位置。我使用的是这样的东西:
CTrade m_trade
if ( PositionsTotal() == 0 )
m_trade.Buy( 0.1, Symbol(), price, 0, 0 );
所有我想要的是打开一个购买的位置与许多大小的0.1
。
在StrategyTester中,它首先打开一个大小为lot的0.1
头寸(到目前为止还好),但过了一段时间头寸被关闭(还不知道为什么会关闭),然后一个新的买入头寸被打开,其大小尽可能大。
我做错了什么?
发布于 2017-11-10 01:23:55
首先:
在深入研究之前,让我们先更好地诊断一下情况:
#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
-based { TP
,SL
}-prices和对称编辑更改。
发布于 2021-09-10 11:17:23
只需使用"CTrade.PositionOpen“即可。
示例:
Ctrade ctrade;
double dAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
bool bRet = ctrade.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.1, dAsk, 0, 0, "");
https://stackoverflow.com/questions/47203175
复制相似问题