MQL5 CTrade Buy()函数

时间:2017-11-09 13:31:06

标签: mql5

我是MQL5的新手。我曾经在MQL4中开发了很多东西,现在我也试图让我的代码在MQL5中运行。出于某种原因,我似乎无法做出像开设买入头位这样简单的事情。我正在使用这样的东西:

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

我想要的只是打开一个大小为0.1的买入仓位。

在策略测试器中,它首先打开一个大小为0.1的位置(到目前为止一直很好),但过了一段时间后该位置被关闭(不知道为什么它会被关闭)然后一个新的买入头寸开张,其大小尽可能大。

我做错了什么?

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

对于短线,aShortOpenanAsk为基础的{TPSL} -prices和对称编辑更改适用。