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.0001
or 0.001
or or 0.01
or 0.1
or 1.0
etc. 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 プログラム / 取引許可