O problema da transferência do MT4 para o MT5. Ou, mais precisamente, a incapacidade de executar alguns algoritmos no MT5 sem errar. - página 11

 

Informações para reflexão.

Observando alguns dos desenvolvimentos da EA publicados no mercado. Ou alguns artigos.

Muitas vezes eles especificam uma pequena dispersão nos requisitos de seleção de corretores para a EA.

E, em minha opinião, a MT5 tem sido em grande parte ajustada para reagir rapidamente às mudanças no mercado. Isto explica porque todos os freios com espera de atualização de cotações estão desligados.

Ou seja, se houver uma atualização de cotação, o terminal negará o acesso às séries de tempo. Não interferir em alguns algoritmos rápidos.

Este paradigma tem o direito de existir. Neste caso, a negociação é curta. A entrada é rápida. Recolha alguns pontos. Saída rápida.

Mas existe outro paradigma.

Existem algumas situações extremas no mercado onde se formam inversões de mercado.

Estes extremos podem ter sido formados até mesmo há vários anos. Mas eles continuam a influenciar a situação atual do mercado.

Mudanças momentâneas no histórico de carrapatos ou minutos neste caso podem ser levadas em consideração. Mas eles não são decisivos.

Neste caso, é possível esperar pela atualização das cotações sem sair do manipulador como resultado de uma interrupção do acesso. E funciona apenas no MT4.

Algumas fotos com explicações sobre o que foi dito.

Tomamos o tf. mensal. Os extremos em março de 1995, outubro de 2000 e julho de 2007 continuam a influenciar o mercado.

Até mesmo o extremo de fevereiro de 1985 tem um efeito:


Pode-se ver que as linhas construídas com estes extremos são notadas pelo mercado.

Vamos passar a outros prazos. Aproximadamente em tal proporção, como se estivéssemos fazendo marcas de ondas. Esta escolha pode resultar no desenvolvimento de um nível de onda em cada TF

Semanal tf:

D1:

H4:

M30:

M5:

M1:

Vemos extremos formados há muito tempo na história influenciando o momento atual do mercado.

----------------------------------

Deve haver acesso contínuo a citações para tais construções.

Continuarei adiante. Basicamente, tudo o que aparece nas fotos é usado no comércio manual.

Mas. É possível alimentar com citações de diferentes cronogramas as entradas de várias redes neurais, por exemplo, representadas nas imagens. Cada NS processará seus próprios dados. E dar sobre sua produção seu próprio entendimento do que está acontecendo. As saídas das redes neurais serão sincronizadas de acordo com o tempo de recebimento das barras.

Neste caso, os sinais da NS têm prioridade mais alta do que os de uma menor.

Os sinais recebidos das redes neurais são alimentados para a entrada dos seguintes NS com alguma consideração de prioridade. Pode haver variantes aqui.

A primeira camada de redes neurais, por exemplo, pode ser do tipo LSTM. Por camada, neste caso, entendemos as redes neurais que recebem citações cada uma a partir de seu prazo. Cada rede neural da primeira camada pode ter várias camadas de neurônios.

A soma da rede neural pode ter sua própria arquitetura. Esta é mais uma tarefa de engenharia.

É possível treinar, por exemplo, com algum algoritmo de abertura comercial. Na primeira camada de redes neurais. Isto é, cada rede neural da primeira camada é treinada separadamente. Abrimos negócios, por exemplo, no final de um bar na camada correspondente. Você pode até mesmo abrir negócios em diferentes direções. Os negócios são condicionais. No final desses negócios, um sinal é enviado para treinar o NS.

Assim, a rede neural agregada recebe o direito de escolher o melhor modo de comércio.

Assim, obtemos um algoritmo um pouco semelhante ao implementado na Alfa Zero pela equipe da DeepMinde.

Você deve treinar tal rede em toda a história para todos os períodos de tempo selecionados. A única coisa a ser levada em conta é que todas as séries cronológicas no MT5 são baseadas em minutos. Isto não é verdade. Os arquivos NCC sobre eurodólares até 1993 são feitos de séries cronológicas. Deve haver um algoritmo que reconstrua o verdadeiro horizonte de tempo das séries temporais.

Você pode treinar em um par de moedas. E testá-lo em outro.

------------------------------

Resumo. Por que nesta abordagem é necessário reagir rapidamente ao que está acontecendo no mercado?

 
Eugeni Neumoin:


Desculpe pelo fora de tópico, mas enquanto o tópico for interessante, não posso desistir.


Vitória:

Bem, quero dizer assim:

MQL tem nome de digitação() - retorna o nome do tipo de string, funciona até

void OnStart()
  {
   Print(typename(Txt()));      // в логе будет       string
  }
string Txt()
{
return(" Txt ");
}

conhecendo o tipo MyFunc() - escrever uma macro ((, ... É claro que posso escrever todas as macros do tipo _Try_helper ... em geral provavelmente não sou aventureiro, pois não sei como

 
Igor Makanu:

Desculpe por alguns tópicos fora do tópico, mas enquanto o tópico for interessante, não posso desistir.


Está tudo bem.

 
Igor Makanu:

MQL tem nome de digitação() - retorna o nome do tipo de string, funciona até

conhecendo o tipo MyFunc() - escrever uma macro ((, ... É claro que posso escrever todas as macros do tipo _Try_helper ... Bem, acho que não sou um jogador, pois não sei como

nome datilográfico() em µl não vai ajudar, não vai dar em tempo de compilação um tipo adequado para declaração de uma variável, apenas imprimi-la. Isto nos deixa com Try_d(), Try_i(), ... . Eu não sei como obter a funcionalidade de declinação em µl.

 
Vict:

O nome datilográfico() em µl não ajudará, não lhe dará em tempo de compilação um tipo adequado para declaração de uma variável, apenas imprima-o. Isto nos deixa apenas com Try_d(), Try_i(), ... . Eu não sei como obter a funcionalidade de declinação em µl.

Hmm, eu não me sinto um jogador de jeito nenhum! Eu até digo absolutamente nenhum jogador! ))) - Eu não sei como, é assim que algo vai funcionar (eu realmente não entendo como é no nível da máquina "tudo girando" - eu acho que temos uma linguagem estritamente dactilografada?)

void OnStart()
{
  int i = func(1);
  double d = func(1.123);
  string s = func("s");
  Print("i = ",i);
  Print("d = ",d);
  Print("s = ",s);
}

template<typename T>
T func(T invalue)
{
   string s = typename(T);
   if(s=="int") return(invalue);
   if(s=="double") return(invalue);
   if(s=="string") return("Hello word!!!");
return(NULL);
}

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) i = 1

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) d = 1.123

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) s = Olá palavra!!!


você também pode descrever um ponteiro para a função

typedef void(*TFuncvoidPTR)(void);

e uso posterior

TFuncvoidPTR      func[];
....
func[0]();
 
Vict:

nome datilográfico() em µl não ajudará, não dará em tempo de compilação tipo adequado para declaração de variáveis, apenas o imprimirá. Isso nos deixa apenas para multiplicar Try_d(), Try_i(), ... . Eu não sei como obter a funcionalidade de declinação em µl.

Uma função de modelo com uma variável estática do tipo T.

 
Igor Makanu:

Obrigado!

Li seus posts, infelizmente você está certo em muitos aspectos, ontem correspondi muito com o moderador Artem neste tópico, o resultado da conversa: se for implementado dessa maneira, então deve funcionar dessa maneira... Em geral, como nos antigos anúncios "Você simplesmente não sabe como cozinhá-los!

Imho, os resultados do compilador MQL5 são realmente fantásticos (é muito produtivo!), mas seu uso como terminal comercial... Bem, vamos colocar desta forma: requer muito, muito bom treinamento técnico e desejo de escrever ~30% mais código do que "no terminal antigo" ( - mesmo esta frase é uma expressão bem estabelecida no fórum)

Ay-yi-yi... Eu não disse isso :)

Eu estava dizendo - use o que você tem para obter o resultado desejado.

Eu guardo o resto de minhas emoções para mim mesmo.

 
Igor Makanu:

Eu não disse que a moderadora Artem disse tal coisa, apenas escrevi o resultado da conversa - acho que esse é o meu julgamento, que só posso formar com base nas minhas emoções e análise da conversa .... ))))

ou seja, não sei o que aconteceu na cabeça de alguém, só consigo ver minha própria cabeça... felizmente no espelho por enquanto ))))

Eu teria acreditado se, em vez de

o resultado da conversa: se for implementado dessa forma, então deve funcionar... como os velhos anúncios "você simplesmente não sabe como cozinhá-los"!

foi

minha conclusão é: se for implementado dessa forma, então é assim que deve funcionar... como os velhos anúncios: "Eu simplesmente não sei como cozinhá-los"!

E assim acontece que uma cabeça do espelho citado supostamente moderador Artem...

E bom, se foi uma conversa em particular. Mas tirar conclusões públicas sobre minhas palavras que eu não disse é enquadrar-me publicamente com minha suposta opinião completamente errada - eu tenho uma opinião completamente diferente daquela alegadamente expressa na citação.

Eu posso dar minha opinião:

Vamos fazer o melhor do que temos no momento, não choramingar, ajudar a encontrar bugs e pedir com antecipação por consertos - eles são consertados e novas e boas características aparecem.

 
Artyom Trishkin:

Eu acreditaria se, em vez de

foi

Mas, ao que parece, uma cabeça do espelho citado supostamente moderador Artem...

E bom, se foi uma conversa em particular. Mas tirar conclusões públicas sobre minhas palavras que eu não disse é enquadrar-me publicamente com minha opinião completamente errada - eu tenho uma opinião completamente diferente daquela alegadamente expressa na citação.

Eu posso dar minha opinião:

Não estou reclamando, estou ajudando a encontrar bugs e pedindo consertos - eles estão sendo consertados e novas características legais estão aparecendo.

hmm, como as coisas se tornaram complicadas.... limpo depois de mim, minha opinião... quem se importa? o que vai mudar? os desenvolvedores têm sua própria visão de seus produtos, é o seu negócio e minha opinião ... se você não atualizar a linha em 2 dias, ela estará muito fora do topo


... Como isso vai mudar ... Bem, hoje um bom homem@Vict- me mostrou algumas técnicas de depuração fácil, e o mais importante - eu posso alcançar a legibilidade do meu código - isso mudou minha opinião sobre a MQL5, e em geral, os membros do fórum

Vou me calar agora, felizmente existe um fórum com uma longa história, você não pode relê-lo - as respostas às minhas perguntas na busca por este fórum são numerosas

 
Igor Makanu:

O fxsaber está correto - há uma opção

 template <typename T> T Try_helper(T val, bool assign) {
   static T sval;
   if (assign)
      sval = val;
   return sval;
}
#define  Try(EXPR, MES)                    \
   Try_helper(EXPR, true);                \
   if (Try_helper(EXPR, false) <= 0.0) {  \
     printf("Error: %s ", MES);           \
     return;                              \
   }

double f(double) {return DBL_MAX;}
ulong f(ulong) {return ULONG_MAX;}

void OnStart()
{

   double d = Try(f(0.), "double error");
   ulong u = Try(f(0), "ulong error");
}

É um pouco kitschy - EXPR será calculado duas vezes, mas ainda é mais flexível. Não se pode dizer que seja universal (somente para tipos aritméticos. O valor do erro deve ser igual, o que é desagradável. Tentei evitá-lo através da especialização explícita da estrutura/função, mas isso pode não ser possível.

template <typename T> bool Try_helper_is_valid(T val);
template <> bool Try_helper_is_valid<string>(string val) {val==""?false:true;}  // compile-time error

template <typename T>
struct S;
template <>
struct S<string> {...};      // compile-time error

Bem, parece que não importa onde você escavar no µl, você encontrará armadilhas em todos os lugares. Provavelmente, é melhor se limitar a uma pequena macro altamente especializada com um tipo fixo.