Discussão do artigo "Funcionalidades do assistente MQL5 que você precisa conhecer (Parte 02): Mapas de Kohonen"
Resta uma pergunta: como podemos entender por que o valor IN_RADIUS é considerado o módulo para normalizar os dados?
double _dimension=fabs(IN_RADIUS)*((Low(StartIndex()+w+Index)-Low(StartIndex()+w+Index+1))-(High(StartIndex()+w+Index)-High(StartIndex()+w+Index+1))))/fmax(m_symbol.Point(),fmax(High(StartIndex()+w+Index),High(StartIndex()+w+Index+1))-fmin(Low(StartIndex()+w+Index),Low(StartIndex()+w+Index+1))));
porque o raio do cluster é uma constante e tem um valor positivo.
Talvez isso seja um erro e o numerador inteiro deva ser considerado o módulo?
Montei o Expert Advisor, mas dois parâmetros, Stop Loss e Take Profit, não são os mesmos da captura de tela do artigo:

Como resultado, não há uma única negociação...
Estou fazendo algo errado?
E como usar outro indicador em vez do ATR, por exemplo, MACD?
Criei o Expert Advisor, mas os dois parâmetros Stop Loss e Take Profit não são os mesmos da captura de tela do artigo:
Como resultado, nem uma única negociação...
Estou fazendo algo errado?
E como usar outro indicador em vez do ATR, por exemplo, MACD?
Você pode fazer isso dessa forma:
bool CSignalMACD::InitMACD(CIndicators *indicators) { //--- adicionar objeto à coleção if(!indicators.Add(GetPointer(m_MACD))) { printf(__FUNCTION__+": error adding object"); return(false); } //--- inicializar o objeto if(!m_MACD.Create(m_symbol.Name(),m_period,m_period_fast,m_period_slow,m_period_signal,m_applied)) { printf(__FUNCTION__+": error initializing object"); return(false); } //--- ok return(true); }
também em protegido:
protected: CiMACD m_MACD; // objeto-oscilador //--- parâmetros ajustados int m_period_fast; // o parâmetro "período de EMA rápida" do oscilador int m_period_slow; // o parâmetro "período de EMA lento" do oscilador int m_period_signal; // o parâmetro "período de cálculo da média da diferença" do oscilador ENUM_APPLIED_PRICE m_applied; // o parâmetro "série de preços" do oscilador
e em público:
void PeriodFast(int value) { m_period_fast=value; } void PeriodSlow(int value) { m_period_slow=value; } void PeriodSignal(int value) { m_period_signal=value; } void Applied(ENUM_APPLIED_PRICE value) { m_applied=value;
e novamente em protected:
protected: //--- método de inicialização do oscilador bool InitMACD(CIndicators *indicators); //--- métodos de obtenção de dados double Main(int ind) { return(m_MACD.Main(ind)); } double Signal(int ind) { return(m_MACD.Signal(ind)); }
e finalmente:
bool CSignalKM::OpenLongParams(double &price,double &sl,double &tp,datetime &expiration) { CExpertSignal *general=(m_general!=-1) ? m_filters.At(m_general) : NULL; //--- if(general==NULL) { m_MACD.Refresh(-1); //--- se um preço base não for especificado explicitamente, será usado o preço de mercado atual double base_price=(m_base_price==0.0) ? m_symbol.Ask() : m_base_price; //--- sobrecarga de preço que define o preço de entrada para ser baseado no MACD price =base_price; double _range=m_MACD.Main(StartIndex())+((m_symbol.StopsLevel()+m_symbol.FreezeLevel())*m_symbol.Point()); //
Mas qual é o objetivo?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso

Novo artigo Funcionalidades do assistente MQL5 que você precisa conhecer (Parte 02): Mapas de Kohonen foi publicado:
Esta série de artigos propõe que o Assistente MQL5 deve ser um pilar para os traders. Por quê? Porque o trader não economiza apenas o tempo desenvolvendo suas novas ideias com o Assistente MQL5, mas reduz bastante os erros de desenvolvimento de código duplicado; ele está finalmente preparado para canalizar sua energia nas poucas áreas críticas de sua filosofia de negociação.
Um equívoco comum sobre os mapas de Kohonen é que os dados functor devem ser uma imagem 2D como é exibido abaixo. As imagens como as que se encontram abaixo são frequentemente compartilhadas como representativas do que são os Mapas de Kohonen.
Embora não esteja errado, eu quero destacar que o functor pode e talvez deva (para traders) ter uma única dimensão. Então, em vez de reduzir os nossos dados de alta dimensão a um mapa 2D, vamos mapeá-los em uma única linha.Os mapas de Kohonen, por definição, destinam-se a reduzir a dimensionalidade, então quero que levemos isso para o próximo nível neste artigo.O mapa de kohonen é diferente das redes neurais regulares tanto no número de camadas quanto no algoritmo subjacente.
Ele é uma camada única (geralmente uma grade 2D linear, como mencionado anteriormente) de um conjunto de neurônios, em vez de múltiplas camadas. Todos os neurônios nesta camada que nós estamos nos referindo como functor se conectam aos dados de alimentação, mas não para si significando que os neurônios não são influenciados pelos pesos dos outros de maneira direta, e eles são atualizados apenas em relação aos dados de alimentação. A camada de dados do functor é frequentemente um mapa" que se organiza a cada iteração de treinamento dependendo dos dados de alimentação. Como tal, após o treinamento, cada neurônio tem dimensão ajustada ao peso na camada functor e isso permite calcular a distância euclidiana entre dois desses neurônios.
Autor: Stephen Njuki