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

 
renatmt5:
Ho capito bene che le variabili last_time e result sono i valori che stiamo cercando. Il risultato determina di quanto tempo la linea sarà spostata (ridisegnata) nel futuro. Poi il blocco di codice "Profitto del periodo" deve essere messo prima del blocco "Spostare la linea verticale" per spostare la linea tenendo conto dei dati ottenuti dall'ultimo affare.
È corretto o sto confondendo qualcosa?

Queste sono variabili interne della funzione LastProfitForPeriod.

Vogliamo ottenere il valore del profitto dell'ultimo trade, giusto? Qui LastProfitForPeriod() ci dà il profitto dell'ultimo trade. Resta solo da spostare la linea verticale in funzione di questi profitti.

 
Vladimir Karputov:

Quindi, il tocco finale è quello di spostare la linea a seconda del profitto ottenuto.

Si ricorda quali sono le regole di spostamento?

oops, scusate - solo per chiarire:

- se il risultato dell'ultimo trade è negativo e il risultato del giorno è negativo, allora la linea verticale viene disegnata ad una distanza di 24 ore (24 ore) nel futuro.
- se il risultato dell'ultima transazione è negativo e il risultato del giorno è positivo, la linea verticale viene disegnata ad una distanza di 2 ore nel futuro.
- se il risultato dell'ultima transazione è positivo, la linea verticale è disegnata ad una distanza di 1 ora nel futuro.

 
Vladimir Karputov:

Ecco una spiegazione del perché il parametro "prima" deve essere fatto in futuro:


Grazie!

 

I termini richiedono il risultato del giorno in cui è stata fatta l'ultima transazione (se ci sono state diverse transazioni in quel giorno)

 
renatmt5:

Ops, scusate - solo per chiarire:

- se il risultato dell'ultimo trade è negativo e il risultato del giorno è negativo, la linea verticale è disegnata 24 ore (un giorno) nel futuro.
- se il risultato dell'ultima transazione è negativo e il risultato del giorno è positivo, la linea verticale viene disegnata ad una distanza di 2 ore nel futuro.
- se il risultato dell'ultima transazione è positivo, la linea verticale è disegnata ad una distanza di 1 ora nel futuro.

Ah, quindi dobbiamo anche ottenere separatamente il profitto per il giorno corrente.


Per fare correzioni a LastProfitForPeriod() - rimuoviamo i parametri temporali di input "from" e "to" e formiamo questi parametri all'interno della funzione: formiamo l'ora di inizio del giorno (sarà "from"), e "to" otteniamo l'ora corrente + giorno.


Di conseguenza, passeremo due parametri in LastProfitForPeriod() per riferimento: il profitto del giorno e il profitto dell'ultimo trade.


L'inizio del giorno si ottiene usandoiTime

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- cioè, è l'ora di apertura della barra giornaliera corrente.

 

Compilato - grande!
Ci sono solo pochi problemi:
1) Quando si impone l'indicatore, il valore della variabile Profitto ultimo giorno non è assegnato all'ultimo giorno dell'ultima operazione, ma al profitto finale del conto in generale. Poi, però, quando si ricalcola l'indicatore (in circa 1-2 minuti) il valore passa a quello corretto (il profitto totale del giorno dell'ultimo trade). Giudico solo dal conto in cui l'ultimo scambio è stato oggi.
2) Quando si cancella l'indicatore dal grafico, il Commento in alto a sinistra non viene cancellato. Quando si cancella la lista degli oggetti non vengono nemmeno cancellati. Riavvio il terminale per far sparire i valori, il che non è conveniente, ovviamente. Come renderlo più facile - non lo so :)

Forse, sarebbe più ragionevole mettere i blocchi con il codice di creazione della linea, movimento della linea e cancellazione della linea (Creare la linea verticale, Spostare la linea verticale e Cancellare la linea verticale) dopo il blocco di calcolo dell'ultimo affare (Profitto del periodo). Tracciare la linea prendendo in considerazione lo spostamento in futuro di n ore, calcolato sulla base di profitto_ultimo_giorno e profitto_ultima_vendita.

Come

if (profit_last_day<=0 e profit_last_deal<=0){n=24;}

else (profit_last_day>0 e profit_last_deal<=0){n=2;}

else {n=1;}
//---
tempo = ultimo_tempo + n;
//---
poi tracciate la linea con uno spostamento nel tempo rispetto all'ultimo scambio, usando il valore temporale calcolato...

 

La versione 1.002 introduce la protezione: se il tempo di apertura della barra del giorno restituisce "0" - allora non è destino e si esce.

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


Ora non ci sarà nessuna richiesta per tutta la durata del conto di trading.

 
Vladimir, grazie mille ancora per il tuo lavoro!
Proverò a fare il codice da solo, in modo che la mia coscienza non mi tormenti e per amore della pratica :) Riferirò sui risultati, se ce ne saranno
 
renatmt5:
Vladimir, grazie mille ancora per il tuo lavoro!
Cercherò di fare il codice da solo, in modo da non ammalarmi di coscienza e pratica :) riporterò i risultati, se ce ne saranno

Bene.

 
A proposito, sulla protezione che hai aggiunto c'è il seguente punto. 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 rapido aggiornamento - i valori sono immediatamente ricalcolati. Probabilmente, è possibile fare qualche stampella software su questo principio?