Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Михаил
13
Михаил  

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

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

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

//+------------------------------------------------------------------+
//|                                                         _ЛУЧ.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://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);
}
//+------------------------------------------------------------------+
Alekseu Fedotov
893
Alekseu Fedotov  
mish987i:

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

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

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

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



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


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


Тады так

if(OrdersTotal()>0) 
   {
   modify(); 
   return(0);
   }
19denis92
8
19denis92  
Привет трейдерам:) помогите пожалуйста добить советника, кто в этом деле может помочь? напишите в личку пожалуйста, расскажу интересную стратегию, да впринцепи и советник будет тогда=) не могу додуматься как АС и АО в советник добавить, буду очень признателен!
Alexey
1365
Alexey  
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);
   }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий