Давайте сначала разберем вызов 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
или 0.0001
или 0.001
или 0.01
или 0.1
или 1.0
и т. д.,
объемы лотов: более ограничены специфическими для брокера настройками для каждого инструмента из трех ключевых значений, все допустимые размеры объемов должны соответствовать:
[aMinLOTs<=, +aMinLotSTEP, <=aMaxLOTs]
+
a нормализация правильных цифр
~ таким образом, double 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 / Разрешение на торговлю
person
user3666197
schedule
01.08.2016