Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1694

 
Aleksei Stepanenko #:

Non so perché si fa così, è essenzialmente una funzione booleana.

Va più o meno così:

In enum, gli elementi iniziano con zero, quindi Ok=0 , AllocError=1

cioè GetRepeat restituisce o 0 o 1

rispettivamente ! GetRepeat è una negazione del valore di ritorno

0 è falso, 1 è vero.


È facile rompersi la testa

Esattamente!)) Grazie, Alexey!

 
Sei il benvenuto :)
 

Buona giornata!!!

Ecco una funzione per calcolare il prezzo medio di una griglia di ordini e visualizzarlo su un grafico. Dopo la chiusura della griglia, le linee orizzontali che mostrano la linea media non vengono cancellate.

Per favore aiutateci a scrivere una funzione che queste linee saranno cancellate dopo che la griglia degli ordini è chiusa. Grazie!!!

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
   if(ot==1)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrMagenta);
   return(avg_price);
  }

 
EVGENII SHELIPOV #:

Buona giornata!!!

Ecco una funzione per calcolare il prezzo medio di una griglia di ordini e visualizzarlo su un grafico. Dopo la chiusura della griglia, le linee orizzontali che mostrano la linea media non vengono cancellate.

Per favore aiutateci a scrivere una funzione che queste linee saranno cancellate dopo che la griglia degli ordini è chiusa. Grazie!!!

Questo non è il posto per farlo.

void OnTick()
  {
//---
   if(ObjectFind(0,"AveragePriceLine"+0)==0&&CountTrade(0)<1)//для бай
     {ObjectDelete(0,"AveragePriceLine"+0);}
   if(ObjectFind(0,"AveragePriceLine"+1)==0&&CountTrade(1)<1)//для селл
     {ObjectDelete(0,"AveragePriceLine"+1);}

   .....

  }
 
MakarFX #:

Questo non è il posto per farlo.

Makar, come fai a legare questo in void OnTick()

 
MakarFX #:

Questo non è il posto per farlo.

Grazie, Makar, un po' di lavoro di lima e va bene.

 

Si prega di avvisare.

L'Expert Advisor imposta il tempo di inizio e fine degli ordini di apertura. Vorrei che questo tempo fosse visualizzato sul grafico. Non sono ancora riuscito a farlo. Ecco il codice. Vorrei chiedervi aiuto!

//-------------------------------------------------------------------+  Команда на открытие первых ордеров в сетке
   if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
   ObjectCreate(0, "Начало торговли", OBJ_VLINE,0,0, StartTime);
   ObjectSetInteger(0, "Начало торговли",OBJPROP_COLOR, clrBlue);
   ObjectCreate(0,"Окончание торговли", OBJ_VLINE, 0, 0, StopTime);
   ObjectSetInteger(0, "Окончание торговли", OBJPROP_COLOR, clrBlue);
     {
      if(CountTrade(0)==0 && CountTrade(1)==0 && TradeSignal()==0)
         SendFirsOrder(0);
      if(CountTrade(1)==0 && CountTrade(0)==0 && TradeSignal()==1)
         SendFirsOrder(1);
     }
 
EVGENII SHELIPOV #:

Si prega di avvisare.

L'Expert Advisor imposta il tempo di inizio e fine degli ordini di apertura. Vorrei che questo tempo fosse visualizzato sul grafico. Non sono ancora riuscito a farlo. Ecco il codice. Vorrei chiedervi aiuto!

Mostra le variabili StartTime e StopTime
 
MakarFX #:
Mostra le variabili StartTime e StopTime
extern string               TIME                           = "Настройки времени";
extern int                  UseHour                        = 1;         // Торговля в установленное время "0"-ВЫКЛ, "1"-ВКЛ
extern int                  StartTime                      = 1;         // Начало торговли
extern int                  StopTime                       = 19;        // Окончание торговли
 
EVGENII SHELIPOV #:
   if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
     {
      if(ObjectFind(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE))!=0)
        {
         ObjectCreate(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StartTime*3600),0);
         ObjectSetInteger(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
         ObjectCreate(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StopTime*3600),0);
         ObjectSetInteger(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
        }
      if(CountTrade(0)==0 && CountTrade(1)==0 && TradeSignal()==0)
         SendFirsOrder(0);
      if(CountTrade(1)==0 && CountTrade(0)==0 && TradeSignal()==1)
         SendFirsOrder(1);
     }