Argomento interessante per molti: cosa c'è di nuovo in MetaTrader 4 e MQL4 - grandi cambiamenti in arrivo - pagina 49

 
hrenfx:

Non sembra. Quando ne ho davvero bisogno, lo faccio.

È un peccato che le tue opzioni siano limitate da qualche sviluppatore di software di terze parti.

Ho scritto molto tempo fa che è così. Non tra le nuvole, ma comunque) E non hai niente da fare, come capire cosa mi serve e cosa ho e valutare a distanza le mie capacità. Non dire cazzate, continua a fare le pubbliche relazioni in cucina ;)
 
hrenfx:


Non si può.

sciocchezze da un uomo cresciuto in cucina))
 
Avals:
Non dire stronzate, vai su PR la cucina ;)

Jacket, non sporcare la tua immagine qui tra i "nubendi e i PR" secondo la tua classificazione. Vai al tuo QQ.

P.S. Per i commercianti c'è l'alfabetizzazione, dove possono reintegrare la loro conoscenza delle realtà del mercato FOREX e le sue varie caratteristiche dai loro scambi abituali. Allarga i tuoi orizzonti!

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
Jacket, non sporcare la tua immagine qui tra i "nubendi e i PR" secondo la tua classificazione. Vai al tuo QQ.
qui le persone non sono per lo più noubi, e tu sei l'unico PR dc)
 

MetaQuotes, naturalmente, ha sovradimensionato (sottodimensionato) il formato dello storico memorizzato (MqlRates). Questo è comprensibile. Quando il formato è stato sviluppato, gli spread fissi prevalevano nel mercato forex, mentre gli spread di mercato (fluttuanti) erano ancora esotici.Anche se era chiaro che anche gli spread fissi di fatto fluttuavano, perché le società di brokeraggio "non garantiscono la loro fissità nei momenti di novità e rapidi cambiamenti di mercato" (le virgolette rappresentano qui una citazione da una tipica offerta di quasi tutte le società di brokeraggio di quel periodo).

Ma i tempi sono cambiati e abbiamo quello che abbiamo - gli spread galleggiano su ogni tick, e va bene così. Solo che le citazioni storiche non lo riflettono, purtroppo.

Solo un valore di spread per ogni barra viene memorizzato nella storia. E non è sufficiente ora. E porta a distorsioni quando si testa sulla storia, perché non c'è coincidenza della storia di trading reale e il trading nel tester, anche se un broker fornisce assolutamente onesto (corrispondente alla traduzione reale tick-feed) base storia. La ragione è insufficiente potere descrittivo del formato MqlRates.

struct MqlRates
  {
   datetime time;         // время начала периода     8 байт
   double   open;         // цена открытия             8 байт
   double   high;         // наивысшая цена за период  8 байт
   double   low;          // наименьшая цена за период 8 байт
   double   close;        // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   int      spread;       // спред                  4 байта
   long     real_volume;  // биржевой объем            8 байт
  };
// итого: size_of(MqlRates) = 52 байта 

Questa struttura presuppone l'invariabilità dello spread all'interno di una barra, che non corrisponde alla realtà attuale del trading.

Più avanti si discute su quale potrebbe essere il formato "completo", l'ho chiamato "Mql_6_Rates" in modo condizionale per rendere chiaro che attualmente non è supportato.

Di seguito ci sono due varianti: la prima è una struttura impacchettata (per il disco) senza compressione con algoritmi speciali. Potrebbe essere compresso molte volte più piccolo (2-3, presumibilmente) per ridurre il traffico di trasferimento. Il formato compresso non è discusso qui.

struct Mql_6_PackedRates  
  {
   time_t time;            // время начала периода  4 байта  // восьмибайтный time64_t неактуален до 2038 года
   float    average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байта
   float    d_open;        // поправка к цене открытия 4 байта
   float    d_high;        // поправка к наивысшей цене за период 4 байта
   float    d_low;         // поправка к наименьшей цене за период 4 байта
   float    d_close;       // поправка к цене закрытия 4 байта
   ushort   spread;        // средний спред 2 байта
   char     d_open_spread; // поправка к спреду открытия 1 байт
   char     d_high_spread; // поправка к спреду high 1 байт
   char     d_low_spread;  // поправка к спреду low 1 байт
   char     d_close_spread;// поправка к спреду close 1 байт
   uint     tick_volume;   // тиковый объем 4 байт
   uint     real_volume;   // биржевой объем  4 байт
   double   OpenBid() {return (average_price+d_open); } // функции на лету вычисляющие точные значения
   double   OpenAsk() {return (average_price+d_open+OpenSpread()); }
   double   HighBid() {return (average_price+d_high); }
   и т.д...... // функции на лету вычисляющие точные значения
   ...
   ...
   double OpenSpread() { return ((spread+d_open_spread) * _digits); }
   ...
   и т.п ......
   Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; ..../*заполняем*/.....  return (Rates);}
  };
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений

Il formato "impacchettato" dovrebbe essere ottimale quando viene memorizzato sul disco del commerciante. Quando viene caricato dal disco nella memoria, può essere spacchettato al volo, le funzioni di spacchettamento sono "attaccate" alla struttura.

La storia scompattata (per l'accesso da MQL) potrebbe essere, diciamo, questa:

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   open_bid;     // цена открытия             8 байт
   double   open_ask;     // цена открытия             8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 88 байт

È più grande di adesso, ma lo spread è calcolato in tutti i punti fissi della barra. Cioè, se dobbiamo scrivere le informazioni in barre di minuti secondo lo schema tradizionale {Open+High+Low+Close}, allora dovremmo scriverle "per intero".

A mio parere, questa informazione è ridondante e tende a creare illusioni massime al punto di apertura. I momenti di apertura delle barre per i diversi simboli non coincidono, mentre esattamente al momento dell'inizio del minuto (astronomico) i prezzi bid-ask sui simboli corrispondono alle ultime offerte scambiate, cioè i prezzi di chiusura. Pertanto, il formato più adatto per testare i minuti (il più sano compromesso tra tradizione e buon senso) potrebbe essere il seguente

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 72 байта

// Il risparmio corrispondente in formato disco impacchettato sarebbe di altri 7 byte, cioè SizeOf(Mql_6_PackedRates) sarebbe ridotto a 31 byte.

Per il test ecologico (più ragionevole) "per prezzi di apertura", si dovrebbe prendere il tempo di inizio astronomico di un minuto, cioè il prezzo di chiusura della barra precedente. In questo caso, si otterrebbe un esatto sincronismo multivaluta dei prezzi. Questo sincronismo è vitale per il debugging degli EA multivaluta che scambiano ordini di mercato. Per il trading di ordini limite e stop, l'informazione sugli estremi su ogni barra è vitale. È anche completamente disponibile nel formato che stiamo discutendo.

--

In realtà, sto sviluppando questi formati proprio ora per i miei scopi. Pubblicarli qui è solo un sottoprodotto del mio sviluppo. Forse qualcuno può trovarli utili.

 
MetaDriver:


In un test ecologico (il più sensato) dei "prezzi di apertura", si dovrebbe prendere l'ora astronomica di inizio del minuto, cioè il prezzo di chiusura della barra precedente.

ignorare il divario sarà fondamentale in alcuni casi

p.s. se avete bisogno di risparmi nel traffico, potete memorizzare offset invece di valori assoluti di prezzo, per i quali il doppio è molto

Документация по MQL5: Математические функции / MathAbs
Документация по MQL5: Математические функции / MathAbs
  • www.mql5.com
Математические функции / MathAbs - Документация по MQL5
 
MetaDriver:

MetaQuotes, naturalmente, ha esagerato (underdid) il formato della storia memorizzata (MqlRates). È comprensibile. Quando il formato è stato sviluppato nel mercato forex, gli spread fissi prevalevano, mentre gli spread di mercato (fluttuanti) erano ancora esotici.Anche se era chiaro che anche gli spread fissi erano in realtà fluttuanti, perché le società di brokeraggio "non garantiscono la loro fissità in tempi di novità e rapidi cambiamenti nel mercato" (le virgolette qui rappresentano una citazione da un'offerta tipica di quasi tutte le società di brokeraggio di quel periodo).

La MT5 era originariamente posizionata come un terminale di scambio. E nelle borse le leggi sui prezzi ECN sono in vigore da MOLTO tempo. Cioè la scusa della sottoperformance è insostenibile. Non c'era (e non c'è) nella loro squadra un algotrader forte, che possa essere ascoltato. A quanto pare, solo "il numero di anni di sviluppo di successo della piattaforma" è più importante della logica.
 
hrenfx:
MT5 è stato originariamente posizionato come un terminale di scambio. E sulle borse ECN-legge di formazione dei prezzi sono MOLTO tempo fa. Quindi, la scusa della carenza è insostenibile. Non c'era (e non c'è) nella loro squadra un algotrader forte, che possa essere ascoltato. A quanto pare, solo "il numero di anni di sviluppo di successo della piattaforma" è più importante della logica.

Non stavo cercando di trovare delle scuse. Per trovare delle scuse, devi prima accusare. Non ho davvero tempo per questo.... :)

 

Allora è un'indulgenza (bisogna diffidare di una cosa del genere - è peggio della critica nuda e cruda):

MetaDriver:

Quando è stato sviluppato il formato della cronologia memorizzata (MqlRates), MetaQuotes, naturalmente, ha esagerato (underdid). È comprensibile. Quando il formato è stato sviluppato nel mercato del forex, gli spread fissi hanno prevalso, gli spread di mercato (fluttuanti) erano ancora esotici.Anche se era chiaro che anche gli spread fissi erano in realtà fluttuanti, perché le società di brokeraggio "non garantiscono la loro fissità in tempi di novità e rapidi cambiamenti nel mercato" (le virgolette qui rappresentano una citazione da una tipica offerta di quasi tutte le società di brokeraggio di quel periodo).

 
Avals:

ignorare il divario sarà fondamentale in alcuni casi

Esiste una tale lettera. Ma il gap (salto discontinuo di quotazione) può avvenire in qualsiasi momento, non solo all'inizio della barra. Quindi, qualsiasi formato "assottigliato" non è senza peccato, per definizione. Il feed completo solo in tick. E potrebbe essere ancora più pieno nella storia. Sto cercando di fare un formato minuto per me, mentre ho trovato un tale compromesso.Potrei lasciarlo come descritto sopra (senza Open, solo {Hi-Lo-Close}), capisco tutti gli svantaggi, è solo una versione della mia codifica per il mio tester. Prevedo anche di testare con ticks grezzi, o con diluiti artificialmente con qualsiasi metodo (con salvataggio dei ticks formato {bid-ask-time}).