Galim_V: Puoi dirmi come ottenere gli indicatori di fondo da un timeframe diverso da quello su cui il gufo è in bilico?
1. Perché hai appeso l'uccello? Non è un peccato?
2. Avete mai aperto la guida? Ricevere i dati dell'indicatore nell'Expert Advisor da qualsiasi timeframe non è affatto un problema perché i primi due parametri delle funzioni di ricezione dei dati dell'indicatore servono a specificare il simbolo e il periodo del grafico da cui si vogliono ricevere i valori.
Infatti, anche quando si digita il codice nell'editor, si apre la lista delle variabili formali della funzione, e un tooltip mostra il simbolo e il tempo. Strano che non ci abbia fatto caso.
Allora perché il costante aggiornamento senza necessità?
Hai bisogno di tempo? Puoi ottenere l'ora dell'ultimo tick: TimeCurrent(), o l'ultima ora locale: TimeLocal().
Se si ottiene l'ora dell'ultimo tick nel fine settimana, il timer non aiuterà - l'ora sarà l'ultimo tick del venerdì, o l'ultimo tick dell'ultimo giorno lavorativo. E TimeLocal() non vi darà l'ora del server - dovete ricalcolarla con un offset.
Tuttavia, non so esattamente cosa vuoi ottenere alla fine.
2. Avete mai aperto la guida? Ricevere i dati dell'indicatore nell'Expert Advisor da qualsiasi timeframe non è affatto un problema perché i primi due parametri delle funzioni di ricezione dei dati dell'indicatore servono a specificare il simbolo e il periodo del grafico da cui si vogliono ricevere i valori.
Infatti, anche quando si digita il codice nell'editor, si apre la lista delle variabili formali della funzione, e un tooltip mostra il simbolo e il tempo. Strano che non ci abbia fatto caso.
2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Arrotondamento 44.53781512605145 45.0 Questi sono dati stocastici in modalità "normale", cioè:
Quindi ho bisogno di un avviso due secondi prima che la barra si chiuda senza un tick.
Non è facile da fare, è necessario eseguire un timer più accurato (almeno 500 ms) e fare precedentemente la sincronizzazione dell'ora locale e dell'ora del server. Ve ne ho già parlato:
Al momento dell'arrivo del tick, contare la differenza TimeCurrent()-TimeLocal() (questo viene fatto una volta per sincronizzare l'ora locale e quella del server) - Questo è l'offset relativo al broker, se questo offset cambia in seguito, il tempo deve essere ricalcolato; - all'inizio dell'Expert Advisor (oalla comparsa della barraD1) ricalcoliamo di nuovo tutti i tempi necessari, nell'ora locale, tenendo conto dell'offset; - Aspettiamo quello che abbiamo "contato" nel timer, controllando la desincronizzazione, la perdita di connessione con il broker, la traduzione delle mani locali.
Non è facile da fare, bisogna eseguire un timer più accurato (almeno 500ms) e pre-sincronizzare l'ora locale con quella del server. Te ne ho già parlato:
Si può prendere +/- 1 secondo
Grazie. Come fare il tempo in secondi, prima che la barra M5 si chiuda. In questo momento sta visualizzando H1.
#property strict#property indicator_chart_window//--- input parameters#define MILLISEC_TIMER_INTERVAL 500int timeOffset;
datetime ServerLocalOffset;
datetime prevTime,myTime,localtime;
bool newBar = false;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
datetime srvtime,tmpOffset;
RefreshRates();
srvtime = TimeCurrent();
// Modified
localtime = TimeLocal()+TimeGMTOffset();
if(TimeHour(srvtime)>TimeHour(localtime)){
// Server Time is still ahead of usint newOffset = TimeHour(srvtime)-TimeHour(localtime);
ServerLocalOffset = (newOffset*60*60);
}elseif(TimeHour(srvtime)<TimeHour(localtime)){
// Server Time is Behind usint newOffset = TimeHour(localtime)-TimeHour(srvtime);
ServerLocalOffset = (newOffset*60*60);
}else{
// No modification required
ServerLocalOffset = srvtime;
}
localtime = TimeLocal()-ServerLocalOffset;
tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
if(tmpOffset < 30 && tmpOffset >= 0){
timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason)
{
EventKillTimer();
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---datetime sec;
datetime localtime;
localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
sec=Time[0]-localtime-timeOffset;
if(sec<=2){Alert("время откр. бара ",Time[0]);}
Comment(TimeToStr(sec,TIME_SECONDS ));
}
//+------------------------------------------------------------------+
Non ci sono arrivato da solo"Assicurati solo di aggiornare i dati in OnTimer() per far funzionare il tuo codice. "
Come devo fare?
Avete un programma offline?
Puoi dirmi come ottenere gli indicatori di fondo da un timeframe diverso da quello su cui il gufo è in bilico?
1. Perché hai appeso l'uccello? Non è un peccato?
2. Avete mai aperto la guida? Ricevere i dati dell'indicatore nell'Expert Advisor da qualsiasi timeframe non è affatto un problema perché i primi due parametri delle funzioni di ricezione dei dati dell'indicatore servono a specificare il simbolo e il periodo del grafico da cui si vogliono ricevere i valori.
Infatti, anche quando si digita il codice nell'editor, si apre la lista delle variabili formali della funzione, e un tooltip mostra il simbolo e il tempo. Strano che non ci abbia fatto caso.
Avete un programma offline?
No.
No.
Allora perché il costante aggiornamento senza necessità?
Hai bisogno di tempo? Puoi ottenere l'ora dell'ultimo tick: TimeCurrent(), o l'ultima ora locale: TimeLocal().
Se si ottiene l'ora dell'ultimo tick nel fine settimana, il timer non aiuterà - l'ora sarà l'ultimo tick del venerdì, o l'ultimo tick dell'ultimo giorno lavorativo. E TimeLocal() non vi darà l'ora del server - dovete ricalcolarla con un offset.
Tuttavia, non so esattamente cosa vuoi ottenere alla fine.
1. Perché hai appeso l'uccello? Non è un peccato?
2. Avete mai aperto la guida? Ricevere i dati dell'indicatore nell'Expert Advisor da qualsiasi timeframe non è affatto un problema perché i primi due parametri delle funzioni di ricezione dei dati dell'indicatore servono a specificare il simbolo e il periodo del grafico da cui si vogliono ricevere i valori.
Infatti, anche quando si digita il codice nell'editor, si apre la lista delle variabili formali della funzione, e un tooltip mostra il simbolo e il tempo. Strano che non ci abbia fatto caso.
2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Arrotondamento 44.53781512605145 45.0 Questi sono dati stocastici in modalità "normale", cioè:
2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
qui chiedo M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
Ottengo 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Rounding 0.0 0.0
Tuttavia, non so esattamente cosa vuoi ottenere.
Allarme, voglio, due secondi prima della chiusura della barra. Non lavorerò durante il fine settimana.
Quindi ho bisogno di un avviso due secondi prima che la barra si chiuda senza un tick.
Non è facile da fare, è necessario eseguire un timer più accurato (almeno 500 ms) e fare precedentemente la sincronizzazione dell'ora locale e dell'ora del server.
Ve ne ho già parlato:
Al momento dell'arrivo del tick, contare la differenza TimeCurrent()-TimeLocal()
(questo viene fatto una volta per sincronizzare l'ora locale e quella del server)
- Questo è l'offset relativo al broker, se questo offset cambia in seguito, il tempo deve essere ricalcolato;
- all'inizio dell'Expert Advisor (oalla comparsa della barraD1) ricalcoliamo di nuovo tutti i tempi necessari, nell'ora locale, tenendo conto dell'offset;
- Aspettiamo quello che abbiamo "contato" nel timer, controllando la desincronizzazione, la perdita di connessione con il broker, la traduzione delle mani locali.
Non è facile da fare, bisogna eseguire un timer più accurato (almeno 500ms) e pre-sincronizzare l'ora locale con quella del server.
Si può prendere +/- 1 secondoTe ne ho già parlato:
Grazie. Come fare il tempo in secondi, prima che la barra M5 si chiuda. In questo momento sta visualizzando H1.