Нужна помощ программистов. Исправте советник плиз

 

Нашел такой советник который открывает постоянные сделки по одной паре на все направление

Но при проверки он открывает около 100 сделок впо одной цене. Помогите исправит этот глюк пожалуйста

Код советника:

//+------------------------------------------------------------------+
//|                                                     BakhaCCI.mq4 |
//|                          Copyright © 2009, Esavdo Software Corp. |
//|                                             http://www.esavdo.uz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Esavdo Software Corp."
#property link      "http://www.esavdo.uz"

//---- input parameters
double    Lots=0.1;
int       oldbars=0;
extern int Foyda=25;
extern int MAGIC=171209;
double OchishNarxi;
double narx[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
void Ochish(int op,double narx,double TP)
{
int ticket;
if (op==OP_SELLSTOP) {
   for (int g=0;g<OrdersTotal(); g++) {
   if (OrderSelect(g,SELECT_BY_POS,MODE_TRADES)) {
   if (OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP && OrderOpenPrice()==narx) { 
   Print("G=",g,"   ",OrderSymbol(),"   ",OrderType(),"   ",OrderOpenPrice(),"    ",narx);return(0);}}}}
ticket=OrderSend(Symbol(),op,Lots,narx,0,0,TP,"My_Buy",MAGIC,0,0);
return(0);
}

bool proverka(int op1,int op2){
bool prover=true;
double narx1,narx2;
for (int p=0; p<OrdersTotal(); p++) {
    if (OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) {
    if (OrderSymbol()==Symbol() && OrderType()==op1){ OchishNarxi=OrderTakeProfit();
               for (int p1=0; p1<OrdersTotal(); p1++){
               if (OrderSelect(p1,SELECT_BY_POS,MODE_TRADES)) {
               if (OrderSymbol()==Symbol() && OrderType()==op2){
                  if (OrderOpenPrice()==OchishNarxi) {prover=false;break;}
                  if (OrderOpenPrice()==OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD)) {prover=false;break;}
                  if (OrderOpenPrice()==OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD)) {prover=false;break;}   }  }  }
                            if (prover==false) break;} else continue;
                            }  }
                          
                            return(prover);
                            }
               

//+------------------------------------------------------------------+
//| Возвращает флаг существования ордера или позиции по номеру       |
//+------------------------------------------------------------------+
bool ExistOrder(int mn) {
  bool Exist=False;
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderType()==mn) {
        Exist=True; break;
      }
    }
  }
  return(Exist);
}


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   if (!ExistOrder(OP_BUY)) Ochish(OP_BUY,MarketInfo(Symbol(),MODE_ASK),MarketInfo(Symbol(),MODE_ASK)+Foyda*Point);
   if (!ExistOrder(OP_SELL)) Ochish(OP_SELL,MarketInfo(Symbol(),MODE_BID),MarketInfo(Symbol(),MODE_BID)-Foyda*Point);

   if (ExistOrder(OP_BUY) && proverka(OP_BUY,OP_BUYSTOP)) Ochish(OP_BUYSTOP,OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD),OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD)+Foyda*Point);
     if (ExistOrder(OP_BUY) && proverka(OP_BUY,OP_SELLLIMIT)) Ochish(OP_SELLLIMIT,OchishNarxi,OchishNarxi-Foyda*Point);
    
   if (ExistOrder(OP_SELL) && proverka(OP_SELL,OP_SELLSTOP)) Ochish(OP_SELLSTOP,OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD),OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD)-Foyda*Point);
     if (ExistOrder(OP_SELL) && proverka(OP_SELL,OP_BUYLIMIT)) Ochish(OP_BUYLIMIT,OchishNarxi,OchishNarxi+Foyda*Point);
   
   
   
   
   
   
  
   return(0);
  }
//+------------------------------------------------------------------+
 
savdogar >>:

Нашел такой советник который открывает постоянные сделки по одной паре на все направление

Но при проверки он открывает около 100 сделок впо одной цене. Помогите исправит этот глюк пожалуйста

Код советника:

//+------------------------------------------------------------------+
//|                                                     BakhaCCI.mq4 |
//|                          Copyright © 2009, Esavdo Software Corp. |
//|                                             http://www.esavdo.uz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Esavdo Software Corp."
#property link      "http://www.esavdo.uz"

//---- input parameters
double    Lots=0.1;
int       oldbars=0;
extern int Foyda=25;
extern int MAGIC=171209;
double OchishNarxi;
double narx[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
void Ochish(int op,double narx,double TP)
{
int ticket;
if (op==OP_SELLSTOP) {
   for (int g=0;g<OrdersTotal(); g++) {
   if (OrderSelect(g,SELECT_BY_POS,MODE_TRADES)) {
   if (OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP && OrderOpenPrice()==narx) { 
   Print("G=",g,"   ",OrderSymbol(),"   ",OrderType(),"   ",OrderOpenPrice(),"    ",narx);return(0);}}}}
ticket=OrderSend(Symbol(),op,Lots,narx,0,0,TP,"My_Buy",MAGIC,0,0);
return(0);
}

bool proverka(int op1,int op2){
bool prover=true;
double narx1,narx2;
for (int p=0; p<OrdersTotal(); p++) {
    if (OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) {
    if (OrderSymbol()==Symbol() && OrderType()==op1){ OchishNarxi=OrderTakeProfit();
               for (int p1=0; p1<OrdersTotal(); p1++){
               if (OrderSelect(p1,SELECT_BY_POS,MODE_TRADES)) {
               if (OrderSymbol()==Symbol() && OrderType()==op2){
                  if (OrderOpenPrice()==OchishNarxi) {prover=false;break;}
                  if (OrderOpenPrice()==OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD)) {prover=false;break;}
                  if (OrderOpenPrice()==OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD)) {prover=false;break;}   }  }  }
                            if (prover==false) break;} else continue;
                            }  }
                          
                            return(prover);
                            }
               

//+------------------------------------------------------------------+
//| Возвращает флаг существования ордера или позиции по номеру       |
//+------------------------------------------------------------------+
bool ExistOrder(int mn) {
  bool Exist=False;
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderType()==mn) {
        Exist=True; break;
      }
    }
  }
  return(Exist);
}


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   if (Volume[0]>1) return;
   if (!ExistOrder(OP_BUY)) Ochish(OP_BUY,MarketInfo(Symbol(),MODE_ASK),MarketInfo(Symbol(),MODE_ASK)+Foyda*Point);
   if (!ExistOrder(OP_SELL)) Ochish(OP_SELL,MarketInfo(Symbol(),MODE_BID),MarketInfo(Symbol(),MODE_BID)-Foyda*Point);

   if (ExistOrder(OP_BUY) && proverka(OP_BUY,OP_BUYSTOP)) Ochish(OP_BUYSTOP,OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD),OchishNarxi+Point*MarketInfo(Symbol(),MODE_SPREAD)+Foyda*Point);
     if (ExistOrder(OP_BUY) && proverka(OP_BUY,OP_SELLLIMIT)) Ochish(OP_SELLLIMIT,OchishNarxi,OchishNarxi-Foyda*Point);
    
   if (ExistOrder(OP_SELL) && proverka(OP_SELL,OP_SELLSTOP)) Ochish(OP_SELLSTOP,OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD),OchishNarxi-Point*MarketInfo(Symbol(),MODE_SPREAD)-Foyda*Point);
     if (ExistOrder(OP_SELL) && proverka(OP_SELL,OP_BUYLIMIT)) Ochish(OP_BUYLIMIT,OchishNarxi,OchishNarxi+Foyda*Point);
   
   
   
   
   
   
  
   return(0);
  }
//+------------------------------------------------------------------+
попробуйте теперь
 

Селлстопы уменшились это уже лучше но пока остаются больше чем 10 по одной цены. Может ещё чтото добавит?

Спасибо.

Хочу обратит ваше внимание на вот этот часть советника

void Ochish(int op,double narx,double TP)
{
int ticket;
if (op==OP_SELLSTOP) {
   for (int g=0;g<OrdersTotal(); g++) {
   if (OrderSelect(g,SELECT_BY_POS,MODE_TRADES)) {
   if (OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP && OrderOpenPrice()==narx) { 
   Print("G=",g,"   ",OrderSymbol(),"   ",OrderType(),"   ",OrderOpenPrice(),"    ",narx);return(0);}}}}
ticket=OrderSend(Symbol(),op,Lots,narx,0,0,TP,"My_Buy",MAGIC,0,0);
return(0);
}
Тут проверку открытых селлстопов добавил я сам но почему то даже если есть отрытый селлстоп это функция открывает ещё сделки. Может здесь кое что нужна изменит.
 
savdogar >>:

Селлстопы уменшились это уже лучше но пока остаются больше чем 10 по одной цены. Может ещё чтото добавит?

Спасибо.

Хочу обратит ваше внимание на вот этот часть советника

Тут проверку открытых селлстопов добавил я сам но почему то даже если есть отрытый селлстоп это функция открывает ещё сделки. Может здесь кое что нужна изменит.

проще напишите как Вам надо я протестирую этот и справлю как надо, и если можно то оставлю координаты в личку, форум не самый удобный способ для общения