Ted-trader:
Подскажите функцию закрытия имеющегося ордера при поступления сигнала от индикатора , индикатор рисует одну линию жёлтую или красную в зависимости от тренда
советник открывает 1 позицию по тренду от индикатора и при появлении противоположного сигнала должен закрыть ордер и открыть новый в противоположном направлении
Ну так вставьте код закрытия, перед открытием
void OpenPos() { int res; double SSYellow=iCustom(Symbol(),0,"Scalper",SSPeriod,Filter,Width,1,0); double SSRed=iCustom(Symbol(),0,"Scalper",SSPeriod,Filter,Width,2,0); double TP,SL; //--- sell conditions if(SSYellow>SSRed) { ClosePositions(Symbol(),OP_BUY,MAGIC); res=OrderSend(Symbol(),OP_SELL,Lot(),Bid,Slip,SL,TP,"",MAGIC,0,Yellow); return; } //--- buy conditions if(SSRed>SSYellow) { ClosePositions(Symbol(),OP_SELL,MAGIC); res=OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slip,SL,TP,"",MAGIC,0,Red); return; } //--- } //--------------------------//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Закрытие позиций по рыночной цене | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ void ClosePositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=k-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect(); } } } } }
Вообще, нужно видеть код не одним куском, неизвестно, что у вас и где выполняется. Но суть надеюсь поняли
Vitaly Muzichenko:
Ну так вставьте код закрытия, перед открытием
Вообще, нужно видеть код не одним куском, неизвестно, что у вас и где выполняется. Но суть надеюсь поняличё
чёт у меня не получается , вот весь код
input double StopLoss = 500; input double TakeProfit = 500; input double Slip = 50; input double Procent = 10; input double Lots = 0.05; //---- extern int SSPeriod = 16; extern int Slipe = 3; extern int Filter = 0; extern int Width = 0; extern int MAGIC=20141020; //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void OpenPos() { int res; double SSYellow=iCustom(Symbol(),0,"Scalper",SSPeriod,Slipe,Filter,Width,1,1); double SSRed=iCustom(Symbol(),0,"Scalper",SSPeriod,Slipe,Filter,Width,2,2); double TP,SL; //--- sell conditions if(SSYellow>SSRed) { if(StopLoss>0)SL=Bid+StopLoss*Point; else SL=0; if(TakeProfit>0)TP=Bid-TakeProfit*Point; else TP=0; res=OrderSend(Symbol(),OP_SELL,Lot(),Bid,Slip,SL,TP,"",MAGIC,0,Red); return; } //--- buy conditions if(SSRed>SSYellow) { if(StopLoss>0)SL=Ask-StopLoss*Point; else SL=0; if(TakeProfit>0)TP=Ask+TakeProfit*Point; else TP=0; res=OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slip,SL,TP,"",MAGIC,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lot() { double lot; if(Lots==0) { double Prots=Procent/100; lot=MathFloor(AccountFreeMargin()*Prots/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);// Лоты } else lot=Lots; return(lot); } //+------------------------------------------------------------------+ int CountTrades() { int count=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++; } } } return(count); } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { double SSYellow=iCustom(Symbol(),0,"Scalper",SSPeriod,Slipe,Filter,Width,1,1); double SSRed=iCustom(Symbol(),0,"Scalper",SSPeriod,Slipe,Filter,Width,2,2); Comment( "\n Red ",SSRed, "\n Yellow ",SSYellow); if(CountTrades()<1) OpenPos(); // if(StopLoss==0 && TakeProfit==0)ClosePos(); //--- } //+------------------------------------------------------------------+

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите функцию закрытия имеющегося ордера при поступления сигнала от индикатора , индикатор рисует одну линию жёлтую или красную в зависимости от тренда
советник открывает 1 позицию по тренду от индикатора и при появлении противоположного сигнала должен закрыть ордер и открыть новый в противоположном направлении