Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Игорь, у Вас в скрипте ошибка. Вот здесь нужно умножать на tickvalue, а не делить:
В вашем варианте возвращает правильное значение потому что у Вас правильное tickvalue = 1, и делить на него или умножать, без разницы. У меня даже при правильном варианте расчёта с моими вводными данными получается 5USD. Вопрос почему функция возвращает неправильное значение. И этот вопрос к разработчикам или к брокерам, даже не знаю.
Игорь, у Вас в скрипте ошибка. Вот здесь нужно умножать на tickvalue, а не делить:
В вашем варианте возвращает правильное значение потому что у Вас правильное tickvalue = 1, и делить на него или умножать, без разницы. У меня даже при правильном варианте расчёта с моими вводными данными получается 5USD. Вопрос почему функция возвращает неправильное значение. И этот вопрос к разработчикам или к брокерам, даже не знаю.
Да странно. Проверил - В МТ4 Золото размер контракта тот же, мин.объем тот же, пойнты те же, выдаёт стоимость тика 1. А в МТ5 0,1.
Сдаётся кто-то где-то что-то забыл поменять..
Игорь, у Вас в скрипте ошибка. Вот здесь нужно умножать на tickvalue, а не делить:
В вашем варианте возвращает правильное значение потому что у Вас правильное tickvalue = 1, и делить на него или умножать, без разницы. У меня даже при правильном варианте расчёта с моими вводными данными получается 5USD. Вопрос почему функция возвращает неправильное значение. И этот вопрос к разработчикам или к брокерам, даже не знаю.
формула то правильная, как минимум для мажоров и для MQL4 - вспомнил где использовал, расчет БУ для группы ордеров
попробовал под MQL5, что то не то по золоту показывает
2020.03.14 20:05:11.012 tst (XAUUSD,MN1) profit = -1000.0
2020.03.14 20:05:11.012 tst (XAUUSD,MN1) SYMBOL_TRADE_TICK_VALUE = 0.5
в MT4 этот же код:
2020.03.14 20:07:36.543 tst XAUUSD,H1: SYMBOL_TRADE_TICK_VALUE = 1.0
2020.03.14 20:07:36.543 tst XAUUSD,H1: profit = -50.0
Игорь, вдумайтесь в смысл вашей формулы:
Вы количество пунктов - "(bid - orderOpenPrice) / _Point" делите на стоимость одного пункта - "tvalue" (предположим что лот равен 1). И что Вы хотите получить на выходе?!
В магазине Вы же количество бутылок пива умножаете на стоимость одной бутылки, чтобы получить сумму которую нужно заплатить.
Да странно. Проверил - В МТ4 Золото размер контракта тот же, мин.объем тот же, пойнты те же, выдаёт стоимость тика 1. А в МТ5 0,1.
Сдаётся кто-то где-то что-то забыл поменять..
Именно! Функция SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE) возвращает неверное значение и это факт.
Игорь, вдумайтесь в смысл вашей формулы:
Вы количество пунктов - "(bid - orderOpenPrice) / _Point" делите на стоимость одного пункта - "tvalue" (предположим что лот равен 1). И что Вы хотите получить на выходе?!
В магазине Вы же количество бутылок пива умножаете на стоимость одной бутылки, чтобы получить сумму которую нужно заплатить.
уберите тут пп , тогда получите формулу, где умножение будет - как Вы пишите, я же писал, что дело давнее не помню уже где эту часть расчетов брал
но суть одна, что стоимость пп. "в деньгах" это отношение TICK_VALUE к TICK_SIZE
не понятно почему в MQL4 и в MQL5 одна и та же формула расчета дает разные результаты - пока даже не знаю что предположить
Нет нет нет, Игорь. Эта часть формулы:
как правило равна единице (1), т.к. "SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)" и "_Point " на большинстве символов равны. Смысл этой части формулы заключается только в том, если размер минимального изменения цены больше размера одного пункта. Например если какой то инструмент скачет сразу на 10 пунктов или на 5, бывают и такие.
Отсюда делаем вывод, что если частное в большинстве случаев равно 1, то:
Или просто:
В нашем случае с золотом всё именно так и обстоит. Далее читайте мой предыдущий пост.
P.S. Ваши расчёты спасает только то что на парах которые вы считаете SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)=1 Запустите скрипт на EURGBP или USDJPY (где tickvalue не равен 1), сравните с реальным профитом открытой сделки, и вы удивитесь результату.
Нет нет нет, Игорь. Эта часть формулы:
как правило равна единице (1), т.к. "SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)" и "_Point " на большинстве символов равны. Смысл этой части формулы заключается только в том, если размер минимального изменения цены больше размера одного пункта. Например если какой то инструмент скачет сразу на 10 пунктов или на 5, бывают и такие.
Отсюда делаем вывод, что если частное в большинстве случаев равно 1, то:
Или просто:
В нвшем случае с золотом всё именно так и обстоит. Далее читайте мой предыдущий пост.
ОК, буду иметь ввиду, но кажется деление на _Point в моем примере нужно было для работы на индексах, в общем где то на форумах, нашел, проверил, потом пару раз пользовался при расчете уровня БУ - на валютах нормально работает
Нет нет нет, Игорь. Эта часть формулы:
как правило равна единице (1), т.к. "SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)" и "_Point " на большинстве символов равны. Смысл этой части формулы заключается только в том, если размер минимального изменения цены больше размера одного пункта. Например если какой то инструмент скачет сразу на 10 пунктов или на 5, бывают и такие.
Отсюда делаем вывод, что если частное в большинстве случаев равно 1, то:
Или просто:
В нашем случае с золотом всё именно так и обстоит. Далее читайте мой предыдущий пост.
P.S. Ваши расчёты спасает только то что на парах которые вы считаете SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)=1 Запустите скрипт на EURGBP или USDJPY (где tickvalue не равен 1), сравните с реальной стоимостью тика открытой сделки, и вы удивитесь результату.
Для индексов брал отсюда
С не форекс-инструментами не так просто
Идентификатор
Описание
Формула
SYMBOL_CALC_MODE_FOREX
Forex mode – расчет прибыли и маржи для Форекс
Margin: Lots * Contract_Size / Leverage * Margin_Rate
Profit: (close_price - open_price) * Contract_Size*Lots
SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE
Forex No Leverage mode – расчет прибыли и маржи для Форекс без учета плеча
Margin: Lots * Contract_Size * Margin_Rate
Profit: (close_price - open_price) * Contract_Size * Lots
SYMBOL_CALC_MODE_FUTURES
Futures mode – расчет залога и прибыли для фьючерсов
Margin: Lots * InitialMargin * Margin_Rate
Profit: (close_price - open_price) * TickPrice / TickSize*Lots
SYMBOL_CALC_MODE_CFD
CFD mode – расчет залога и прибыли для CFD
Margin: Lots * ContractSize * MarketPrice * Margin_Rate
Profit: (close_price - open_price) * Contract_Size * Lots
Да, Виталий, хороший способ расчёта. Но в этом случае прибыль мы получим в единицах котируемой валюты инструмента. А если нужно получить в валюте депозита, необходимо прибегнуть к дополнительным вычислениям или использовать функцию
Хотелось бы всё таки узнать мнение разработчиков, почему на золоте эта функция возвращает неверное значение.
У Вас неправильное понимание значения MODE_TICKVALUE:
Мы не используем эту величину в своих расчетах профитов.
О сложных случаях пересчета: при отсутствии прямого курса используется конвертация через доллар.
У многих брокеров цена тика для металлов неправильная установлена и соответственно параметр
выдаёт неверное значение. Это в обновлениях может как-то полечиться или искать обходные пути?