Кто-нибудь может объяснить почему мой код не может открыть новую позицию на том же баре, на котором старая позиция закрыта?
Потому что после ОрдерКлоус всегда стоит ретурн ;)
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
return(0); // exit
Ага! Каким-то я невнимательным стал после того как мне 40 стукнуло (и прямо по голове). Пора о ревматизьме волноваться и на погоду ругаться, а не о форексе думать :0)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//Trading Begin-------------------------------------------------+ double Lots =NormalizeDouble(AccountFreeMargin()*Risk*AccountLeverage()/100000,1); double Spread =Ask-Bid; int Slippage =Spread/Point; int cnt, ticket, total; total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { //Closing LONG position-----------------------------------------+ if(OrderType()==OP_BUY) { if(sell==1) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); return(0); // exit } } //Closing SHORT position----------------------------------------+ else { if(buy==1) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet); return(0); // exit } } } } total=OrdersTotal(); if(total<1) // no opened orders identified { //Sending OPEN LONG order---------------------------------------+ if(buy==1) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES } else Print("Error opening BUY order : ",GetLastError()); return(0); } //Sending OPEN SHORT order---------------------------------------+ if(sell==1) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); }Заметьте что сначала код закрывает текущую позицию, потом проверяет открытые позиции и, если OrdersTotal()<1, то тут же открывается новая позиция. Только почему-то новая позиция не открывается на том же баре. Она либо совсем не открывается либо открывается с задержкой при получении нового торгового сигнала. Кто-нибудь может объяснить почему мой код не может открыть новую позицию на том же баре, на котором старая позиция закрыта?