Переделать советник помогите!)

 

Здравствуйте!

Имеется советник, который открывает позиции на пробой выстраиваемой мною линии, при закрытии свечи ниже линии открывается селл, выше линии соответственно бай.

Подскажите пожалуйста что надо добавить в код советника, чтобы позиция открывалась только один раз и дальше советник ничего не отслеживал уже.

//+------------------------------------------------------------------+
//|                                                         _ЛУЧ.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern double stoploss=1300.01;
extern int X=50;
extern double volume=1.0;
extern int slippage_open=30;
extern int slippage_close=30;
extern int ДЛИНА_ЛИНИИ_ТРЕНДА=50;
extern color arrow_color=CLR_NONE;
string name;
  int bar;
  int magic=555;
int init(){

double price=WindowPriceOnDropped();if(IsTesting())price=Close[1];
datetime time=WindowTimeOnDropped();if(IsTesting())time=Time[1];
 name="luch ";
datetime time2=time+ДЛИНА_ЛИНИИ_ТРЕНДА*Period()*60;
if(ObjectCreate(name,OBJ_TREND,0,time,price,time2,price)){
ObjectSet(name,OBJPROP_TIME2,time2);
ObjectSet(name,OBJPROP_RAY,true);
}
WindowRedraw();
return (0);
}
int start()
  {


RefreshRates();

double value_1=ObjectGetValueByShift_(name,1);
double value_2=ObjectGetValueByShift_(name,2);
if(Close[1]>value_1&&Close[2]<value_2){buy();}
if(Close[1]<value_1&&Close[2]>value_2){sell();}
modify();

   return(0);
  }
  
  
  
double ObjectGetValueByShift_(string name,int bar){
double bar1=iBarShift(Symbol(),0,ObjectGet(name,OBJPROP_TIME1),false);
double bar2=iBarShift(Symbol(),0,ObjectGet(name,OBJPROP_TIME2),false);
double price1=ObjectGet(name,OBJPROP_PRICE1);
double price2=ObjectGet(name,OBJPROP_PRICE2);
if((bar1-bar2)!=0)double naklon=(price1-price2)/(bar1-bar2);
double price=price1-(bar1-bar)*naklon;
if(bar2==0)price=ObjectGetValueByShift(name,bar);
return (price);
}


void sell(){//Print("sell");
bool OrderSend_=true;
for(int i=OrdersTotal()-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
OrderClose(OrderTicket(),OrderLots(),Bid,slippage_close,0);}
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol())OrderSend_=false;
}
if(OrderSend_)OrderSend(Symbol(),OP_SELL,volume,Bid,slippage_open,0,0,0,magic,0,arrow_color);
}
void buy(){//Print("buy");
bool OrderSend_=true;
for(int i=OrdersTotal()-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
OrderClose(OrderTicket(),OrderLots(),Ask,slippage_close,0);}
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol())OrderSend_=false;
}
if(OrderSend_)OrderSend(Symbol(),OP_BUY,volume,Ask,slippage_open,0,0,0,magic,0,arrow_color);
}


void modify(){
bool OrderModify_=false;
double stoploss_,takeprofit_;
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
OrderModify_=true;stoploss_=stoploss;
takeprofit_=OrderOpenPrice()+MathAbs(stoploss_-Close[1])+X*Point;}
if(OrderType()==OP_SELL&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
OrderModify_=true;stoploss_=stoploss;
takeprofit_=OrderOpenPrice()-MathAbs(stoploss_-Close[1])-X*Point;}
}//for(int i=0;i<OrdersTotal();i++){
stoploss_=NormalizeDouble(stoploss_,Digits);
takeprofit_=NormalizeDouble(takeprofit_,Digits);
if(OrderTakeProfit()==0||OrderStopLoss()==0)
if(OrderModify_)OrderModify(OrderTicket(),OrderOpenPrice(),stoploss_,takeprofit_,0,CLR_NONE);
}
//+------------------------------------------------------------------+
 
mish987i:

Здравствуйте!

Имеется советник, который открывает позиции на пробой выстраиваемой мною линии, при закрытии свечи ниже линии открывается селл, выше линии соответственно бай.

Подскажите пожалуйста что надо добавить в код советника, чтобы позиция открывалась только один раз и дальше советник ничего не отслеживал уже.

Как вариант, в первых строках функции start() добовляем
if(OrdersTotal()>0) return(0);
 
r772ra:
Как вариант, в первых строках функции start() добовляем



Ага, и прощай, трейлинг.
 
Roger:


Ага, и прощай, трейлинг.


Тады так

if(OrdersTotal()>0) 
   {
   modify(); 
   return(0);
   }
 
Привет трейдерам:) помогите пожалуйста добить советника, кто в этом деле может помочь? напишите в личку пожалуйста, расскажу интересную стратегию, да впринцепи и советник будет тогда=) не могу додуматься как АС и АО в советник добавить, буду очень признателен!
 
mish987i:

Здравствуйте!

Имеется советник, который открывает позиции на пробой выстраиваемой мною линии, при закрытии свечи ниже линии открывается селл, выше линии соответственно бай.

Подскажите пожалуйста что надо добавить в код советника, чтобы позиция открывалась только один раз и дальше советник ничего не отслеживал уже.


int Position(int aaa)
   {//возвращает кол-во открытых позиций выбранного типа
   int bbb=0,i=0 ;
      for(i=0;i<OrdersTotal();i++)
         {//проверяем ордера на принадлежность эксперту
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;
            if(OrderType()==aaa && OrderMagicNumber()== Magic)
               bbb++ ;
         } 
      return(bbb);
   }
Причина обращения: