sergey250581:
...Обьясните какая разница между ними?
Процедуры vs. ООП
И какой способ лучше использовать в своем советнике?
Дык, а хто его знает...
Решил написать код изменения стоп-лосса (трейлинг) в своем советнике. Поискал примеры на форуме и нашел два способа изменения стопа:
1. ...После заполнения структуры вызывается функция OrderSend().
2. ... используется метод PositionModify из торгового класса CTrade стандартной библиотеки.
Обьясните какая разница между ними? И какой способ лучше использовать в своем советнике?
Стандартная библиотека предоставлена в исходных кодах, что снимает очень многие вопросы.
Откройте файл Trade\Trade.mqh стандартной библиотеки, и найдите имплементацию метода PositionModify. Вы увидите следующее:
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
{
//--- check stopped
if(IsStopped(__FUNCTION__))
return(false);
//--- clean
ClearStructures();
//--- setting request
m_request.action=TRADE_ACTION_SLTP;
m_request.symbol=symbol;
m_request.magic =m_magic;
m_request.sl =sl;
m_request.tp =tp;
//--- action and return the result
return(OrderSend(m_request,m_result));
}
То есть, этот метод просто включает пару дополнительных действий, после чего - использует все тот же OrderSend(), и, соответственно, вся разница именно в этих самых дополнительных действиях.
Лично на мой взгляд, все упирается в реализацию возможностей ООП в вашем советнике. Если вы кодите "по-старинке", используя процедурный подход MQL4 - вам, вероятно, будет целесообразно использовать первый вариант. Скорее всего, оно так и есть.
Использовать объект CTrade целесообразно, если у вас имеется развитая структура классов, которая использует многие возможности Стандартной Библиотеки.

- www.mql5.com

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Решил написать код изменения стоп-лосса (трейлинг) в своем советнике. Поискал примеры на форуме и нашел два способа изменения стопа:
1. В статье "Как создать свой Trailing Stop"https://www.mql5.com/ru/articles/134 сначала подготавливаеться структура торгового запроса:
Дальше перед выполнением модификации заполняем поля sl и tp структуры MqlTradeRequest. Переменной m_request.sl присваивается требуемое значение Стоп Лосс, переменной m_request.tp - существующее значение Тейк Профит (его оставляем без изменений); остальные поля уже заполнены при выполнении метода Init(). После заполнения структуры вызывается функция OrderSend().2. В статье "Рецепты MQL5 - Как не получить ошибку при установке/изменении торговых уровней?" https://www.mql5.com/ru/articles/643 для модификации позиции используется метод PositionModify из торгового класса CTrade стандартной библиотеки.
Обьясните какая разница между ними? И какой способ лучше использовать в своем советнике?