Artigo publicado Sistemas de negociação mais simples usando indicadores semafóricos:
Autor: Nikolay Kositsin
Uma pequena observação: há um erro mecânico de digitação no fragmento de código fornecido no exemplo, que foi copiado e colado:
//---- Declaração de variáveis locais double TrendVelue[2];
Compilei alguns sinais e reiniciei, como o "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), mas o MetaEditor não consegue visualizá-lo para criar um Expert Advisor no Assistente.
Como posso resolver isso?
Obrigado por essa explicação excelente e completa...!
daveM
Fiz o download e descompactei tudo conforme indicado nas instruções, mas o testador apresenta um erro em todos os sistemas:
o testador parou porque o OnInit falhou
CExpert::ValidationSettings: erro nos parâmetros de dinheiro
CMoneyFixedLot::ValidationSettings: o valor do lote deve estar no intervalo de 1,000000 a 1000000,000000
Por favor, diga-me o que devo ajustar.
Olá!
Estou tentando adicionar o módulo de sinal de negociação ASCtrendSignal (localizado no arquivo compactado mysignals.zip) criado com base no indicador ASCtrend (localizado no arquivo compactado indicators.zip) ao Assistente MQL5, mas nada funciona. Eu coloco o módulo de sinal de negociação ASCtrendSignal em Include\Expert\Signal e coloco o indicador ASCtrend no pacote Indicators, tudo parece estar correto, mas o módulo persistentemente não quer ser exibido no Assistente MQL5. Aqui está o código do módulo de sinal de negociação ASCtrendSignal:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Direitos autorais © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Direitos autorais © 2011, Nikolay Kositsin." #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Arquivos incluídos| //+------------------------------------------------------------------+ #property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> //--- início da descrição do assistente //+------------------------------------------------------------------+ //| Declaração de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // A constante para retornar o comando de compra para o Expert Advisor #define OPEN_SHORT 80 // A constante para retornar o comando de venda para o Expert Advisor #define CLOSE_LONG 40 // A constante para retornar o comando para fechar uma posição longa para o Expert Advisor #define CLOSE_SHORT 40 // A constante para retornar o comando para fechar uma posição curta para o Expert Advisor #define REVERSE_LONG 100 // A constante para retornar o comando para reverter uma posição longa para o Expert Advisor #define REVERSE_SHORT 100 // A constante para retornar o comando para reverter uma posição curta para o Expert Advisor #define NO_SIGNAL 0 // A constante para retornar a ausência de um sinal para o Expert Advisor //+----------------------------------------------------------------------+ //| Descrição da classe| //| Title=Os sinais baseados no indicador ASCtrend //| Type=SignalAdvanced.| //| Name=ASCtrend| //| Class=CASCtrendSignal| //| Page=| //| Parâmetro=BuyPosOpen,bool,true,Permissão para comprar //| Parâmetro=SellPosOpen,bool,true,Permissão para vender //| Parâmetro=BuyPosClose,bool,true,Permissão para sair de uma posição longa //| Parâmetro=SellPosClose,bool,true,Permissão para sair de uma posição vendida //| Parâmetro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe //| Parâmetro=RISK,int,4,Nível de risco| //| Parâmetro=SignalBar,uint,1,Índice da barra para o sinal de entrada //+----------------------------------------------------------------------+ //--- descrição do assistente fim //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Finalidade: Classe de gerador de sinais de negociação com base em //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| É derivado da classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal { protected: CiCustom m_indicator; // o objeto para acesso aos valores de ASCtrend //--- parâmetros ajustados bool m_BuyPosOpen; // permissão para comprar bool m_SellPosOpen; // permissão para vender bool m_BuyPosClose; // permissão para sair de uma posição longa bool m_SellPosClose; // permissão para sair de uma posição vendida ENUM_TIMEFRAMES m_Ind_Timeframe; // Período de tempo do indicador ASCtrend uint m_RISK; // Nível de risco uint m_SignalBar; // índice da barra para o sinal de entrada public: CASCtrendSignal(); //--- métodos de configuração de parâmetros ajustáveis void BuyPosOpen(bool value) { m_BuyPosOpen=value; } void SellPosOpen(bool value) { m_SellPosOpen=value; } void BuyPosClose(bool value) { m_BuyPosClose=value; } void SellPosClose(bool value) { m_SellPosClose=value; } void Ind_Timeframe(ENUM_TIMEFRAMES value) { m_Ind_Timeframe=value; } void RISK(uint value) { m_RISK=value; } void SignalBar(uint value) { m_SignalBar=value; } //--- método de validação de parâmetros ajustáveis virtual bool ValidationSettings(); //--- método de validação de parâmetros ajustáveis virtual bool InitIndicators(CIndicators *indicators); // inicialização de indicadores //--- método de geração de sinais de entrada no mercado virtual int LongCondition(); virtual int ShortCondition(); bool InitASCtrend(CIndicators *indicators); // Método de inicialização do indicador ASCtrend protected: }; //+------------------------------------------------------------------+ //|Construtor CASCtrendSignal.| //| INPUT: não.| //| OUTPUT: não.| //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ void CASCtrendSignal::CASCtrendSignal() { //--- configuração de parâmetros padrão m_BuyPosOpen=true; m_SellPosOpen=true; m_BuyPosClose=true; m_SellPosClose=true; //--- parâmetros de entrada do indicador m_Ind_Timeframe=PERIOD_H4; m_RISK=4; //--- m_SignalBar=1; m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE; } //+------------------------------------------------------------------+ //| Verificação de parâmetros ajustáveis.| //| INPUT: não.| //| OUTPUT: verdadeiro se as configurações forem válidas, falso - se não forem. //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ bool CASCtrendSignal::ValidationSettings() { //--- verificação de parâmetros if(m_RISK<=0) { printf(__FUNCTION__+": Risk level must be above zero"); return(false); } //--- conclusão bem-sucedida return(true); } //+------------------------------------------------------------------+ //| Inicialização de indicadores e séries temporais. //| INPUT: indicators - ponteiro para uma coleção de objetos //| de indicadores e séries temporais.| //| OUTPUT: true - em caso de sucesso, caso contrário - falso. || OUTPUT: true - em caso de sucesso, caso contrário - falso. || //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitIndicators(CIndicators *indicators) { //--- verificação do ponteiro if(indicators==NULL) return(false); //--- inicialização do indicador if(!InitASCtrend(indicators)) return(false); //--- conclusão bem-sucedida return(true); } //+------------------------------------------------------------------+ //| Inicialização do indicador ASCtrend.| //| INPUT: indicators - ponteiro para uma coleção de objetos //| de indicadores e séries temporais.| //| OUTPUT: true - em caso de sucesso, caso contrário - falso. || OUTPUT: true - em caso de sucesso, caso contrário - falso. || //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitASCtrend(CIndicators *indicators) { //--- verificação do ponteiro if(indicators==NULL) return(false); //--- adicionando um objeto à coleção if(!indicators.Add(GetPointer(m_indicator))) { printf(__FUNCTION__+": error of adding the object"); return(false); } //--- configuração dos parâmetros do indicador MqlParam parameters[2]; parameters[0].type=TYPE_STRING; parameters[0].string_value="ASCtrend.ex5"; parameters[1].type=TYPE_INT; parameters[1].integer_value=m_RISK; //--- inicialização do objeto if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters)) { printf(__FUNCTION__+": object initialization error"); return(false); } //--- número de buffers if(!m_indicator.NumBuffers(2)) return(false); //--- O indicador ASCtrend foi inicializado com sucesso return(true); } //+------------------------------------------------------------------+ //| Verificação das condições para abrir uma posição longa e //| e fechando uma curta| //| INPUT:no| //| OUTPUT: Peso do voto de 0 a 100| //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ int CASCtrendSignal::LongCondition() { //--- o sinal de compra é determinado pelo buffer 1 do indicador ASCtrend double Signal=m_indicator.GetData(1,m_SignalBar); //--- obtendo um sinal de negociação if(Signal && Signal!=EMPTY_VALUE) { if(m_BuyPosOpen) { if(m_SellPosClose) return(REVERSE_SHORT); else return(OPEN_LONG); } else { if(m_SellPosClose) return(CLOSE_SHORT); } } //--- procurando por sinais para fechar uma posição vendida if(!m_SellPosClose) return(NO_SIGNAL); int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); for(int bar=int(m_SignalBar); bar<Bars_; bar++) { Signal=m_indicator.GetData(0,bar); if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL); Signal=m_indicator.GetData(1,bar); if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_SHORT); } //--- nenhum sinal de negociação return(NO_SIGNAL); } //+------------------------------------------------------------------+ //| Verificação das condições para abrir uma posição vendida e //| fechando um longo| //| INPUT:no| //| OUTPUT: Peso do voto de 0 a 100| //|| OBSERVAÇÃO: não.| //+------------------------------------------------------------------+ int CASCtrendSignal::ShortCondition() { //--- o sinal de venda é determinado pelo buffer 0 do indicador ASCtrend double Signal=m_indicator.GetData(0,m_SignalBar); //--- obtendo um sinal de negociação if(Signal && Signal!=EMPTY_VALUE) { if(m_SellPosOpen) { if(m_BuyPosClose) return(REVERSE_LONG); else return(OPEN_SHORT); } else { if(m_BuyPosClose) return(CLOSE_LONG); } } //--- procurando por sinais para fechar uma posição longa if(!m_BuyPosClose) return(NO_SIGNAL); int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); // Здесь код исправлен с учетом подсказки от Владимира Карпутова: Symbol() заменен на m_symbol.Name() for(int bar=int(m_SignalBar); bar<Bars_; bar++) { Signal=m_indicator.GetData(1,bar); if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL); Signal=m_indicator.GetData(0,bar); if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_LONG); } //--- nenhum sinal de negociação return(NO_SIGNAL); } //+------------------------------------------------------------------+
Você pode me dizer qual é o problema?
Atenciosamente, Vladimir
Olá!
Estou tentando adicionar o módulo de sinal de negociação ASCtrendSignal (localizado no arquivo compactado mysignals.zip) criado com base no indicador ASCtrend (localizado no arquivo compactado indicators.zip) ao Assistente MQL5, mas nada funciona. Eu coloco o módulo de sinal de negociação ASCtrendSignal em Include\Expert\Signal e coloco o indicador ASCtrend no pacote Indicators, tudo parece estar correto, mas o módulo persistentemente não quer ser exibido no Assistente MQL5. Aqui está o código do módulo de sinal de negociação ASCtrendSignal:
Você pode me dizer qual é o problema?
Atenciosamente, Vladimir
Gostaria de acrescentar que esse mesmo problema ocorre com outros módulos de sinais de negociação escritos com base em indicadores. Aparentemente, eles têm o mesmo problema. Por favor, ajude a resolver esses problemas.
Atenciosamente, Vladimir.
P.S. Alguns indicadores que descompactei do arquivo compactado indicators.zip estão instalados no terminal e funcionam normalmente.
O que conta é a ordem:
// início da descrição do assistente //+----------------------------------------------------------------------+ //| Descrição da classe| //| Title=Os sinais baseados no indicador ASCtrend //| Type=SignalAdvanced.| //| Name=ASCtrend| //| Class=CASCtrendSignal| //| Page=| //| Parâmetro=BuyPosOpen,bool,true,Permissão para comprar //| Parâmetro=SellPosOpen,bool,true,Permissão para vender //| Parâmetro=BuyPosClose,bool,true,Permissão para sair de uma posição longa //| Parâmetro=SellPosClose,bool,true,Permissão para sair de uma posição vendida //| Parâmetro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe //| Parâmetro=RISK,int,4,Nível de risco| //| Parâmetro=SignalBar,uint,1,Índice da barra para o sinal de entrada //+----------------------------------------------------------------------+ // descrição do assistente fim
não
//--- wizard description start //--- wizard description end
e entre o início e o fim apenas um bloco de serviço - sem variáveis ou substituições de macros.
É assim que o módulo deve começar:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Direitos autorais © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Direitos autorais © 2011, Nikolay Kositsin." #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Arquivos incluídos| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // início da descrição do assistente //+----------------------------------------------------------------------+ //| Descrição da classe| //| Title=Os sinais baseados no indicador ASCtrend //| Type=SignalAdvanced.| //| Name=ASCtrend| //| Class=CASCtrendSignal| //| Page=| //| Parâmetro=BuyPosOpen,bool,true,Permissão para comprar //| Parâmetro=SellPosOpen,bool,true,Permissão para vender //| Parâmetro=BuyPosClose,bool,true,Permissão para sair de uma posição longa //| Parâmetro=SellPosClose,bool,true,Permissão para sair de uma posição vendida //| Parâmetro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe //| Parâmetro=RISK,int,4,Nível de risco| //| Parâmetro=SignalBar,uint,1,Índice da barra para o sinal de entrada //+----------------------------------------------------------------------+ // descrição do assistente fim //+------------------------------------------------------------------+ //| Declaração de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // A constante para retornar o comando de compra para o Expert Advisor #define OPEN_SHORT 80 // A constante para retornar o comando de venda para o Expert Advisor #define CLOSE_LONG 40 // A constante para retornar o comando para fechar uma posição longa para o Expert Advisor #define CLOSE_SHORT 40 // A constante para retornar o comando para fechar uma posição curta para o Expert Advisor #define REVERSE_LONG 100 // A constante para retornar o comando para reverter uma posição longa para o Expert Advisor #define REVERSE_SHORT 100 // A constante para retornar o comando para reverter uma posição curta para o Expert Advisor #define NO_SIGNAL 0 // A constante para retornar a ausência de um sinal para o Expert Advisor //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Finalidade: Classe de gerador de sinais de negociação com base em //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| É derivado da classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
recarregar o MetaEditor depois de fazer as edições
O que conta é a ordem:
não
e entre o início e o fim apenas um bloco de serviço - sem variáveis ou substituições de macros.
É assim que um módulo deve começar:
recarregar o MetaEditor depois de fazer as edições
Obrigado, Vladimir!
Tudo funcionou.
Saudações, Vladimir.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "Sistemas de negociação simples usando indicadores semafóricos"
Vladimir Karputov, 2019.10.30 08:50
A ordem é importante:
// início da descrição do assistente //+----------------------------------------------------------------------+ //| Descrição da classe| //| Title=Os sinais baseados no indicador ASCtrend //| Type=SignalAdvanced| //| Name=ASCtrend| //| Class=CASCtrendSignal| //| Page=| //| Parâmetro=BuyPosOpen,bool,true,Permissão para comprar //| Parâmetro=SellPosOpen,bool,true,Permissão para vender //| Parâmetro=BuyPosClose,bool,true,Permissão para sair de uma posição longa //| Parâmetro=SellPosClose,bool,true,Permissão para sair de uma posição vendida //| Parâmetro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe //| Parâmetro=RISK,int,4,Nível de risco| //| Parâmetro=SignalBar,uint,1,Índice da barra para o sinal de entrada //+----------------------------------------------------------------------+ // descrição do assistente fim
mas não
//--- wizard description start //--- wizard description end
e entre o início e o fim apenas o bloco de serviço - sem variáveis e substituições de macro.
Esse é o início que o módulo deve ter:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Direitos autorais © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Direitos autorais © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Arquivos incluídos| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // início da descrição do assistente //+----------------------------------------------------------------------+ //| Descrição da classe| //| Title=Os sinais baseados no indicador ASCtrend //| Type=SignalAdvanced| //| Name=ASCtrend| //| Class=CASCtrendSignal| //| Page=| //| Parâmetro=BuyPosOpen,bool,true,Permissão para comprar //| Parâmetro=SellPosOpen,bool,true,Permissão para vender //| Parâmetro=BuyPosClose,bool,true,Permissão para sair de uma posição longa //| Parâmetro=SellPosClose,bool,true,Permissão para sair de uma posição vendida //| Parâmetro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe //| Parâmetro=RISK,int,4,Nível de risco| //| Parâmetro=SignalBar,uint,1,Índice da barra para o sinal de entrada //+----------------------------------------------------------------------+ // descrição do assistente fim //+------------------------------------------------------------------+ //| Declaração de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // A constante para retornar o comando de compra para o Expert Advisor #define OPEN_SHORT 80 // A constante para retornar o comando de venda para o Expert Advisor #define CLOSE_LONG 40 // A constante para retornar o comando para fechar uma posição longa para o Expert Advisor #define CLOSE_SHORT 40 // A constante para retornar o comando para fechar uma posição curta para o Expert Advisor #define REVERSE_LONG 100 // A constante para retornar o comando para reverter uma posição longa para o Expert Advisor #define REVERSE_SHORT 100 // A constante para retornar o comando para reverter uma posição curta para o Expert Advisor #define NO_SIGNAL 0 // A constante para retornar a ausência de um sinal para o Expert Advisor //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Finalidade: Classe de gerador de sinais de negociação com base em //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| É derivado da classe CExpertSignal.| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
reinicie o MetaEditor depois de fazer alterações
- 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 Sistema de negociação simples com o uso de indicadores semáforo foi publicado:
Se examinarmos por completo qualquer sistema de negócio complexo, veremos que é baseado em um conjunto simples de sinais de negócio. Consequentemente, não há necessidade para que novos desenvolvedores comecem imediatamente a escrever algorítimos complexos. Este artigo fornece um exemplo de um sistema de negócio que utiliza indicadores semáforo para realizar negócios.
Autor: Nikolay Kositsin