Открытие и закрытие в пределах бара ?

 
Не могу добится закрытия и открытия на одном баре одновременно,
что я делаю не так ?
#include <stdlib.mqh>

extern double Lots=0.1;
extern int Magic = 1;

int order_MgcNum=0, err=0, ticket=0, res;
bool result = True;

int start() {
int total,cnt,pos,order;

double cci=iCCI(NULL,0,14,0,1);

if (cci<0) {
    total=OrdersTotal(); pos=0;
    for (cnt=0;cnt<total;cnt++) {
        OrderSelect(cnt, SELECT_BY_POS);
        if ((OrderSymbol() == Symbol())&&(OrderMagicNumber()==Magic)) {
            order=OrderTicket(); pos=1;
            if (IsTradeAllowed() && (OrderType() == OP_BUY)) { 
               RefreshRates();
               result = OrderClose(order,Lots,Bid,3);
               if (!result) {
                  err=GetLastError(); Print("Error(",err,") closing Long (BUY) : ",ErrorDescription(err));
                  } return(0);
               }
            }
        }
    if ((pos==0) && IsTradeAllowed()) {
        RefreshRates();
         res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,0,Magic,0);
         if (res<0) {Alert("Ошибка открытия ордера SELL #", GetLastError()); return (0);}              
         return(0);
        }
    }

if (cci>0) { 
    total=OrdersTotal(); pos=0;
    for (cnt=0;cnt<total;cnt++) {
        OrderSelect(cnt, SELECT_BY_POS );
        if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic)) {
            order=OrderTicket(); pos=1;
            if (IsTradeAllowed()&& (OrderType() == OP_SELL)) {
               RefreshRates();
               result = OrderClose(order,Lots,Ask,3);
               if(!result){
                  err=GetLastError(); Print("Error(",err,") closing Short (SELL) : ",ErrorDescription(err));
                  } return(0);
               }
            }
        }
    if ((pos==0) && IsTradeAllowed()) {
        RefreshRates();
         res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,0,Magic,0);
         if (res<0) {Alert("Ошибка открытия ордера SELL #", GetLastError()); return (0);}              
         return(0);
        }
    }
return(0);
} 

 
Ну что, никто не знает как сразу закрыть и открыть противоположный ордер ?
 
AAE писал(а) >>
Ну что, никто не знает как сразу закрыть и открыть противоположный ордер ?

Какой режим тестирования? По всем тикам по идее должно получаться...

 
lea писал(а) >>

Какой режим тестирования? По всем тикам по идее должно получаться...

Нет, быстрый метод.

 
AAE >>:
Ну что, никто не знает как сразу закрыть и открыть противоположный ордер ?

Открыть противоположный двойным объёмом и захлопнуть их через OrderCloseBy()

 
goldtrader писал(а) >>

Открыть противоположный двойным объёмом и захлопнуть их через OrderCloseBy()

Покажите на примере, пожалуйста.

 
AAE писал(а) >>

Покажите на примере, пожалуйста.

Знаменитый перцептрон Решетова

 
goldtrader писал(а) >>

Знаменитый перцептрон Решетова

Ну накрутили, а проще нельзя ?

 
AAE писал(а) >>

Ну накрутили, а проще нельзя ?

Ну так возьмите из всего советника только то что Вас интересует:

{ // reverse
   ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3, Ask + sl * Point, 0, "AI", MagicNumber, 0, Red); 
   Sleep(30000);
   //----
   if(ticket < 0) 
       prevtime = Time[1];
   else 
       OrderCloseBy(ticket, prevticket, Blue);   
} 
 
goldtrader писал(а) >>

Ну так возьмите из всего советника только то что Вас интересует:

Все понял, разобрался, спасибо !

 
AAE >>:
Не могу добится закрытия и открытия на одном баре одновременно,
что я делаю не так ?

Всё намного проще, чем вам советовали.

Для того чтоб и открытие и закрытие в переворотной системе(а я вижу именно такую) происходило на одном баре нужно чтоб проверка на закрытие бара стояла в коде раньше чем проверка на открытие(иначе у вас всегда будет ситуация когда действующий ордер не даёт открыть новый).

if(условие закрытия) закрытие_ордера();
if(условие открытия && OrderTotal==0) открытие_ордера();
Причина обращения: