Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 658
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Сейчас проверим простеньким советником...
Да не нужно проверять. Логика такая же, как в MQL4: Profit, Commission и Swap - отдельные сущности.
Сейчас проверим простеньким советником...
Владимир, суть в том, что на четвёрке делаю так:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Как это сделать в пятом?
Владимир, суть в том, что на четвёрке делаю так:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Как это сделать в пятом?
Покажите пожалуйста это кодом, вот прямым кодом на mql5 и желательно без извращений
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
{
return(PositionGetDouble(POSITION_PROFIT));
}
Это почти невозможно! Выцепил из СБ, прямой код
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
Забыли в документацию вписать, но такое "POSITION_COMMISSION" работает?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.07.19 12:40
Свойство POSITION_COMMISSION в тестере (RoboForexEU-MetaTrader 5) возвращает всегда нулевую комиссию.
Также POSITION_COMMISSION (== 8) отсутствует в справке и метаэдиторе (подсветка), но компилятору знакомо. Комиссию позиции не сложно определить другим (рабочим) методом. Свойство POSITION_COMMISSION - рудимент?
{
double Commission = ::PositionGetDouble(POSITION_COMMISSION);
// На случай, если POSITION_COMMISSION не работает
if (Commission == 0)
{
const ulong Ticket = MT4ORDERS::GetPositionDealIn();
if (Ticket > 0)
{
const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);
if (LotsIn > 0)
Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
}
}
return(Commission);
}
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих
fxsaber, 2016.10.29 16:23
Библиотеку MT4Orders не навязываю. Но, может, будет проще просто вызвать старый добрый OrderCommission?
Все же работает не только на хэдж-счетах, но и на нетто.
Сейчас проверим простеньким советником...
Вот: POSITION_PROFIT показывает прибыль позиции
. При этом не учитывается своп и тому подобное.
Владимир, суть в том, что на четвёрке делаю так:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Как это сделать в пятом?
Комиссия это настолько непредсказуемая субстанция, что её можно определить только у закрытой сделки. У открытой позиции можно узнать только текущую прибыль (которая не учитывает ни влияние свопа, ни влияние комиссий) и своп. Вот код:
поставьте точку останова на строке " m_trade.PositionClose(Symbol());" и запустите тестирование на истории. Когда тестер остановится на точке останова, сравните цифры в столбцах Прибыль и Своп с цифрами, которые распринтуются в Журнал тестера.
Вот: POSITION_PROFIT показывает прибыль позиции
. При этом не учитывается своп и тому подобное.
Ок. Разобрались.
Решение fxsaber хорошее, применил.
В принципе, свою прогу с MQL4 перевел на MQL5 почти без проблем.
Нюансы - выше.
Всем огромное спасибо!