Ошибки, баги, вопросы - страница 3451
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
К сожалению, в такой реализации при добавлении нового поля требуется дописывать метод ToString.
Вот такой вариант:
//---
Результат:
Помогите разобраться. Если использовать стандартные модули MoneyManagement - даже можно генератором сделать - OrderCalcMargin возвращает true, но margin при этом всегда 0.
Вот вызов функции в AccountInfo
при margin 0 дальнейшее выполнение кода ведёт к использованию maxvolume символа. 10000000 лотов
Т.к. OrderCalcMargin какая-то встроенная функция без возможности дебага не могу определить что идёт не так.
Вывел переменные чтобы проверить хотя бы на значения:
В документации написано что SYMBOL_CALC_MODE_FUTURES и SYMBOL_CALC_MODE_EXCH_FUTURES запрашивает для калькуляции маржи следующее
при вызове функции Lots is 1.0, Init Margin is 15000, Margin Rate is 1. Каким образом это выливается в margin 0.0 понять не могу.
Пробовал различные символы фьючей - истекшие, текущие - результат один и тот же.
Проверить поведение можно просто сгенерировав советника и добавив MoneySizeOptimized в части где указываешь moneyManagement, с остальными модулями МаниМенеджмента такой же результат. Что ожидаемо потому что дело в этой функции OrderCalcMargin() класса AccountInfo.
Заранее спасибо!
Вот такой вариант:
Благодарю Вас за время и усилия, что уделили моей задаче! Ваш вариант формально выполняет требуемое, при этом в некоторых ситуациях пользоваться им очень сложно: получить значение поля.
Благодарю Вас за время и усилия, что уделили моей задаче! Ваш вариант формально выполняет требуемое, при этом в некоторых ситуациях пользоваться им очень сложно: получить значение поля.
Можно попробовать добавить имя переменной, как строковой параметр. А доступ к значению через CHashMap.
Отсутствие ошибки в выделенной строке (указатель равен объекту) - правильно?
Вроде, все однозначно, но компилятор ругается.
Вроде, все однозначно, но компилятор ругается.
Ваш код содержит несколько ошибок. Давайте разберем их по порядку:
A* a1 = A(); A* a2 = &A();
Здесь вы пытаетесь присвоить временный объект типа A указателю a1 . Это вызовет ошибку компиляции, потому что A() создает временный объект, который уничтожается сразу после этого выражения, и вы не можете безопасно присвоить его указателю. Вместо этого, вы должны использовать оператор new для создания объекта в динамической памяти:
В случае с a2 , вы пытаетесь получить адрес временного объекта, что также недопустимо.
A* a1 = new B(0); // fatal compiler error: constructor of class 'B' not found A* a2 = new B<int>(0); // OK
Здесь вы пытаетесь создать объект типа B с помощью шаблонного параметра, который не указан. Компилятор не может определить, какой тип использовать для T в B(0) , поэтому возникает ошибка. Вместо этого, вы должны явно указать тип параметра, как вы делаете в следующей строке:
Это исправит ошибку компиляции. Надеюсь, это помогло! Если у вас есть еще вопросы, не стесняйтесь задавать.
Ваш код содержит несколько ошибок.
Проверьте пожалуйста корректность работы функции советника на каком-нибудь фьюче. Похоже критический баг для расчета маржи - всегда возвращает 0.
Если выдаёт значение отличное от нуля напишите что за билд?
Спасибо!
class A {}; template <typename T> class B : public A { public: B( T ) {} }; void OnStart() { A* a1 = new B(0); // fatal compiler error: constructor of class 'B' not found A* a2 = new B<int>(0); // OK }