Как прописать в советнике так, что бы сделка открывалась 1 раз по пересечению нулевой линии MACD ??
маюсь 3 день уже...
Зарание спасибо)
На нулевом баре производите проверку:
double Bar1 = iMACD(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, MODE_MAIN, 1 );
double Bar2 = iMACD(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, MODE_MAIN, 2 );
if ( Bar2 >0 && Bar1 < 0) Sell();
if ( Bar2 < 0 && Bar1 > 0) Buy();
Что-то в таком духе....
Как прописать в советнике так, что бы сделка открывалась 1 раз по пересечению нулевой линии MACD ??
Это невозможно. Любые возможные варианты такой реализации будут запаздывать. А если это пересечение будет происходить следующие баров 10 туда сюда? Причем по паре пипсов. Куда сделки открывать?
Вот сама программа:
datetime dt_Previous_0 = 0; int Start() { if (Time[0] == dt_Previous_0 ) return; dt_Previous_0 = Time[0]; if (OrdersTotal() != 0) return; double d_Bar1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1 ); double d_Bar2 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2 ); if ( d_Bar2 >0 && d_Bar1 < 0) Sell(); if ( d_Bar2 < 0 && d_Bar1 > 0) Buy(); return; } void Sell() { ........ } void Buy() { ........... }
Что-то в таком духе....
Спасибо за совет))
Но вот как сделать так, чтоб сделка открывалась одна, а не целая туча??
Спасибо за совет))
Но вот как сделать так, чтоб сделка открывалась одна, а не целая туча??
Сделать проверку на наличие открытых ордеров бай и селл.
Спасибо за совет))
Но вот как сделать так, чтоб сделка открывалась одна, а не целая туча??
Спасибо за совет))
Но вот как сделать так, чтоб сделка открывалась одна, а не целая туча??
Что-то не пойму я, какая куча ? Открытым будет всегда один ордер...для этого и мы и пишем:
if (OrdersTotal() != 0) return;
Вот, наблюдается такая картина)
И Ваш совет опять помог)) теперь открывается 1 сделка и после ее закрытия открывается новая...
Как прописать, что бы сделка закрывалась по сигналу индикатора?
datetime dt_Previous_0 = 0; int Start() { if (Time[0] == dt_Previous_0 ) return; dt_Previous_0 = Time[0]; if (OrdersTotal() != 0) return; double d_Bar1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1 ); double d_Bar2 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2 ); if ( d_Bar2 >0 && d_Bar1 < 0){ Sell(); CloseBuy(); } if ( d_Bar2 < 0 && d_Bar1 > 0) { Buy(); CloseSell() return; } void Sell() { ........ } void Buy() { ........... } void CloseBuy(); { ... } void CloseSell() { ... }Something like this....
Something like this....
Это не совсем правильно OrdersTotal() возвращает все ордера по всем меджикам и по всем символам ....
Вам нужно изначально проверить наличие ваших ордеров через цикл
Примерно так
for (i=OrdersTotal(); i>=0; i-- ) if(OrderSelect(i,SELECT_BY_POS)==true) if(OrderSymbol()==Symbol() ) if(OrderMagicNumber()==Magic ) { n++; if ( OrderType()==0 ) { b++; } if ( OrderType()==1 ) { s++; } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как прописать в советнике так, что бы сделка открывалась 1 раз по пересечению нулевой линии MACD ??
маюсь 3 день уже...
Зарание спасибо)