[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 114

 
Anche nel log durante il test scrive: 2012.05.11 20:03:29 2012.01.09 01:02 Fenicks v01 EURUSD,M1: OrderModify error 1

Come sbarazzarsi di questo errore?

Ecco il codice dell'Expert Advisor stesso:

extern double Lot=0.01;
int h=15; //начало от цены
int g=20; //тейкпрофит
int i=0;
int k=1;
int l=1;
double TakeB=0;
double TakeS=0;
int olbuy=0;
int olsell=0;
int oldbuy=0;
int oldsell=0;
int otkbuy=0;
int otlbuy=0;
int otksell=0;
int otlsell=0;


int openbuy()  // Выставления отложенных ордеров на продажу
  {
   double PRICE=Ask-Point*h;
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*1,PRICE,0,0,PRICE+Point*g,"My order #",11);
   PRICE=Ask-Point*(h+10);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*2,PRICE,0,0,PRICE+Point*g,"My order #",12);
   PRICE=Ask-Point*(h+20);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*4,PRICE,0,0,PRICE+Point*g,"My order #",13);
   PRICE=Ask-Point*(h+30);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*8,PRICE,0,0,PRICE+Point*g,"My order #",14);
   PRICE=Ask-Point*(h+40);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*16,PRICE,0,0,PRICE+Point*g,"My order #",15);
   PRICE=Ask-Point*(h+50);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*32,PRICE,0,0,PRICE+Point*g,"My order #",16);
   PRICE=Ask-Point*(h+60);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*64,PRICE,0,0,PRICE+Point*g,"My order #",17);
   PRICE=Ask-Point*(h+70);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*128,PRICE,0,0,PRICE+Point*g,"My order #",18);
   PRICE=Ask-Point*(h+85);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*256,PRICE,0,0,PRICE+Point*1.5*g,"My order #",19);
   PRICE=Ask-Point*(h+100);
   OrderSend (Symbol(),OP_BUYLIMIT,Lot*512,PRICE,0,0,PRICE+Point*1.5*g,"My order #",20);
  return(0);
  }

int opensell()  // Выставления отложенных ордеров на продажу
  {
   double PRICE=Bid+Point*h;
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*1,PRICE,0,0,PRICE-Point*g,"My order #",21);
   PRICE=Bid+Point*(h+10);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*2,PRICE,0,0,PRICE-Point*g,"My order #",22);
   PRICE=Bid+Point*(h+20);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*4,PRICE,0,0,PRICE-Point*g,"My order #",23);
   PRICE=Bid+Point*(h+30);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*8,PRICE,0,0,PRICE-Point*g,"My order #",24);
   PRICE=Bid+Point*(h+40);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*16,PRICE,0,0,PRICE-Point*g,"My order #",25);
   PRICE=Bid+Point*(h+50);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*32,PRICE,0,0,PRICE-Point*g,"My order #",26);
   PRICE=Bid+Point*(h+60);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*64,PRICE,0,0,PRICE-Point*g,"My order #",27);
   PRICE=Bid+Point*(h+70);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*128,PRICE,0,0,PRICE-Point*g,"My order #",28);
   PRICE=Bid+Point*(h+85);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*256,PRICE,0,0,PRICE-Point*1.5*g,"My order #",29);
   PRICE=Bid+Point*(h+100);
   OrderSend (Symbol(),OP_SELLLIMIT,Lot*512,PRICE,0,0,PRICE-Point*1.5*g,"My order #",30);
  return(0);
  }

int closebuy()  // Закрывает отложенный ордера на покупку
{
   for(i=1; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i-1,SELECT_BY_POS)==true)
      && (OrderType()==2))
      {
      OrderDelete(OrderTicket());
      }
    }
}

int closesell()  // Закрывает отложенный ордера на продажу
{
   for(i=1; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i-1,SELECT_BY_POS)==true)
      && (OrderType()==3))
      {
      OrderDelete(OrderTicket());
      }
    }
}

int start()
  {
// начало открытия отложенных ордеров 
   if (OrdersTotal()==0)
     {
     openbuy();
     opensell();
     }
// Открывает на продажу если на покупку открыта ранее
   for(i=0; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==3))
      {
      olsell++;
      }
    } 
    for(i=0; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==1))
      {
      oldsell++;
      }
    }   
        if(olsell<1 && oldsell<1)
          {
          opensell();
          } 
// Открывает на покупку если на прадажу уже открыта ранее
   for(i=0; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==2))
      {
      olbuy++;
      }
    }
   for(i=0; i<OrdersTotal(); i++)
    {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==0))
      {
      oldbuy++;
      }
    }
        if(olbuy<1 && olbuy<1)
          {
          openbuy();
          }
// конец открытия отложенных ордеров

// ---------- Начало модификаций отложенных ордеров --------------
// Модификация тейк профита для открытых ордеров на покупку

   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==0))
       {
       TakeB=OrderTakeProfit();
       }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==0))
       {
       OrderModify(OrderTicket(),OrderOpenPrice(),0,TakeB,0);
       }
      }
 // Модификация тейк профита для открытых ордеров на продажу
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==1))
       {
       TakeS=OrderTakeProfit();
       }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==1))
       {
       OrderModify(OrderTicket(),OrderOpenPrice(),0,TakeS,0);
       }
      }
// Подсчет открытых и закрытых ордеров
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==0))
       {
       otkbuy++;                              // Открытых покупок
       }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==2))
       {
       otlbuy++;                              // Отложенных покупок
       }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==1))
       {
       otksell++;                             // Открытых продаж
       }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if((OrderSelect(i,SELECT_BY_POS)==true)
      && (OrderType()==3))
       {
       otlsell++;                             // Отложенных продаж
       }
     }
// Очистка лишних ордеров на покупку
if((otkbuy==0) && (otlbuy<=5))
   {
   closebuy();
   }
// Очистка лишних ордеров на продажи
if((otksell==0) && (otlsell<=5))
   {
   closesell();
   }
// Модификация отложенных ордеров на покупку
   otkbuy=0;
   otlbuy=0;
   otksell=0;
   otlsell=0;
   olbuy=0;
   olsell=0;
   oldbuy=0;
   oldsell=0; 
   return(0);
  }
//+------------------------------------------------------------------+
 
alex12:
Anche nel log durante il test scrive: 2012.05.11 20:03:29 2012.01.09 01:02 Fenicks v01 EURUSD,M1: OrderModify error 1
Come eliminare questo errore?

Non chiamare la funzione OrderModify se non ci sono cambiamenti in nessuno dei parametri dell'ordine.
 
sergeev:

non chiamare la funzione OrderModify se nessun parametro dell'ordine viene cambiato.
Quale codice dovrei scrivere nell'Expert Advisor per evitare questo errore?
 
alex12:
Che codice devo scrivere nell'Expert Advisor per evitare questo errore?

corretto
 
Forse puoi già dirmi cosa significano le impostazioni che ti ho chiesto alla fine della pagina 115 di questo thread?
 
alex12:
Forse puoi già dirmi cosa significano le impostazioni

Beh, date le linee come.

if(olbuy<1 && olbuy<1)

probabilmente non è niente).

 
Cosa significano - per favore consigliatemi.

quindi ho sistemato alcune linee di codice di impostazione.

Ci sono ancora linee di codice di impostazioni che non capisco:

int i=0;
int k=1;
int l=1;
 
alsu:

Beh, date le linee come.

probabilmente non è niente).

Sì, sì, l'ho notato anch'io - non ha senso).
 

A volte vuoi davvero chiamare un altro indicatore personalizzato da un indicatore personalizzato. - non funziona((.

Come posso aggirare il problema? Sarebbe meglio trasformare il secondo indicatore in una funzione? C'è un altro modo?

 
jelizavettka:

A volte vuoi davvero chiamare un altro indicatore personalizzato da un indicatore personalizzato. - non funziona((.

Come posso aggirare il problema? Sarebbe meglio trasformare il secondo indicatore in una funzione? C'è un altro modo?


iCustom() non viene chiamato?