1

我是 MQL5 的新手。我曾经在 MQL4 中开发过很多东西,现在我也在尝试让我的代码在 MQL5 中工作。出于某种原因,我似乎无法进行非常简单的操作,例如开立买入头寸。我正在使用这样的东西:

 CTrade m_trade 
 if (  PositionsTotal() == 0 )
       m_trade.Buy( 0.1, Symbol(), price, 0, 0 );

我只想开一个手数为 的买入头寸0.1

在 StrategyTester 中,它首先打开一个手数大小的头寸0.1(到目前为止一切都很好),但过了一段时间该头寸被关闭(还不知道它为什么被关闭),然后一个新的买入头寸被打开尽可能大的批量。

我究竟做错了什么?

4

2 回答 2

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?" ) )
{ ... }

对于做空aShortOpenanAsk基于 , 的 { TP, SL}-prices 和对称编辑更改适用。

于 2017-11-09T17:23:54.683 回答
0

只需使用“CTrade.PositionOpen”代替。

样本:

 Ctrade ctrade;
 double dAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

 bool bRet = ctrade.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.1, dAsk, 0, 0, "");
于 2021-09-10T11:17:23.443 回答