Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 1851

 
Mihail Marchukajtes:

Alexei, muito obrigado. Com certeza vou verificar tudo e informá-lo do resultado. Quanto a olhar para o futuro, isso é absolutamente sem importância e não acontecerá se a EA escrever como o indicador lê. Se não houver diferença entre eles, isso não importará. Alternativamente, quando uma nova barra aparece, esperamos pela primeira mudança de OI e registamos o novo valor para a primeira barra anterior. Podemos até registar não um novo valor, mas o antigo, que era o último para a primeira barra. Ou seja, na verdade, vamos começar a escrevê-lo no final do bar anterior.

O importante não é o OI que atribuímos à barra de minutos, mas como o indicador será lido a partir do arquivo.

Pense também não só em treinamento, mas também em usar o modelo quando os dados serão retirados do mercado - os dados mais confiáveis estarão disponíveis lá. Por enquanto os dados serão salvos na abertura da vela, ou seja, na barra zero não haverá alteração após a abertura (se eu acertar :) ). Se você precisar dela em uma barra fechada, você pode modificá-la de qualquer outra forma. A única diferença é o valor da última ou da penúltima barra.

 

neocognitron - uma espécie de rede convolucional, mas sem um professor

https://habr.com/ru/post/214317/

Quem entende como funciona, por favor explique-me.

 
Aleksey Vyazmikin:

Além disso, pense não só em treinamento, mas também em aplicar o modelo quando os dados serão retirados do mercado - para que haja os dados mais confiáveis. Por enquanto os dados serão salvos na abertura da vela, ou seja, na barra de zero não haverá alteração após a abertura (se eu acertar :) ). Se você precisar de dados em uma barra fechada, você pode fazer isso mais tarde. A única diferença é a última ou penúltima barra da qual a EA deve obter dados.

Embora o Expert Advisor comece a trabalhar na abertura do bar, ele ainda obtém dados do primeiro bar. No meu caso é até tirada da segunda barra; bem, este é o meu bug porque não devemos esperar 30 segundos para que os valores sejam atualizados na primeira barra; a segunda barra já foi calculada há bastante tempo. É por isso que escrever o primeiro valor de OI no bar aberto não é tão assustador. Acontece que eu escrevo o valor actual na história. Não há como olhar para trás. E não importa, não o tiramos de uma cópia. O mais importante é que o indicador o leia corretamente. Você tem uma função adicional no seu código para ler um arquivo que contém a condição "Data Verdadeira". Para o carregamento correto do histórico do arquivo eu tive que adicionar a seguinte linha

 if(New_Data==true)
            {
               ArrayResize(oi,x+2,1000);
               if(cnt==0)
               {
               Arh_Time=StringToTime(str);///////////// Если честно в обще не понял зачем ты так это всё разделил
                  oi[x].time=Arh_Time;                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
               }

               else if(cnt==1)
               {
                  oi[x].oi=Arh_oi;   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и
                  New_Data=false;
                  x++;
               }
            }

E o indicador começou a trabalhar com os dados gravados por minuto e por tick, tudo em um arquivo. Até verifiquei como são construídos diferentes prazos e tudo se encaixa bem, mas também tive que mudar esta linha no corpo principal.

for(int s=f; s<count_size; s++)
            {
               //Print("Test_02");
               if(oi[s].time>time[i])
               {
                  //Print("Test_03");
                  if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже
                  //Print("s=",s);
                  f=s;
                  break;
               }
               if(s+1==count_size)
               {
                  BufOI[i]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
                  //Print("OI=",SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST));
                  if(BufOI[i]<1)BufOI[i]=BufOI[i-1];
                  if(BufOI[i]<1 && BufOI[i-1]<1)BufOI[i]=100;
                  f=s;
               }
            }

Mudei esta linha no corpo principal. Caso contrário, coloquei o EA na tabela e tenho estado à espera da abertura.

Aqui está um indicador e não agradeça :-)!!!! Estava a brincar com os agradecimentos. Que tal 37 libras? Queres ganhar?

Arquivos anexados:
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Se o Expert Advisor trabalha junto à abertura do bar, mesmo que esteja atrasado, é correto alimentar os dados com o fechamento da vela, ou seja, olhar para o futuro? É por isso que os dados mais recentes antes desta vela são usados, ou seja, um pequeno atraso, em vez de antecipação.


Onde está o cálculo de 5 ticks? Às vezes acontece que uma troca não é concluída em um minuto, então você perde uma barra, então eu removi a comparação para a mudança do volume de OI, então os dados são escritos imediatamente na abertura de uma nova vela. Talvez me tenha esquecido, tenho de o testar nos dados, ontem não tinha nenhum e é dia de semana :(

Haverá uma lacuna e eu devo reescrever o seu valor a partir da segunda barra. Mas a minha pergunta permanece sem resposta: a nova condição da barra será cumprida quando a bola abrir e alguns ticks passarem, como exemplo, e só então o IA mudará?
 
Infelizmente, nem a primeira nem a segunda barra são gravadas no modo de tempo normal. Ao recompilar o indicador, o histórico é carregado mas apenas até a terceira barra, nem a segunda nem a primeira são atualizadas, apesar de estarem no arquivo de fato.
 
Mihail Marchukajtes:

Os dados ainda são retirados do primeiro bar, embora a EA comece a trabalhar na abertura do bar. No meu caso é até da segunda barra, mas este é o meu bug porque não preciso esperar 30 segundos para que os valores sejam atualizados na primeira barra, a segunda barra já foi calculada e por um longo tempo. É por isso que escrever o primeiro valor de OI no bar aberto não é tão assustador. Acontece que eu escrevo o valor actual na história. Não há como olhar para trás. E não importa, não o tiramos de uma cópia. O principal é que o indicador o leia corretamente. Você tem uma função adicional no seu código para ler um arquivo que contém a condição "Data Verdadeira". Para o carregamento correto do histórico do arquivo eu tive que adicionar a seguinte linha

E o indicador começou a trabalhar com os dados gravados por minuto e por tick, tudo em um arquivo. Até verifiquei como são construídos diferentes prazos e tudo se encaixa bem, mas tive que mudar esta linha também no corpo principal.

Mudei esta linha no corpo principal. Caso contrário, coloquei o EA na tabela e tenho estado à espera da abertura.

Aqui está um indicador e não agradeça :-)!!!! Estava a brincar com os agradecimentos. Que tal 37 libras? Queres ganhar dinheiro?

Se você não usar uma barra zero, é claro que você pode fazer uma olhada no futuro. Tenho feito um personalizado aqui, a forma como trabalho com os dados.

A única coisa que me confunde é.

if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже

Esta desigualdade pode não ser respeitada. Uma vez que o tempo do primeiro tique pode não coincidir com o tempo de abertura da vela. Poupe em vez de tempo de arquivo,

Arh_Time=StringToTime(str);

truncar o tempo para o minuto a partir da variável NewTime.

E sobre a recompensa - eu pensei que já a tinha ganho :)


Mihail Marchukajtes:
Sim, haverá uma lacuna e você deve reescrever o valor da segunda barra. Mas minha pergunta permanece sem resposta: a condição para um novo bar será cumprida quando uma bola abrir e passar alguns tiquetaques, por exemplo, e depois o OI for alterado?

A verificação de uma nova barra ocorre após uma mudança de volume, por isso devemos chegar à parte do código onde a entrada é feita.


Mihail Marchukajtes:
Infelizmente, ele não escreve o primeiro ou o segundo bar em modo raltime. Quando recompilo o indicador o histórico está carregando, mas está carregando apenas até a terceira barra, nem a segunda nem a primeira são atualizadas, embora elas estejam de fato no arquivo.

Não escreve onde? O Conselheiro Especialista não escreve? Experimente a versão antiga do EA onde ele escreve várias vezes por minuto e veja se o indicador funcionará corretamente com ele.

 
Aleksey Vyazmikin:

Se você não usar a barra zero, você pode, é claro, dar uma olhada no futuro. Tenho feito a minha própria coisa aqui, a forma como trabalho com os dados.

Só que eu estou confusa.

Esta desigualdade pode não ser respeitada. Uma vez que o tempo do primeiro tique pode não coincidir com o tempo de abertura da vela. Poupe em vez de tempo de arquivo,

truncar o tempo para o minuto a partir da variável NewTime.

E sobre a recompensa - eu pensei que já a tinha ganho :)


Verifique se há uma nova barra após a mudança de volume, portanto deve chegar à parte do código onde a escrita ocorre.


Onde é que não se escreve? A EA não escreve? Tente a versão antiga do EA onde ele escreveu várias vezes por minuto, o indicador vai funcionar corretamente com ele.

Estou lidando com a EA agora, ela continua mudando o valor da primeira barra no arquivo por alguma razão. Eu sinto que o novo bar é sempre melhor. Se eu não tivesse verificado agora mesmo, tropeçava.

E assim com cada recompilação. O que é HZ? Já tentei muitas coisas, às vezes carrega-o, às vezes não...

 
Mihail Marchukajtes:

Agora estou lidando com o Expert Advisor, ele continua mudando o valor da primeira barra no arquivo por alguma razão. Parece que o novo bar é sempre mais escuro. Eu verifiquei agora e parece que quando recompilar.

E assim com cada recompilação. O que é HZ? Já tentei muitas coisas - às vezes carrega-o, às vezes não...

O meu EA não escreve o teu EA de todo - tenho de o experimentar. Já experimentei e não funciona, não quero que abra ou feche.

 
Aleksey Vyazmikin:

O meu EA não escreve o teu EA de todo - eu preciso de o descobrir. Ou por favor mande-me uma versão funcional só para a Si escrever.

É necessário especificar o contrato de futuros atual em todos os lugares. Claro, não funciona em Splice. Se eu tentar usar uma alternativa, vou mostrar a versão atual do indicador, que carrega apenas a segunda barra ao compilar, enquanto a primeira barra sempre muda.

Arquivos anexados:
 

Alexey, é possível fazer o indicador ler as leituras do arquivo para a primeira barra quando uma nova barra aparece e assim a sincronização mais completa será alcançada. Na verdade, não vai ficar na tabela e será chamada periodicamente de sinal em sinal... A questão é que a EA utiliza o MarketBook e o indicador recebe dados da bolsa. Acho que devemos usar o monitoramento do livro de mercado e o indicador começará a trabalhar com esses inputs. Lucro!!!!!

Penso que a única fonte de obtenção de OM deve ser a EA e a duplicação de pedidos para a troca não é aceitável, caso contrário só nos preocupamos em negociar. O que você acha?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
Razão: