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

 
Mikhail Mishanin:

Se sostituiamo il "valore temporale" con la differenza tra il nuovo tempo e l'ultimo tempo calcolato?

Cioè sapremo che c'è un nuovo tempo:

-dal nuovo giorno

-da una nuova settimana

-o con una differenza superiore al tempo specificato.

Non ho idea di come applicarlo!


Sullo screenshot rollover e spread widening alle 22-00, nella maggior parte degli altri dealing alle 00-00, è 1 ora dopo - spread widening.

Come posso scoprire programmaticamente quando è il rollover, senza limitare il programma al tempo nei parametri di input?

---

P.S. Questo codice si comporta bene, ma a condizione che sia eseguito 500 tick prima del rollover

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Non ho idea di come applicarlo!


Nello screenshot rollover e spread widening alle 22-00, nella maggior parte delle altre transazioni alle 00-00, è 1 ora dopo - spread widening.

Come posso scoprire programmaticamente quando è il rollover, senza limitare il programma al tempo nei parametri di input?

---

P.S. Questo codice si comporta bene, ma a condizione che venga eseguito 500 tick prima del rollover

La ragione dell'allargamento dello spread per negoziazione è l'apertura della sessione di trading, cioè il "dumping" di un gran numero di ordini per l'elaborazione, e l'incertezza di come (a quale prezzo) tutto si "sistemerà". La negoziazione assicurerà e allargherà lo spread. Devi solo ritardare il tempo dalla fine/inizio della sessione di trading.

 
Mikhail Mishanin:

La ragione per cui lo spread si allarga con la negoziazione è l'apertura della sessione di trading, cioè un gran numero di ordini che vengono piazzati per l'elaborazione, e quindi l'incertezza di come (a quale prezzo) tutto si "sistemerà". La negoziazione assicurerà e allargherà lo spread. Devi solo mettere da parte il tempo dalla fine/inizio della sessione di trading.

Sì, ma non è nelle specifiche dello strumento.

Lì c'è il rollover alle 22:00.

E questo è il rollover a 00-00.


 
Vitaly Muzichenko:

Sì, ma non è nelle specifiche dello strumento

TimeCurrent()-TimeGMT()
 

Speriamo che la versione finale tenga conto di tutto

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Speriamo che la versione finale tenga conto di tutti

due variabili

datetime daLAST=0;

datetime daOLD=0;


In ogni funzione che può "commerciare", cioè può ottenere il tempo del tick

daOLD = daLAST;

daLAST= "tempo di spunta"

Se ( daLAST - daOLD > "time gap") - una nuova sessione è iniziata, c'è stato un intervallo di tempo

{

//salva, usa e cancella questo come vuoi

}

 
Mikhail Mishanin:

due variabili

datetime daLAST=0;

datetime daOLD=0;


In ogni funzione che può "commerciare", cioè può ottenere il tempo del tick

daOLD = daLAST;

daLAST="tempo di spunta"

Se ( daLAST - daOLD > "time gap") - una nuova sessione è iniziata, c'è stato un intervallo di tempo

{

//salva, usa e cancella questo come vuoi

}

Ci sono alcune coppie e dilemmi in cui la sessione asiatica può non avere un tick fino a diversi minuti, con un tempo di rollover da 21-59 a 22-01, che è più veloce dell'arrivo del tick in Asia.

 
Vitaly Muzichenko:

Ci sono alcune coppie e dillings su cui nella sessione asiatica può non esserci alcun tick fino a diversi minuti, con tempo di rollover dal 21-59 al 22-01, cioè più veloce dell'arrivo del tick in Asia.

Allora si torna al punto di partenza.

Qual è l'obiettivo? Saltare i trade con uno spread esorbitante - giusto?

Allora possiamo probabilmente ignorare il tempo e analizzare lo spread stesso.

se Ask - Bid > "soglia" - abilitare il tracciamento/accumulo.

seAsk - Bid < "soglia" - spegnere o anche accumulare.

Una tale "mucca" sembra essere utile anche per me, raccoglierò qualcosa del genere, raccoglierà statistiche...


E se non c'è un tick fresco per alcuni minuti, sarà più ragionevole saltare il primo o i primi nello scambio.

Le statistiche dovrebbero essere raccolte su coppie e dillaggi specifici, perché ogni "curvatura" può funzionare sia in "-" che in "+".

 
Mikhail Mishanin:

Allora torniamo al punto di partenza.

Qual è l'obiettivo? Saltare i trade con uno spread esorbitante - giusto?

Allora possiamo probabilmente ignorare il tempo e analizzare lo spread stesso.

se Ask - Bid > "soglia" - abilitare il tracciamento/accumulo.

seAsk - Bid < "soglia" - spegnere o anche accumulare.

Una tale "mucca" sembra essere utile anche per me, raccoglierò qualcosa del genere, raccoglierà statistiche...


E se non c'è un tick fresco per alcuni minuti, sarà più ragionevole saltare il primo o i primi nello scambio.

Le statistiche dovrebbero essere raccolte per coppie e dilingue particolari, perché qualsiasi "twist" può funzionare come un "-" o un "+".

Tutto ciò che hai descritto rende il codice di cui sopra, tranne il giallo - penso che sia ridondante e non del tutto corretto. In qualche modo mai incontrato, che rollover era qualcuno in altro tempo, sempre tutti in uno e lo stesso - a 22-00 GMT, anche se posso essere sbagliato.

Ma spesso si sono visti rollover di durata diversa, alcuni 5 minuti e altri poco più di un minuto.

---

Controlla il codice, forse puoi cambiare qualcosa:

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Tutti sono alla stessa ora - 10pm GMT, anche se potrei sbagliarmi.

Non hai torto.