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

 
elibrarius:

Falhado)

Outro ponto, se você tomar por exemplo não 0, e por exemplo 0,5 - mesmo com seu método "flutua" de amostra em amostra.

Apenas o ajuste manual do alcance para cada entrada ajudará. Mas não é claro como determiná-lo. Por exemplo, você pode executar dados por um ano e rejeitar 1-5% dos outliers. E trabalhar com eles durante o ano. Embora dentro de um ano eles mudem.


Sim, você precisa pegar a amostra máxima disponível primeiro e encontrar o multiplicador (eu o tenho chamado multiplicador por algum motivo :)

E se uma nova amostra de repente tiver um valor mais alto... bem, terá de se dividir por ela. Mas isto raramente acontece se tomarmos incrementos com um pequeno atraso, por exemplo close[0]/close[10]... e com close[0]/close[100] já pode ser mais frequente... mas penso que já existe uma excepção, especialmente se periodicamente nos retrairmos NS

Não tenho tempo para pensar em 0,5. :)

 

Só devem ser utilizados preditores que Tenham uma RELAÇÃO com a variável alvo. Se "linearmente" ou "não-linearmente" é irrelevante, irrelevante para a formulação muito precisa de "ter uma relação".

Para esclarecer o significado de "ter uma relação" novamente, vou dar um exemplo que já dei várias vezes neste fio.


Alvo: a população, tem duas classes: homens e mulheres

Tomando um preditor: roupa. Tem dois valores: calças e saias.

Com tais classes e tal preditor, uma parte do preditor irá prever uma classe e a outra parte irá prever a outra com base em "homens-calças", "mulheres-saias". Idealmente, uma classificação sem erros pode ser construída.

Se aplicarmos este sistema aos escoceses, haverá uma sobreposição nas 'saias' usadas por ambos os sexos. Esta sobreposição dará um limite superior ao erro, que não pode ser superado.


É obrigatório testar o modelo em dois arquivos de tempo diferentes: antes de 1 de janeiro e depois de 1 de janeiro.

No primeiro arquivo: ensinar, testar e "fora de amostra". Se os três valores de erro forem aproximadamente iguais, então execute no segundo arquivo - o erro não deve diferir significativamente (não mais do que 10%) dos três primeiros.

ESTE MODELO NÃO É REEDUCADO.


PS.

Se você incluir preditores que não são relevantes para o alvo, "borras de café", o erro pode ser drasticamente reduzido. Eu, por exemplo, não considero modelos onde o erro é inferior a 10%. Mas é sempre o mesmo: o erro no segundo arquivo é um múltiplo do erro no primeiro arquivo. O modelo é REBUILD, ele pegou alguns valores do ruído, tentando reduzir o erro de classificação, e no futuro tais valores muito provavelmente não existirão, ou existirão, ou em tempos.... Este modelo não tem poder de previsão.

 
SanSan Fomenko:

No primeiro arquivo: aprender, testar e "fora da amostra". Se os três valores de erro forem mais ou menos iguais, então execute no segundo arquivo - o erro não deve diferir muito (não mais do que 10%) dos três primeiros.

Qual é a diferença entre

1) uma seção "fora de amostra" do primeiro arquivo + outro arquivo "fora de amostra".

2) e um "fora de amostra", mas uma secção maior incluindo o segundo ficheiro?

Parece-me que o resultado vai ser o mesmo. Se na primeira variante tudo estiver mal no segundo arquivo, os mesmos dados arruinarão tudo na segunda variante.

 

Existem geralmente três secções no treino NS. Uma seção de Treinamento, uma seção de Teste e uma seção de Controle. Se na secção de teste o erro estiver dentro dos limites normais, então consideramos que o modelo não é retrabalhado. IMHO.

 
Mihail Marchukajtes:

Existem geralmente três secções no treino NS. Uma seção de Treinamento, uma seção de Teste e uma seção de Controle. Se na secção de teste o erro estiver dentro dos limites normais, então consideramos que o modelo não é retrabalhado. IMHO.

Concordo, mas o motivo pelo qual SanSanych está introduzindo uma 4ª seção (a segunda seção do escritório) não é claro. É possível, afinal de contas, estender um para incluir ambos.
 
elibrarius:

Qual é a diferença entre

1) uma seção "fora de amostra" do primeiro arquivo + outro arquivo "fora de amostra".

2) e uma seção "fora de amostra", mas maior, incluindo o segundo arquivo?

Parece-me que os resultados serão os mesmos. Se as coisas estiverem ruins no primeiro no segundo arquivo, então os mesmos dados vão estragar as coisas no segundo arquivo também.


O primeiro arquivo é dividido em três partes ao acaso, ou seja, peças de treinamento, amostras de teste e controle são misturadas por data. Isso não acontece no comércio real.

Mas a segunda é uma troca de imitação: nós sempre trocamos APÓS a seção de treinamento. Ao contrário da sua visão, muitas vezes os resultados no segundo arquivo são muito diferentes dos resultados no primeiro - o modelo é excessivamente treinado e inadequado para uso.

 
Grigoriy Chaunin:

https://github.com/RandomKori/Py36MT5 Aqui estão as fontes da biblioteca Python para o MT5. O único problema é com as arrays. Passar um array ou recebê-lo não funciona corretamente. Eu depurei o código DLL no Visual Studio. Tudo funciona lá. A questão é, pode ser um bug de terminal. Ainda não escrevi como trabalhar com a biblioteca. Não tem sentido. Ninguém precisa dele sem matrizes. Embora talvez lixado no arquivo pythom.mqh Ajude-me a descobrir. Tudo será útil.

Boa ideia e útil biblioteca MT5, mas é bastante problemático sincronizá-la com um ficheiro de script python.

Acho melhor sincronizar variáveis MQL diretamente com variáveis python através de um dicionário local e executar fragmentos de código Python diretamente das constantes de strings no código da EA.

Eu tentei o teste, compilando o bcc64 a partir da linha de comando e ele funciona bem em python 3.6:

#include <stdio.h>
#include "python.h"
#pragma link "python36.lib"

int main(int argc, char **argv)
{
  Py_Initialize();
  PyObject* main = PyImport_AddModule("__main__");
  PyObject* global = PyModule_GetDict(main);
  PyObject* local = PyDict_New();

  int a, b = 2, c = 2; // synchronize python variables and calc a = b * c
  PyDict_SetItemString(local, "b", PyLong_FromLong(b));
  PyDict_SetItemString(local, "c", PyLong_FromLong(c));
  a = PyLong_AsLong(PyRun_String("b * c", Py_eval_input, global, local));
  printf("%d*%d=%d\n",b,c,a);

  PyRun_SimpleString("import sys"); // import python sys and read version
  printf(_PyUnicode_AsString(PyRun_String("sys.version", Py_eval_input, global, local)));

  Py_Finalize();
  return 0;
}

Seria bom adicionar esta funcionalidade à sua biblioteca, eu estava prestes a escrever a minha própria, mas infelizmente por enquanto estou ocupado com a biblioteca P-net para python.

A propósito, eu escrevi sobre esta nova rede neural aqui em um ramo, de acordo com resultados preliminares de testes em exemplos com a íris de Fisher, ela é treinada três ordens de magnitude mais rápido que o DNN em TensorFlow, com resultados de testes iguais.

 
SanSanych Fomenko:

O primeiro arquivo é dividido em três partes aleatórias, ou seja, peças de treinamento, amostras de teste e controle são misturadas por data. Isto não acontece no comércio real.

Mas a segunda é uma troca de imitação: nós sempre trocamos APÓS a seção de treinamento. Ao contrário da sua visão, muitas vezes os resultados no segundo arquivo são muito diferentes dos do primeiro - o modelo é excessivamente treinado e não se adequa à finalidade.

Eu ponho sempre as 3 primeiras partes em sequência. E se o 3º é mau, o modelo está sobre-treinado.
 

Tenha em mente que qualquer redundância de dados irá atrasar a entrada do modelo em combate. Isto afecta directamente a qualidade dos sinais recebidos depois de 0 de Janeiro de 2010.

Pessoalmente, escolhi a seguinte metodologia. Inverti o modelo obtido utilizando sinais de Compra e testei-o na mesma parte do mercado, mas para sinais de Venda. Assim, eu não perco tempo precioso e estimar adequadamente as capacidades do modelo. IMHO

 
SanSanych Fomenko:

O primeiro arquivo é dividido em três partes aleatórias, ou seja, peças de treinamento, amostras de teste e controle são misturadas por data. Isto não acontece no comércio real.

Mas a segunda é uma troca de imitação: nós sempre trocamos APÓS a seção de treinamento. Ao contrário da sua visão, muitas vezes os resultados no segundo arquivo são muito diferentes dos resultados no primeiro - o modelo é excessivamente treinado e não se adequa ao propósito.


Para os sistemas de previsão, a ordem em que os dados chegam é importante. Para classificação, NÃO.