То ли я не понимаю чего то , тол и лыжи не едут, получается что AccountFreeMarginCheck возвращает не то, в итоге не получается настроить советник для маркета
при недостатке средств через такое условие проходит почему то
в итоге AccountFreeMarginCheck(Symbol(),OP_BUY,lotsib) получается больше нуля (margueCheck=350.452962), но когда отсылается ордер - возвращает что он меньше нуля (это сообщает сам тестер - FreeMargin: -64.87) - я в ступоре
Где-то уже было такое, нужно добавить проверку на ошибку 134
if(IsTradeAllowed() && AccountFreeMarginCheck(Symbol(),OP_SELL,lotsis)>0 && _LastError!=134)
Где-то уже было такое, нужно добавить проверку на ошибку 134
Совсем недавно где-то был точно такой же вопрос (не помню где). Ответ с тех пор не изменился - в справке указан правильный способ проверки достаточности средств. Для этого случая код должен быть следующим:
if (AccountFreeMarginCheck(Symbol(),OP_SELL,lotsis)>0 && GetLastError() != 134) { // можно торговать }
Нет я всё равно видимо дурак, подождал всяких обновлений по терминалу, еще раз разбираюсь, хоть тресни
просачивается через условие
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lotsis)>0 && GetLastError()!=134) { Print(GetLastError()); for(c=0; c<=2; c++) { RefreshRates(); ResetLastError(); Print(AccountFreeMarginCheck(Symbol(),OP_SELL,lotsis)); Print(GetLastError()); if(GetLastError()==134){ return(0); } ticket=OrderSend(Symbol(),OP_SELL,lotsis,Bid,SlipPage,0,0,"next",Magic,0,Red); e=GetLastError(); if(e==0) { break; } } }
и печатает в логе
сначала при первом Print что ошибок нет = 0, потом пишет при второй проверке что оставшаяся маржа будет больше 0 (11213.3288), и что ошибок опять нет = 0 и все равно хрен там
RSI_Grabber.1.1 XAUUSD,M30: OrderSend error 134 Tester: PrevBalance: 10109.50, PrevPL: -5335.00, PrevEquity 4774.50, PrevMargin: 6320.10, NewMargin: 12750, FreeMargin: -7975.30 Tester: not enough money for sell 25.60 XAUUSD at 1255.800 sl: 0.000 tp: 0.000 [2016.06.08 15:30] RSI_Grabber.1.1 XAUUSD,M30: 0 RSI_Grabber.1.1 XAUUSD,M30: 11213.3288 RSI_Grabber.1.1 XAUUSD,M30: 0
Я видимо один такой сверх тупой =) что не могу справиться с такой простой функцией ? пока я вижу что ошибку 134 отправляет только OrderSend но никак не AccountFreeMarginCheck
Нет я всё равно видимо дурак, подождал всяких обновлений по терминалу, еще раз разбираюсь, хоть тресни
просачивается через условие
и печатает в логе
сначала при первом Print что ошибок нет = 0, потом пишет при второй проверке что оставшаяся маржа будет больше 0 (11213.3288), и что ошибок опять нет = 0 и все равно хрен там
Я видимо один такой сверх тупой =) что не могу справиться с такой простой функцией ? пока я вижу что ошибку 134 отправляет только OrderSend но никак не AccountFreeMarginCheck
Заметьте, что значение, возвращаемое функцией GetLastError(), обнуляется после первого вызова. Поэтому первый Print() в коде всегда будет выводить 0. От этой строки проку нет никакого.
Соответственно, последовательность строк:
Print(GetLastError()); if(GetLastError()==134){ return(0); }
также никогда не приведет к выходу по ошибке. Чтобы получить значение GetLastError() и при этом распечатать его, а затем использовать в сравнении, необходимо кешировать ее значение. Например, так:
int error = GetLastError(); Print("error = ", error); if (error == ...)
В документации написано иначе.
https://www.mql5.com/ru/docs/check/getlasterror
А у меня в справке написано обратное )
- docs.mql4.com
Пробовал закешировать, одна фигня
Придется наверно в Сервисдеск написать, пусть пояснят, почему AccountFreeMarginCheck не возвращает 134 ошибку
Пробовал закешировать, одна фигня
Придется наверно в Сервисдеск написать, пусть пояснят, почему AccountFreeMarginCheck не возвращает 134 ошибку
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
То ли я не понимаю чего то , тол и лыжи не едут, получается что AccountFreeMarginCheck возвращает не то, в итоге не получается настроить советник для маркета
при недостатке средств через такое условие проходит почему то
в итоге AccountFreeMarginCheck(Symbol(),OP_BUY,lotsib) получается больше нуля (margueCheck=350.452962), но когда отсылается ордер - возвращает что он меньше нуля (это сообщает сам тестер - FreeMargin: -64.87) - я в ступоре