Торговые системы: Как сократить код торгового эксперта, попутно упростив себе жизнь и уменьшив число возможных ошибок
if( OrderType() == OP_BUY ) { bool modified = OrderModify( OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), OrderExpiration() ); int error = GetLastError(); if( !modified && error != ERR_NO_RESULT ) { Print( "Failed to modify order " + OrderTicket() + ", error code: " + error ); } } else { modified = OrderModify( OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), OrderExpiration() ); error = GetLastError(); if( !modified && error != ERR_NO_RESULT ) { Print( "Failed to modify order " + OrderTicket() + ", error code: " + error ); } }В данном случае "bool modified" - возвращает факт модификации?
Прошу Вас прокомментировать, каким образом возвращается ноль или единица при модификации ордера, вопрос обсуждался на форуме. При этом утверждалось , что факт проведения модификации таким способом не выявляется.
В данном случае проводится проверка достаточного условия в плане безошибочности вызова функции OrderModify(). Переменная modified будет равна false, если вызов OrderModify() привел к ошибке, и true - если вызов OrderModify() прошел без ошибок (кроме случая с ERR_NO_RESULT, который обрабатывается отдельно) . Проверки действительной модификации ордера в данном коде не выполняется, т.к. в этом нет необходимости.
Автору большое спасибо.
С уважением - С.Д.
Уважаемый автор! Мне очень понравился Ваш подход к программированию, но лично у меня возникли небольшие проблеммы. Например, как встроить в код Вашего MACD Sampl-2 следующий фильтр: если предыдущая сделка убыточна, то следующая возможна только в противоположном направлении по сигналам MACD. То есть сигналы MACD на сделку в том же направлении - игнорируются.
Достаточно просто - примерно так (добавления выделены жирным):
int start()
{
...
// check if we can enter the market
if( MacdCurrent * tradeDirection < 0 && ( MacdCurrent - SignalCurrent ) * tradeDirection > 0
&& ( MacdPrevious - SignalPrevious ) * tradeDirection < 0 && MathAbs(MacdCurrent)>(MACDOpenLevel*Point)
&& ( MaCurrent - MaPrevious ) * tradeDirection > 0 )
{
OrderSelect( OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY );
double priceDelta = OrderClosePrice() - OrderOpenPrice();
bool lastOrderWasProfitable = ( MathAbs( priceDelta ) >= Point &&
sign( OrderClosePrice() - OrderOpenPrice() ) == orderDirection() );
if( MathAbs( priceDelta ) < Point || lastOrderWasProfitable || tradeDirection == -orderDirection() )
{
int orderType = iif( tradeDirection > 0, OP_BUY, OP_SELL );
string orderTypeName = iifStr( tradeDirection > 0, "BUY", "SELL" );
...
}
}
...
}
Выражаю Вам признательность, Роман, за приведённый код. Однако он работает не совсем корректно. Он учитывает сделки только в течении суток, а надо минимум 2 недель. Я, к сожалению для себя, не могу справиться с этой задачей. Если у Вас есть время, Роман, буду весьма признателен.
Никаких ограничений по времени, прошедшему со времени последней сделки, в приведенном коде нет. Если он не работает на демо-счете вашего ДЦ, возможно он не предоставляет историю по сделкам более чем за сутки, но это сомнительно. Другой нюанс - приведенный код для простоты подразумевает, что на счете работает только один экземпляр данного эксперта, и нет никаких других сделок (совершаемых на других инструментах или вручную). Если вас не устраивает такое ограничение, тогда вам придется доработать процедуру получения результата последней сделки. Загляните сюда: 'как получить результат последней сделки?' - и поймете в какую сторону копать дальше.
Уважаемый Роман! Весьма признателен Вам за проявленное внимание к моим вопросам. Я обязательно воспользуюсь Вашим советом. Для прояснения вопроса хочу доложить условия тестирования: все тики, один час, 2007г. альпари, реальный счёт. Советник после убыточной сделки, например, продажа, вновь на следующие сутки открывает продажу и наоборот.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
New article Как сократить код торгового эксперта, попутно упростив себе жизнь и уменьшив число возможных ошибок has been published:
Author: Roman Kramar