mql5 - linea verticale dopo un certo tempo dall'ultimo scambio - pagina 4

 
renatmt5:
A proposito, c'è un'altra cosa sulla protezione che hai aggiunto. Poiché ho un ritardo di 1-2 minuti prima che il valore corretto sia calcolato, durante il quale le variabili sono uguali a zero, passo il timeframe corrente a un altro per un aggiornamento rapido - i valori sono immediatamente ricalcolati. Probabilmente, è possibile fare qualche stampella software su questo principio?

Odio la parola 'stampella'.


Ho già pensato a tutto in anticipo ed è molto bello che tu l'abbia chiesto. Dobbiamo trasformare LastProfitForPeriod da void in bool. Se c'è un errore - per esempio, la data non viene trovata o qualcos'altro, restituiamo false e così via.

Così, non ci sarà nessuna perdita di minuti.

 

Se ottenete "falso", resettate il tempo:

   double profit_last_day=0.0,profit_last_deal=0.0;
   if(!LastProfitForPeriod(profit_last_day,profit_last_deal))
     {
      ExtLastMove=0;
      return(rates_total);
     }

   Comment("Profit last day: ",DoubleToString(profit_last_day,2),"\n",
           "Profit last deal: ",DoubleToString(profit_last_deal,2));


Versione 1.003

 
Vladimir Karputov:

Odio la parola 'stampella'.


Ho già pensato a tutto in anticipo ed è molto bello che tu l'abbia chiesto. Dobbiamo trasformare LastProfitForPeriod da void in bool. Se c'è un errore - per esempio, la data non viene trovata o qualcos'altro, restituiamo false e così via.

Così, non ci sarà nessuna perdita di minuti.

A proposito di "stampella" - sì, c'è una certa attitudine negligente alla programmazione in questa parola :)

Sì, l'effetto minuto perso è sparito nella v.3 dello script.

 
renatmt5:

Per quanto riguarda "stampella" - sì, c'è una certa attitudine negligente alla programmazione in quella parola :)

Sì, l'effetto minuto perso è sparito nella v.3 dello script.

È un indicatore:)

 
Vladimir Karputov:

È un indicatore:)

Sì, è vero - mi confondo ancora.

 

Ho aggiunto un blocco per calcolare l'offset temporale rispetto alla chiusura dell'ultima transazione. Quando cerco di usare last_time e n per l'offset di linea in seguito, ottengo un errore di compilazione :(

.....

                    {

                     last_time=deal_time;

                     profit_last_deal=full_profit;

                    }

                 }

        }

     }

//-------------//     

// MY CODE     //   

//-------------//

if (profit_last_day<=0 && profit_last_deal<=0){uint n=60*60*24;}

else if (profit_last_day>0 && profit_last_deal<=0){uint n=60*60*2;}

else {uint n=60*60*1;}

//-------------//     

// MY CODE END //   

//-------------//

   return(true);

  }

.......
 
In qualche modo non sto inserendo correttamente lo snippet di codice :)
 
Quando si crea ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0), ho bisogno di cambiare il tempo da TimeCurrent() alast_time con un offset al futuro di un periodo pari a n.
O forse c'è una funzione che sposta un oggetto avanti/indietro di un determinato numero di barre? Cosa è meglio? Confesso che finora i miei sforzi indipendenti non hanno avuto successo :(
 
renatmt5:
Quando si crea ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0), voglio cambiare il valore del tempo in modo che non sia TimeCurrent(), malast_time con un offset per il periodo uguale a n.
O forse c'è una funzione che sposta un oggetto avanti/indietro di un determinato numero di barre? Cosa è meglio? Confesso che finora i miei sforzi indipendenti non hanno avuto successo :(

La linea viene creata una volta sola - in OnInit().

Poi viene solo spostato -VLineMove

 

Ho capito bene che devo fare dei cambiamenti nell'ultima linea dello snippet di codice (time=0 in particolare)?

//+------------------------------------------------------------------+ 
//| Move the vertical line                                           | 
//+------------------------------------------------------------------+ 
bool VLineMove(const long   chart_ID=0,   // chart's ID 
               const string name="VLine", // line name 
               datetime     time=0)       // line time 


O VLineMove è una funzione, che deve ancora essere avviata da qualche parte (per esempio in OnCalculate) e passarle i parametri in arrivo?
Sono completamente confuso :)