Aiuto EA

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
Rispondi
London89
Messaggi: 4
Iscritto il: 21/07/2021, 14:51

Aiuto EA

Messaggio da London89 »

ciao qualcuno cosi gentile che può aiutarmi con un expert advisor?
non riesco a modificare bene gli ordini pendenti :( vorrei che quando si avvicina di 100 pips al prezzo dell'ordine pendente parte una scadenza di 30 minuti! ovviamente dopo 30 minuti l'ordine viene cancellato!
ho fatto vari tentativi soltanto che partono sempre ordini a raffica... a me serve soltanto che modifica un ordine pendente per volta.
vi scrivo il mio codice:

Codice: Seleziona tutto

int start()
  {
 if (!ordineaperto())
  {
if ( Hour() >= 8)
 {
double HGrid_Pips = 50.0;

   double dayH = iHigh(NULL, PERIOD_D1, 0);
   double dayL = iLow(NULL, PERIOD_D1,0);
    
   double pipRange=HGrid_Pips *10*Point;
    
 double top1 = (dayH + pipRange) - MathMod(dayH, pipRange);
 double top2 = (dayH + pipRange) - MathMod(dayH, pipRange)+ 500 *Point;
 double bot1 = dayL - MathMod(dayL, pipRange);
 double bot2 = dayL - MathMod(dayL, pipRange)- 500 *Point;
 
 OrderSend(NULL,OP_SELLLIMIT,0.5,top1,0,top1 + 200 *Point,top1 - 50 *Point,NULL,MagicNumber,0,clrAliceBlue);
 OrderSend(NULL,OP_SELLLIMIT,0.5,top2,0,top2 + 200 *Point,top2 - 50 *Point,NULL,MagicNumber,0,clrAliceBlue);
OrderSend(NULL,OP_BUYLIMIT,0.5,bot1, 0,bot1 - 200 *Point,bot1 + 50 *Point,NULL,MagicNumber,0,clrAquamarine);
OrderSend(NULL,OP_BUYLIMIT,0.5,bot2, 0,bot2 - 200 *Point,bot2 + 50 *Point,NULL,MagicNumber,0,clrAquamarine) ;
} 
 } 
 {
 modificapendenti();
 }
  
  return(0);
 }
 
 
 bool ordineaperto ()
{

{
   for(int i = 0; i < OrdersTotal(); i++)
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (iBarShift(NULL, PERIOD_MN1, OrderOpenTime(), true) == 0)
         return true;
          for(int i2 = 0; i2 < OrdersHistoryTotal(); i2++)
     if(OrderSelect(i2, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (iBarShift(NULL, PERIOD_MN1, OrderOpenTime(), true) == 0)
            return true;   
   }
 
 return false;
}

void modificapendenti()
{
if ( OrdersTotal() > 0)
 {
   for(int i = 0; i < OrdersTotal(); i++)
    { 
    if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
      if (OrderType() == OP_BUYLIMIT && OrderMagicNumber() == MagicNumber)
      {
     if ( Bid - OrderOpenPrice() < 100 *Point)
       if( OrderModify (OrderTicket (),OrderOpenPrice(),OrderStopLoss() ,OrderTakeProfit(),1800,clrAliceBlue))
       Print ("BUYLIMIT",OrderTicket(),"MODIFICA");
    }
      }
         }
    
 
            }
Avatar utente
Dainesi
Messaggi: 457
Iscritto il: 12/05/2014, 12:10
Località: Castellanza (VA)

Re: Aiuto EA

Messaggio da Dainesi »

Tutto quello che devi fare è inserire un controllo di prossimità che ad ogni tick verifica se il prezzo è entrato nell'area d'intorno soggetta al tuo timer. Se ci entra vai a modificare i tuoi ordini pendenti primi di "ExpirationTime" con uno che equivalga al momento attuale più i tuoi 30 minuti (ovvero 30x60 secondi).
Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti