Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для переменных типа double не корректно использовать условие ==. Рекомендуется сравнивать примерно вот так:
Для переменных типа double не корректно использовать условие ==. Рекомендуется сравнивать примерно вот так:
Вполне резонный, а главное разумный подход. Тока как мне думается, что по крайней мере первая строка должна была выглядеть так:
в лог периодически начали поступать вот такие сообщения
2010.06.15 14:48:09 MemoryException 4915200 bytes not available
что делать ? если нужно отправлю в поддержку, только вот что отправлять незнаю ((
в лог периодически начали поступать вот такие сообщения
2010.06.15 14:48:09 MemoryException 4915200 bytes not available
что делать ? если нужно отправлю в поддержку, только вот что отправлять незнаю ((
Для переменных типа double не корректно использовать условие ==. Рекомендуется сравнивать примерно вот так:
Не хватает оп. памяти. Проверьте размеры динамических массивов, скорее всего, попытка выделить памяти больше, чем имеется.
Суть вопроса была не в этом, если я правильно понял. то в конце пользовательской функции всегда надо ставить оператор return
Вроде ответ о == был по сути. Действительно в функции типа double должен быть где-то return(...). Не обязательно в конце. Использование оператора == в if() return(); может выдать false если у вас LotStep типа 0.1000000000000000001. Тогда не один return не срабатывает и функция ничего не возвращает. Хотя в Вашем случае, скорее всего ретёрну не нравится NormalizeDouble внутри. В Вашем работающем варианте, исправьте конец на return(NormilizeDouble(lot,2)) и посмотрите если он работает. Мне самому интересно.
Вроде ответ о == был по сути. Действительно в функции типа double должен быть где-то return(...). Не обязательно в конце. Использование оператора == в if() return(); может выдать false если у вас LotStep типа 0.1000000000000000001. Тогда не один return не срабатывает и функция ничего не возвращает. Хотя в Вашем случае, скорее всего ретёрну не нравится NormalizeDouble внутри. В Вашем работающем варианте, исправьте конец на return(NormilizeDouble(lot,2)) и посмотрите если он работает. Мне самому интересно.
В конце обязательно, должен быть return(...), но до него может дело и не дойти (если сработает одно из If условий)...
: Renat
Ошибка в том, что Вы забыли о валюте маржи в своих расчетах. Баланс = 100 USD, а маржевые требования = 100 EUR (119 USD).
Поэтому и нельзя совершить операцию - все верно.
Хочу возвратиться к своеу вопросу о правильном вычислении маржи. Как Ренат заметил, в моих вычислениях, LotRqdMgn (необходимая мржа для покупки 1 лота) не учитывает цену валюты. Тут вспомнил что видел такую таблицу
Identifier
Description
Formula
SYMBOL_CALC_MODE_FOREX
Forex mode - calculation of profit and margin for Forex
Margin: Lots*Contract_Size/Leverage
Profit: (close_price-open_price)*Contract_Size*Lots
SYMBOL_CALC_MODE_FUTURES
Futures mode - calculation of margin and profit for futures
Margin: Lots *InitialMargin*Percentage/100
Profit: (close_price-open_price)*TickPrice/TickSize*Lots
SYMBOL_CALC_MODE_CFD
CFD mode - calculation of margin and profit for CFD
Margin: Lots *ContractSize*MarketPrice*Percentage/100
Profit: (close_price-open_price)*Contract_Size*Lots
SYMBOL_CALC_MODE_CFDINDEX
CFD index mode - calculation of margin and profit for CFD by indexes
Margin: (Lots*ContractSize*MarketPrice)*TickPrice/TickSize
Profit: (close_price-open_price)*Contract_Size*Lots
SYMBOL_CALC_MODE_CFDLEVERAGE
CFD Leverage mode - calculation of margin and profit for CFD at leverage trading
Margin: (Lots*ContractSize*MarketPrice*Percentage)/Leverage
Profit: (close_price-open_price)*Contract_Size*Lots
То есть получается что в таблице ошибка: вместо Lots*Contract_Size/Leverage, должно быть Price*Lots*Contract_Size/Leverage.