Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Capturas de tela da plataforma de negociação MetaTrader
GBPUSD, H1, 2017.03.01
Alpari International Limited, MetaTrader 5, Demonstração
O que é o arco-íris?
A propósito, peguei os outros dados. Novamente, na terceira imagem, há um arco-íris. Suponho que isso ocorra devido à sua interferência no código a partir do qual você escreveu esse artigo. Você escreveu no documento que fez algumas modificações.
A normalização da aleatoriedade ao inicializar os nós não limita os próprios nós durante o treinamento. Você pode inicializar os nós com unidades, e isso não afetará o resultado.
Mas isso pode afetar a velocidade de obtenção do resultado.
O fato de eu inicializar os nós com valores aleatórios do campo entre o mínimo e o máximo para cada uma das colunas separadamente, apenas acelera a convergência, porque o SOM não precisa conduzir os nós para os campos especificados no início.
Esse processo é organicamente incorporado ao próprio processo de aprendizagem, de modo que não se pode nem dizer que este é o momento em que a grade está dirigindo e este é o momento em que está aprendendo. Dirigir em um determinado campo significa ajustar o nó com um coeficiente de mudança muito grande.
Portanto, fundamentalmente, minha intervenção não mudou nada. Ela apenas acelerou a velocidade de convergência.
Mas se você tiver reclamações sobre esse mecanismo, pode corrigi-lo. Altere a inicialização dos nós ao criar a grade em Include\SOMNode.mqh
//| Inicialização dos parâmetros do nó no limite definido
//+------------------------------------------------------------------+
void CSOMNode::InitNode(int x1,int y1,int x2,int y2,const double &min_values[],const double &max_values[])
{
//--- definir coordenadas do nó
m_x1=x1;
m_y1=y1;
m_x2=x2;
m_y2=y2;
//--- cálculo das coordenadas do centro do nó
m_x=x1+MathAbs((x2-x1))/2;
m_y=y1+MathAbs((y2-y1))/2;
//--- preparar uma matriz de pesos
ArrayResize(m_weights,m_dimension);
//--- inicialização dos pesos com valores aleatórios;
for(int i=0; i<m_dimension; i++) {m_weights[i]=min_values[i]+(max_values[i]-min_values[i])*rand()/32768;}
};
Coloque rand() não normalizado e ele será exatamente como no algoritmo original. Assim: m_weights[i]=rand();
Estou certo em entender que se você criar um arquivo "optim.csv" como este:
há apenas dois valores:
então a execução de "Sample5_SOM_Net_Player" mostrará algo como isto
ou seja, a rede Cohen descobriu que o arquivo "optim.csv" tem dois ... Dois o quê? Padrões?
Ou seja, se eu quiser estudar duas barras vizinhas - se elas são de alta ou de baixa -, preciso fazer uma descrição dessas sequências, mais ou menos assim:
No final, haverá quatro sequências principais ("11", "12", "21", "22") e uma quinta - quando qualquer barra não for nem de alta nem de baixa (o tamanho do corpo da barra é zero).
Em seguida, basta percorrer o número determinado de barras e criar um arquivo "optim.csv" no qual escreverá essas sequências. Você obterá algo como
Em seguida, execute "Sample5_SOM_Net_Player". Certo?
Você tem dois valores, mas solicitou 250 nós (50x50), portanto, naturalmente, a grade estende os nós por todo o campo de valores intermediários.
Além disso, você inseriu um valor insignificante Time no campo de agrupamento. Se quiser usar o tempo, a estrutura de dados deverá refletir de alguma forma a periodicidade, caso contrário, a grade entenderá como a segunda-feira difere da sexta-feira. Uma representação de tempo como a que você tem é razoável, pelo menos em dados de vários anos, pois eles encontrarão repetições (se você remover os valores do ano, é claro).
Para entender uma ideia simples, a grade de Kohonen coloca os nós na vizinhança de exemplos semelhantes (em termos multivariados). E então tudo se encaixará com a compreensão do trabalho.
Você tem dois valores, mas solicitou 250 nós (50x50), portanto, naturalmente, a grade estende os nós por todo o campo de valores intermediários.
Além disso, você inseriu um valor insignificante Time no campo de agrupamento. Se quiser usar o tempo, a estrutura de dados deverá refletir de alguma forma a periodicidade, caso contrário, a grade entenderá como a segunda-feira difere da sexta-feira. Uma representação de tempo como a que você tem é razoável, pelo menos em dados de vários anos, pois eles encontrarão repetições (se você remover os valores do ano, é claro).
Para entender uma ideia simples, a grade de Kohonen coloca os nós na vizinhança de exemplos semelhantes (em termos multivariados). E então as coisas se encaixarão com a compreensão do funcionamento.
Se eu refizer o arquivo csv neste formato: [tamanho do corpo da vela][dia da semana (1, 2, 3, 4, 5)] e preenchê-lo para, digamos, 100 barras, acabarei com 100 EXEMPLOS no arquivo csv? E quantos nós colocar nesse caso? 3*3?
Se eu refizer o arquivo csv neste formato: [tamanho do corpo da vela][dia da semana (1, 2, 3, 4, 5)] e preenchê-lo para, digamos, 100 barras, acabarei com 100 EXEMPLOS no arquivo csv? E quantos nós colocar nesse caso? 3*3?
Depende do que você deseja obter, agrupamento ou regressão.
O clustering combinará vários exemplos em um único cluster, então o número de nós deve ser menor que o número de exemplos.
A regressão exigirá mais nós do que exemplos, para cobrir campos em pontos que não estão representados nos exemplos.
Novamente, esse processo não é binário, portanto, não se pode dizer que é um agrupamento, mas sim uma regressão; imagine-o como um espectro multidirecional, quanto mais agrupamento, menos regressão e vice-versa. E no ponto zero, quando o número de nós é igual ao número de exemplos, temos quantidades aproximadamente iguais de agrupamento e regressão.
Depende do fato de você querer clusterização ou regressão.
O clustering combinará vários exemplos em um único cluster, então o número de nós deve ser menor que o número de exemplos.
A regressão exigirá mais nós do que exemplos, para cobrir campos em pontos que não estão representados nos exemplos.
Bem, para simplificar, eu queria obter uma visualização para quatro sequências:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Discussão do artigo "Mais uma vez sobre os mapas de Kohonen"
Vladimir Karputov, 2017.04.04 13:49
Ou seja, se eu quiser investigar duas barras vizinhas - se elas são de alta ou de baixa, preciso fazer uma descrição dessas sequências, algo como:
No final, haverá quatro sequências principais ("11", "12", "21", "22") e uma quinta - quando qualquer barra não é nem de alta nem de baixa (o tamanho do corpo da barra é zero).
em um determinado número de barras. Ou seja, executo o script em um determinado número de barras e atribuo uma das cinco sequências ("0", "11", "12", "21", "22"). Também atribuo um dia da semana. No final, tenho 100 exemplos de [nome da sequência][dia da semana] para 100 barras.
Bem, para simplificar, eu queria uma visualização para quatro sequências:
em um determinado número de barras. Ou seja, eu passo o script em um determinado número de barras e atribuo uma das cinco sequências ("0", "11", "12", "21", "22"). Também atribuo um dia da semana. Acabo com 100 exemplos de [nome da sequência][dia da semana] para 100 barras.
Desculpe, mas não entendi. Se você tem uma combinação de condições e as conhece exatamente, por que precisa de uma grade?
Caso contrário, é melhor mostrar na grade o que lhe interessa, por exemplo, a diferença Open[i]-Close[i] em uma coluna e a diferença Open[i+1]-Close[i+1] em outra coluna, e já com base no agrupamento, definir as condições que o agrupamento deve interpretar.
Se você tem uma combinação de condições e sabe exatamente quais são elas, por que precisa de uma grade?
***