3

注文しようとしていますが、OrderSend()メソッド( https://docs.mql4.com/trading/ordersend )
への呼び出しが失敗しています:

2016.08.01 00:51:09.710 2016.07.01 01:00 s EURUSD,M1: OrderSend error 4111

void OnTick() {
    if (  OrdersTotal() == 0 ){
          int   result =  OrderSend( NULL, OP_SELL, 0.01, Bid, 5, 0, Bid - 0.002, NULL, 0, 0, clrGreen );
          if (  result <  0 ) Print( "Order failed #", GetLastError() );
          else                Print( "Order success" );
    }
} 

私が間違っていることを知っていますか?

4

1 に答える 1

1

OrderSend()最初に呼び出しを分解しましょう。

int result = OrderSend( NULL,             // string:      _Symbol,
                        OP_SELL,          // int:         OP_SELL,
                        0.01,             // double:      NormalizeLOTs( nLOTs ),
                        Bid,              // double:      NormalizeDouble( Bid, Digits ),
                        5,                // int:         slippagePOINTs,
                        0,                // double:      {       0 | NormalizeDouble( aSlPriceTARGET, Digits ) },
                        Bid-0.002,        // double:      {       0 | NormalizeDouble( aTpPriceTARGET, Digits ) },
                        NULL,             // string:      {    NULL | aBrokerUnguaranteedStringCOMMENT },
                        0,                // int:         {       0 | aMagicNUMBER },
                        0,                // datetime:    {       0 | aPendingOrderEXPIRATION },
                        clrGreen          // color:       { clrNONE | aMarkerCOLOR }
                        );

さらに安心するために、常にすべての値を正規化する必要があります。MQL4これらの値は、-側 (価格 + ロット (量子化) 値)で制限された処理を行います。これらは R ドメインの連続値ではなく、量子-段付き:

価格:0.00001 or 0.0001or 0.001or or 0.01or 0.1or 1.0etc. stepping ,

ロットボリューム:証券ごとに、3 つの主要な値のブローカー固有の設定によってより制限されているため、許容されるすべてのボリュームサイズは満たす必要があります:
[aMinLOTs<=, +aMinLotSTEP, <=aMaxLOTs] +適切な数字の正規化
~したがって、adouble NormalizeLOTs( aProposedVOLUME ) {...}は、この両方の部分をシームレスに実装するための便利なツールです必要。


Error 4111:

MetaTrader Terminal 4コードをスムーズに実行することを妨げる他のいくつかの障壁があります。

4111
ERR_SHORTS_NOT_ALLOWED
Shorts are not allowed. Check the Expert Advisor properties

 if (  !TerminalInfoInteger( TERMINAL_TRADE_ALLOWED ) ) 
        Alert( "Check if automated trading is allowed in the terminal settings!" ); 
 else  if (  !MQLInfoInteger( MQL_TRADE_ALLOWED ) )
             Alert( "Automated trading is forbidden in the program settings for ",
                    __FILE__
                    );

これは、タブおよびブローカー側の取引商品の条件の下で、一部の商品のショートが一般的に制限されているか、特定の口座タイプのみに制限されている場合にMetaTrader Terminal 4、設定を修正するようにユーザーに指示します。
MT4 -> Tools -> Options -> ExpertAdvisor

 if (  !AccountInfoInteger( ACCOUNT_TRADE_EXPERT ) )
        Alert( "Automated trading is forbidden for the account",
                AccountInfoInteger( ACCOUNT_LOGIN ),
               " at the trade server side. Contact Broker's Customer Care Dept."
               );

詳細については、printScreens と、両方のTerminal側/ブローカー側バリアのこのグループのプログラムによる処理のデモンストレーション: ref.-> MQL4 リファレンス / MQL4 プログラム / 取引許可

于 2016-08-01T10:01:57.870 に答える