Características da linguagem mql5, subtilezas e técnicas - página 128

 
Esta é uma enorme revelação para mim
// Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

#property strict

#include <MT4Orders.mqh>

// Заполнение массива ценами открытия/закрытия
int FillPrices( double &Prices[] )
{
  const int Total = OrdersHistoryTotal();
  
  ArrayResize(Prices, Total << 1);
  
  int Amount = 0;
  
  for (int i = 0; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      Prices[Amount++] = OrderOpenPrice();
      Prices[Amount++] = OrderClosePrice();
    }

  return(ArrayResize(Prices, Amount));
}

// true - нормализованная разность равна нуля, сама разность - отлична от нуля.
bool IsBadPrices( const double &Price1, const double &Price2 )
{
  return(!NormalizeDouble(Price1 - Price2, 5) && (Price1 != Price2));
}

// Находит цены открытия/закрытия, которые
// с нормализацией равны друг другу,
// без нормализации - не равны.
int CheckPrices( const double &Prices[] )
{
  int Res = 0;
  const int Size = ArraySize(Prices);
  
  for (int i = 0; i < Size - 1; i++)
  {
    const double Price = Prices[i];
    
    for (int j = i + 1; j < Size; j++)
      if (IsBadPrices(Price, Prices[j]))
      {
        Print((string)Price + " - " + (string)Prices[j] + " = " + (string)(Price - Prices[j])); // Распечатываем найденые цены
        
        Res++;
      }
  }
    
  return(Res);
}

void OnStart()
{
  double Prices[];
  
  FillPrices(Prices);
  Print(CheckPrices(Prices)); // Количество "несовпадающих" пар цен.
}


Resultado

1.95562 - 1.95562 = -2.220446049250313 e-016
1.95562 - 1.95562 = -2.220446049250313 e-016
1.71599 - 1.71599 = -2.220446049250313 e-016
1.71599 - 1.71599 = -2.220446049250313 e-016
1.58028 - 1.58028 = -2.220446049250313 e-016
14.806 - 14.806 = -1.77635683940025 e-015
1.95521 - 1.95521 = -2.220446049250313 e-016
1.95521 - 1.95521 = -2.220446049250313 e-016
8


Executar o mesmo guião no MT4 é ainda mais deprimente - há ali uma história maior. Deixem-me explicar.


Aqui vê que a posição foi aberta e fechada ao mesmo preço. Mas os seus preços não são iguais quando comparados sem normalização!


ZZY Checked Tester - parece que não há aí nada de tão desagradável.

 
Ilya Malev:

Devo ter feito uma gralha.

Então o spread mínimo é real? Se sim, deve escrever para o suporte técnico para o corrigir (para o médio). Caso contrário, é um bom começo para os testers grails.

 
fxsaber:

Verificado o Testador - não parece haver tal grosseria.

Em todos os modos Tester, excepto carraças reais, os preços não são normalizados!

// Советник выводит цены, которые не нормализованы

#property strict

// true - нормализованная цена не равна оригинальной
bool IsBadPrice( const double &Price )
{
  return(NormalizeDouble(Price, 5) != Price);
}

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

//const bool Init = EventSetMillisecondTimer(50);
//void OnTimer()
void OnTick()
{
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    const double PriceBid = SymbolInfoDouble(Symb, SYMBOL_BID);
    const double PriceAsk = SymbolInfoDouble(Symb, SYMBOL_ASK);
    
    if (IsBadPrice(PriceBid))
      Print(TOSTRING(Symb) + TOSTRING(PriceBid) + TOSTRING(NormalizeDouble(PriceBid, 5) - PriceBid));

    if (IsBadPrice(PriceAsk))
      Print(TOSTRING(Symb) + TOSTRING(PriceAsk) + TOSTRING(NormalizeDouble(PriceAsk, 5) - PriceAsk));
  }
}


Resultado

2019.02.18 23:57:24   Symb = EURUSD PriceBid = 1.13088 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 
2019.02.18 23:57:26   Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 
2019.02.18 23:57:27   Symb = EURUSD PriceBid = 1.13085 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 
2019.02.18 23:58:18   Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 


Para o dizer de forma suave, isto é um insecto no Testador.

 

Digamos que não se pode ligar ao servidor de negociação quando se tenta entrar na sua conta.

Ou, por exemplo, a sua conta demo expirou e está a tentar iniciar sessão com "Conta inválida".


Apesar deste fracasso, todo o histórico comercial está disponível, mesmo que não seja mostrado no Terminal!

 
fxsaber:

Digamos que não se pode ligar ao servidor de negociação quando se tenta entrar na sua conta.

Ou, por exemplo, a sua conta demo expirou e a tentativa de login dá "Conta inválida".


Apesar deste fracasso, todo o histórico comercial está disponível, mesmo que não seja mostrado no Terminal!

Então, onde está armazenada a história?

 
Alexey Navoykov:

Isto é, a distribuição mínima é realista? Em caso afirmativo, deve escrever para o suporte técnico para o fixar (para o médio). Caso contrário, é uma boa ideia para os testers grails.

No ramo "insectos, perguntas" já responderam oficialmente que nada vai mudar. Mais precisamente, simplesmente ignoraram todas as perguntas racionais e responderam "teste por carrapatos reais", o que interpreto como uma resposta estritamente negativa

É um "tidbit" para uma infeliz auto-enganação. Embora, talvez outra pessoa possa usá-lo comercialmente para fazer batota de alguma forma (nomeadamente, as empresas de corretagem - que assim criam uma falsa impressão da norma de propagação, se a pessoa não entrar em carraças reais, e 99,9% não o fará)
 
Ilya Malev:

Embora possa ser que outra pessoa o possa utilizar comercialmente para fazer batota de alguma forma (nomeadamente, empresas de corretagem - que assim criam uma falsa impressão da norma de propagação, se a pessoa não entrar em carraças reais, e 99,9% não o fará).

Em teoria, tudo deveria estar sincronizado no servidor. O que está nos tiquetaques - deveria estar nos bares. Mas, claro, não sei como é na realidade.

 
Comentários não relevantes para este tópico foram transferidos para "Características da linguagem mql4, complexidades e técnicas".
 

ME tem uma combinação ALT+V onde se podem ver os valores anteriores da prancheta do sistema. Mesmo se copiou algo do navegador e ME estava a trabalhar em segundo plano, ME irá vê-lo e lembrar-se dele.

Grosseiramente falando, ME vê muito do que se faz no computador. Por exemplo, se colar uma senha para uma conta ou conta pessoal de outro recurso através do buffer, ela entrará no histórico da sessão ME actual.

 
fxsaber:

ME tem uma combinação ALT+V onde se podem ver os valores anteriores da prancheta do sistema. Mesmo se copiou algo do navegador e ME estava a trabalhar em segundo plano, ME irá vê-lo e lembrar-se dele.

Grosseiramente falando, ME vê muito do que se faz no computador. Por exemplo, se colar uma senha de conta através do buffer, ela entrará no histórico da actual sessão ME.

Uau, eu copio palavras-passe criptográficas de moeda. Quão prejudicial é isso para mim?

Razão: