Нашел ошибку. Тупо-автоматически счёл, что при использовании CSymbolInfo перед получением любых данных по символу достаточно вызвать рефреш.
В результате получил ошибку 4002
ERR_WRONG_INTERNAL_PARAMETER |
4002 |
Ошибочный параметр при внутреннем вызове функции клиентского терминала |
Проверил параметры - вроде все на местах. Полез в дебри, нашёл указанный в первом посте вариант (ксати, действительно дырявый!) после чего задал вопрос на форуме.
Сегодня вечерком глянул - ответов нету, решил всё же параметры функции OrderCalcMagin распечатать.
Обнаружил, что CSymbolInfo.Ask() выдаёт ноль, ну и потом быстро раскрутил в чём прикол...
double CMarketDriver::TranslateLots(double in) // Переводит inLot заданный в процентах от депозита в outLot заданный в рыночных терминах. { double LotMargin=0; SymInfo.RefreshRates(); // Ошибка была здесь, вставил Refresh() вместо RefreshRates() if(in>0.000001) { if(!OrderCalcMargin(ORDER_TYPE_BUY, SymInfo.Name(), 1, SymInfo.Ask(), LotMargin )) Print("OrderCalcMargin Error! GetLastError = ",GetLastError()); } else if(in<-0.000001) { if(!OrderCalcMargin(ORDER_TYPE_SELL, SymInfo.Name(), 1, SymInfo.Bid(), LotMargin)) Print("OrderCalcMargin Error! GetLastError = ",GetLastError()); } else return 0; Print(LotMargin," // переменная для получения значения маржи / на лот"); double out=(in*AccInfo.Equity()/100)/LotMargin; Print(out," //out"); return out; }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Например AUDCAD ? Или NZDJPY ?
Теоретически должно решаться через SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL) или SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_MAINTENANCE),
а практически на MetaQuotes-демо аккаунте они обе равны 0.
А считать надо. Причём правильно. И желательно в общем виде для любого символа.
Чего то у меня моск заплетается, сходу построить формулу не могу. :)
Help!