Есть необходимость переводить текущий профит в пункты. Путаюсь делать это так:
Ожидая увидеть количество пунктов получаю огромные числа типа -2400000. Учитывая что стопы у сделок не больше 100 такого количества пунктов быть не может.
Почему деление профита в деньгах на стоимость пункта не дает профита в пунктах и как мне получить искомое значение?
У Вас в делителе не стоимость пункта, а размерность пункта. У EURUSD Point равен 0,00001 на пятизнаке. Вот и посчитайте, что у Вас будет при профите минус 24 дол.
Стоимость пункта дается для одного лота, формула для вычисления пунктов будет следующей:
Кол-во пунктов = профит / (ст-ть пункта * lot)
ветром навеенное КСТАТИ - формула "полученный_профит/(цена_пункта * объём) насколько может быть "не int" ?
без свопов+комиссии, но со спредом ??
У Вас в делителе не стоимость пункта, а размерность пункта. У EURUSD Point равен 0,00001 на пятизнаке. Вот и посчитайте, что у Вас будет при профите минус 24 дол.
Стоимость пункта дается для одного лота, формула для вычисления пунктов будет следующей:
Кол-во пунктов = профит / (ст-ть пункта * lot)
Получается что мне надо:
CPositionInfo positionInfo;
...
double profit = positionInfo.Profit() / (pointPrice * positionInfo.Volume());
Но где мне взять цену пункта?
Я пробовал вариант от сюда https://www.mql5.com/ru/forum/203707/page2 но оно всегда возвращает 1
void GetPointPrice() { double tickValue = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); double stts = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); string profitCurrency = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT); string accountCurrency = AccountInfoString(ACCOUNT_CURRENCY); if (profitCurrency != accountCurrency) { string sDirect = profitCurrency + accountCurrency; if (IsSymbolExists(sDirect)) return tickValue / stts * SymbolInfoDouble(sDirect, SYMBOL_BID); else { string sReverse = accountCurrency + profitCurrency; if (IsSymbolExists(sReverse)) return tickValue / stts / SymbolInfoDouble(sReverse, SYMBOL_BID); else return DBL_MAX; } } else return tickValue / stts; } bool IsSymbolExists(string sSymbol) { ResetLastError(); SymbolInfoDouble(sSymbol, SYMBOL_BID); int error = GetLastError(); return !(error == 5040 || (error >= 4301 && error <= 4303)); }
Может в стандартных классах MT5 уже есть решение данной проблемы?
Пробовал еще так согласно Кол-во пунктов = профит / (ст-ть пункта * lot)
double SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE); double pointProfit = positionInfo.Profit() / (oneLotPointPrice * currentLot);
Видимо со стоимостью пункта для 1 лота что-то не клеится...
При лоте 0.01 и профите -0.3 кол-во пунктов получается -0.0003
- 2017.06.11
- www.mql5.com
скорее всго у Вас профит не верно посчитан
попробуйте так:
profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_COMMISSION)+PositionGetDouble(POSITION_SWAP);
формула у Вас верная:
Кол-во пунктов = профит / (ст-ть пункта * lot )
Пробовал еще так согласно Кол-во пунктов = профит / (ст-ть пункта * lot)
Видимо со стоимостью пункта для 1 лота что-то не клеится...
При лоте 0.01 и профите -0.3 кол-во пунктов получается -0.0003
Это получается в котировках. Если считать, что позиция открыта на цене N+0.0 и закрыта N-0.0003 то это будет 30 пятизначных пунктов. Отсюда следует: Чтобы получить пункты надо это значение разделить на _Point или SymbolInfoDouble(_Symbol, SYMBOL_POINT)
Это получается в котировках. Если считать, что позиция открыта на цене N+0.0 и закрыта N-0.0003 то это будет 30 пятизначных пунктов. Отсюда следует: Чтобы получить пункты надо это значение разделить на _Point или SymbolInfoDouble(_Symbol, SYMBOL_POINT)
не
не
Обоснуйте.
может вот так ?
вот так:
(PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_COMMISSION)+PositionGetDouble(POSITION_SWAP))/(PositionGetDouble(POSITION_VOLUME)*SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE))
Обоснуйте.
мою строчку попробуйте
я сам таким пользуюсь, чтобы определить минимальный профит в пунктах на закрытие
ну и к тому же, стоимость пункта для некоторых валютных пар зависима от цены.
соответственно нужно её считать самому на момент открытия позиции и по цене открытия позиции
мою строчку попробуйте
я сам таким пользуюсь, чтобы определить минимальный профит в пунктах на закрытие
Зачем мне что-то проверять когда я и так знаю что это неверно. Вы можете пользоваться чем угодно. Покажите пожалуйста где в документации вы нашли
PositionGetDouble(POSITION_COMMISSION)
POSITION_VOLUME | Объем позиции | double |
POSITION_PRICE_OPEN | Цена позиции | double |
POSITION_SL | Уровень Stop Loss для открытой позиции | double |
POSITION_TP | Уровень Take Profit для открытой позиции | double |
Текущая цена по символу | double | |
POSITION_SWAP | Накопленный своп | double |
POSITION_PROFIT | Текущая прибыль | double |
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть необходимость переводить текущий профит в пункты. Путаюсь делать это так:
Ожидая увидеть количество пунктов получаю огромные числа типа -2400000. Учитывая что стопы у сделок не больше 100 такого количества пунктов быть не может.
Почему деление профита в деньгах на стоимость пункта не дает профита в пунктах и как мне получить искомое значение?