Tema interessante para muitos: o que há de novo em MetaTrader 4 e MQL4 - grandes mudanças no caminho - página 49

 
hrenfx:


Não pode.

disparate de um homem alimentado na cozinha))
 
Avals:
Não brinque, vá para a cozinha de relações públicas ;)

Casaco, não sujes a tua imagem aqui entre os "nubs e PR people" de acordo com a tua classificação. Vá para o seu QQ.

P.S. Para os comerciantes existe a alfabetização, onde podem repor os seus conhecimentos sobre as realidades do mercado FOREX e as suas várias características a partir das suas trocas habituais. Alargue os seus horizontes!

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
Casaco, não sujes a tua imagem aqui entre os "nubs e PR people" de acordo com a tua classificação. Vá para o seu QQ.
as pessoas aqui não são, na sua maioria, substantivos, e você é o único RP dc)
 

MetaQuotes, claro, overdid (underdid) o formato de histórico armazenado (MqlRates). Isto é compreensível. Quando o formato foi desenvolvido, os spreads fixos prevaleceram no mercado cambial, enquanto os spreads (flutuantes) de mercado ainda eram exóticos.Embora fosse evidente que mesmo os spreads fixos flutuavam de facto, porque as empresas de corretagem "não garantem a sua fixidez nos momentos de notícias e mudanças rápidas do mercado" (as aspas invertidas representam aqui uma cotação de uma oferta típica de quase todas as empresas de corretagem desse período).

Mas os tempos mudaram e nós temos o que temos - os spreads estão a flutuar em cada tique, e não há problema. Só as citações históricas não o reflectem. Infelizmente.

Apenas um valor de spread para cada barra é armazenado na história. E não é suficiente agora. E leva a distorções ao testar a história, porque não há coincidência entre a história real de negociação e a negociação no testador, mesmo que um corretor forneça uma base histórica absolutamente honesta (correspondente à tradução real do tick-feed). A razão é o poder descritivo insuficiente do 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 байта 

Esta estrutura assume a invariabilidade do spread dentro de uma barra, o que não corresponde às realidades comerciais actuais.

Além disso, discutimos qual poderia ser o formato "completo", chamei-lhe "Mql_6_Rates" condicionalmente para deixar claro que não é actualmente suportado.

Abaixo estão duas variantes. A primeira é uma estrutura embalada (para disco) sem compressão por algoritmos especiais. Poderia ser comprimido muitas vezes mais pequeno (2-3, presumivelmente) para reduzir o tráfego de transferência. O formato comprimido não é discutido aqui.

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 упакована без искажений

O formato "embalado" é suposto ser óptimo quando armazenado no disco do comerciante. Quando carregado do disco para a memória, pode ser desempacotado em tempo real, as funções de desempacotamento são "anexadas" à estrutura.

O historial de desempacotamento (para acesso a partir de MQL) poderia ser, digamos, o seguinte:

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 байт

É maior do que é agora, mas o spread é calculado em todos os pontos fixos da barra. Isto é, se tivermos de escrever informação em barras de minutos de acordo com o esquema tradicional {Abrir+Alto+Baixar+Fechar}, então devemos escrevê-la "na íntegra".

Na minha opinião, esta informação é redundante e tende a criar ilusões máximas no Ponto Aberto. Os momentos de abertura das barras para diferentes símbolos não coincidem, enquanto exactamente no momento do início do minuto (astronómico) os preços de compra e venda nos símbolos correspondem às últimas ofertas negociadas, ou seja, preços de fecho. Por conseguinte, o formato mais adequado para testar os minutos (o compromisso mais saudável entre tradição e senso comum) poderia ser o seguinte

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 байта

// A poupança correspondente em formato de disco embalado seria de mais 7 bytes, ou seja, o SizeOf(Mql_6_PackedRates) seria reduzido para 31 bytes.

Para os testes ecológicos (mais razoáveis) "através de preços de abertura", deve ser tomada a hora de início astronómico de um minuto, ou seja, o preço de fecho da barra anterior. Neste caso, seria alcançado um sincronismo exacto de preços em várias moedas. Este sincronismo é vital para a depuração de ordens do mercado de negociação de EAs em múltiplas moedas. Para a negociação de ordens limite e stop, a informação sobre extrema em cada barra é vital. Está também totalmente disponível no formato que estamos a discutir.

--

Na verdade, estou a desenvolver estes formatos neste momento para os meus próprios fins. Publicá-los aqui é apenas um subproduto do meu desenvolvimento. Talvez alguém os possa considerar úteis.

 
MetaDriver:


Num teste de "preços de abertura" amigo do ambiente (o mais sensato), deve ser tomada a hora de início astronómica do minuto, ou seja, o preço de fecho do bar anterior.

ignorar a lacuna será crítico em alguns casos

p.s. se precisar de poupar no tráfego, pode armazenar compensações em vez de valores de preços absolutos, para os quais o dobro é muito

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

MetaQuotes, claro, overdid (underdid) o formato de histórico armazenado (MqlRates). É compreensível. Quando o formato estava a ser desenvolvido no mercado cambial, prevaleceram spreads fixos, spreads de mercado (flutuantes) ainda eram exóticos.Embora fosse evidente que mesmo os spreads fixos eram de facto flutuantes, porque as empresas de corretagem "não garantem a sua fixação em tempos de notícias e mudanças rápidas no mercado" (as aspas invertidas aqui representam uma cotação de uma oferta típica de quase todas as empresas de corretagem desse período).

O MT5 foi originalmente posicionado como um terminal de troca. E nas trocas as leis de preços ECN estão em vigor há MUITO tempo. Isto é, a desculpa do fraco desempenho é insustentável. Bem, não havia (e não há) na sua equipa um forte algotrader, que pudesse ser escutado. Aparentemente, apenas "o número de anos de desenvolvimento bem sucedido da plataforma" é mais importante do que uma lógica sólida.
 
hrenfx:
O MT5 foi originalmente posicionado como um terminal de troca. E nas bolsas as leis ECN de formação de preços são MUITO antigas. Portanto, a desculpa da deficiência é insustentável. Bem, não havia (e não há) na sua equipa um forte algotrader, que pudesse ser escutado. Aparentemente, apenas "o número de anos de desenvolvimento bem sucedido da plataforma" é mais importante do que uma lógica sólida.

Eu não estava a tentar arranjar desculpas. Para arranjar desculpas, é preciso acusar primeiro. Não tenho tempo para isso de alguma forma.... :)

 

Então é uma indulgência (há que ter cuidado com tal coisa - é pior do que uma crítica nua):

MetaDriver:

Quando o formato de histórico armazenado (MqlRates) foi desenvolvido, MetaQuotes, naturalmente, overdid (underdid). É compreensível. Quando o formato foi desenvolvido no mercado cambial, prevaleceram spreads fixos, spreads de mercado (flutuantes) ainda eram exóticos.Embora fosse evidente que mesmo os spreads fixos eram de facto flutuantes, porque as empresas de corretagem "não garantem a sua fixação em tempos de notícias e mudanças rápidas no mercado" (as aspas invertidas aqui representam uma cotação de uma oferta típica de quase todas as empresas de corretagem desse período).

 
Avals:

ignorar a lacuna será crítico em alguns casos

Tal carta existe. Mas o intervalo (salto descontínuo de citação) pode acontecer a qualquer momento, não apenas no início do bar. Assim, qualquer formato "diluído" não é sem pecado, por definição. alimentação completa apenas em carraças. E poderia ser ainda mais completo na história. Estou a tentar fazer um formato minúsculo para mim próprio, enquanto encontrei tal compromisso.Posso deixá-lo como descrito acima (sem Aberto, apenas {Hi-Lo-Close}), compreendo todas as desvantagens, é apenas uma versão da minha codificação para o meu testador. Prevejo também testes com carraças em bruto, ou com diluídos artificialmente por quaisquer métodos (com formato de carraças guardadas {bis-o-tempo de espera}).
 
hrenfx:

Depois é condescendência (cuidado com tais coisas - pior do que a crítica nua):

:-)

É um pouco tarde para mim para beber borjomi ou para fazer reparações. Um lugar no inferno está há muito reservado para mim.

Não creio que tentar compreender sem julgamento seja o mais grave dos meus pecados. ;)