Consegui simular sua situação. Esse comportamento é o resultado do uso de outro script após o KeyFinder 2.0. Ainda não descobri como superar isso no nível do código. Em termos de uso, reaplique o KeyFinder 2.0 e o botão voltará a "funcionar".
Talvez seja mais razoável criar o programa como um indicador e limpar a tela quando o indicador for removido do gráfico?
komposter:
Talvez seja mais razoável criar o programa como um indicador e limpar a tela quando o indicador for removido do gráfico?
Estou trabalhando em um indicador. O script é um "teste da minha caneta".
Talvez seja mais razoável criar o programa como um indicador e limpar a tela quando o indicador for removido do gráfico?
Rubick:
Consegui simular sua situação. Esse comportamento é o resultado do uso de outro script após o KeyFinder 2.0. Ainda não descobri como superar isso no nível do código. Em termos de uso, reaplique o KeyFinder 2.0 e o botão voltará a "funcionar".
Tentei eliminar o botão preso na tela de várias maneiras. A mais simples é excluir a janela do par de moedas e criá-la novamente do zero. As informações exibidas pelo script são muito úteis. Por exemplo, eu uso muitas coisas na negociação (níveis de Murray - TirMethod, modelos de negociação Third Wave e Consolidation) e em todos os lugares eu preciso de um indicador semelhante (ZigZag, ZipPips,), e o script ajuda a avaliar a exatidão da construção das figuras e a proporcionalidade dos extremos. Vamos aguardar o indicador. Mantenha-nos informados. Você tem uma página em alguma rede social? Boa sorte e sucesso para você!
Consegui simular sua situação. Esse comportamento é o resultado do uso de outro script após o KeyFinder 2.0. Ainda não descobri como superar isso no nível do código. Em termos de uso, reaplique o KeyFinder 2.0 e o botão voltará a "funcionar".
ernst.yagafarof:
Tentei fazer com que o botão ficasse "preso" na tela de todas as formas possíveis. A mais simples é excluir a janela do par de moedas e criá-la novamente do zero. As informações exibidas pelo script são muito úteis. Por exemplo, eu uso muitas coisas na negociação (níveis de Murray - TirMethod, modelos de negociação Third Wave e Consolidation) e em todos os lugares eu preciso de um indicador semelhante (ZigZag, ZipPips,), e o script ajuda a avaliar a exatidão da construção das figuras e a proporcionalidade dos extremos. Vamos aguardar o indicador. Mantenha-nos informados. Você tem uma página em alguma rede social? Boa sorte e sucesso para você!
Atualizei meu perfil.
Tentei fazer com que o botão ficasse "preso" na tela de todas as formas possíveis. A mais simples é excluir a janela do par de moedas e criá-la novamente do zero. As informações exibidas pelo script são muito úteis. Por exemplo, eu uso muitas coisas na negociação (níveis de Murray - TirMethod, modelos de negociação Third Wave e Consolidation) e em todos os lugares eu preciso de um indicador semelhante (ZigZag, ZipPips,), e o script ajuda a avaliar a exatidão da construção das figuras e a proporcionalidade dos extremos. Vamos aguardar o indicador. Mantenha-nos informados. Você tem uma página em alguma rede social? Boa sorte e sucesso para você!
Rubick:
Tenho boas notícias! Terminei de projetar e escrever a classe para o indicador, agora estou escrevendo o indicador em si, e pretendo terminar na próxima semana - no máximo, pelo menos no fim de semana atual.
Obrigado. Estamos esperando ansiosamente por isso!
Tenho boas notícias! Terminei de projetar e escrever a classe para o indicador, agora estou escrevendo o indicador em si, e pretendo terminar na próxima semana - no máximo, pelo menos no fim de semana atual.
Em que posso aplicá-lo?
Coloquei seu script no indicador e, quando mudo o gráfico, ele recalcula tudo.
//+------------------------------------------------------------------+ //|KeyFinder.mq5 //|Trofimov Pavel | //|trofimovpp@mail.ru | //+------------------------------------------------------------------+ #property copyright "Trofimov Pavel" #property link "trofimovpp@mail.ru" #property version "1.00" #property description "Aviso! Este algoritmo usa ciclos nos cálculos!" #property description "É altamente recomendável definir um máximo de 1.000 barras para processamento!" #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //--- parâmetros de entrada input int MinDimesion = 5; // Dimensionalidade mínima dos pontos input int MaxBars = 300; // Número de barras a serem processadas input string LabelName = "KF_Label"; // //+------------------------------------------------------------------+ //| Função de inicialização do indicador personalizado //+------------------------------------------------------------------+ int OnInit() { //--- mapeamento de buffers de indicadores //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { CleanChart(); Comment(""); } //+------------------------------------------------------------------+ //| Função de iteração de indicador personalizado //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //verificar a disponibilidade do histórico para o número definido de barras int SMaxBars=Bars(Symbol(),0),iMaxBars=MaxBars; if(SMaxBars<MaxBars) { iMaxBars=SMaxBars; Comment("O parâmetro MaxBars está definido como muito grande."+"\n"+"Para os cálculos será usado "+IntegerToString(SMaxBars)+" barras."); }; int clean=CleanChart();//limpar o gráfico ao reaplicá-lo MqlRates rates_array[]; string Com=""; int iCod=CopyRates(Symbol(),Period(),0,iMaxBars,rates_array);//número de elementos da matriz iCod=iCod-1;//Índice do elemento máximo na matriz Com="Trabalhando... Espere por isso!"; Comment(Com); if(iCod>0) { FindUpKeyPoints(iCod,rates_array);/Encontre os principais pontos-chave Com=Com+"\n"+"Os pontos principais foram processados."+"\n"; Comment(Com); FindLowKeyPoints(iCod,rates_array);/Encontrar pontos-chave inferiores Comment("Processamento concluído".); } else Comment("Falta de barras de processamento!!!"); //--- valor de retorno de prev_calculated para a próxima chamada return(rates_total); } //+------------------------------------------------------------------+ //|| Encontrar os principais pontos-chave| //+------------------------------------------------------------------+ void FindUpKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int HD=1; for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--)// ciclo de barras de final - MinDimension a zero + MinDimension { HD=getHighDimension(temp_rates,i,temp_iCod);//obter a dimensionalidade dos pontos if((HD>=MinDimesion) || (HD==-1)) { // criar uma marca se ela se enquadrar nas condições de MinDimension string Ob_Name=LabelName+IntegerToString(i); if(HD!=-1) { ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].high); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_LOWER); ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(HD)); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed); } else { //Se não for possível determinar a dimensão, nós a marcamos com uma bola. ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].high); ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_BOTTOM); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed); }; }; }; } //+------------------------------------------------------------------+ //|Busca de pontos-chave inferiores //+------------------------------------------------------------------+ void FindLowKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int LD=1;//inicializar as dimensões do ponto bool iCreate; for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--) { LD=getLowDimension(temp_rates,i,temp_iCod); if((LD>=MinDimesion) || (LD==-1)) { string Ob_Name=LabelName+IntegerToString(i)+"_1";//Seguro de barras em que a mínima e a máxima podem ser pontos-chave if(LD!=-1) { iCreate=ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].low); if(iCreate) { ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_UPPER); ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(LD)); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen); } else Comment("Não é possível criar um objeto."); } else { iCreate=ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].low); if(iCreate) { ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_TOP); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen); } else Comment("Não é possível criar um objeto."); }; }; }; } //+------------------------------------------------------------------+ //| Determinação da dimensionalidade do ponto superior //+------------------------------------------------------------------+ int getHighDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod) { int k=1; while((tmpRates[tmp_i].high>tmpRates[tmp_i+k].high) && (tmpRates[tmp_i].high>tmpRates[tmp_i-k].high) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++; if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1; return(k); } //+------------------------------------------------------------------+ //| Determinação da dimensionalidade do ponto inferior //+------------------------------------------------------------------+ int getLowDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod) { int k=1; while((tmpRates[tmp_i].low<tmpRates[tmp_i+k].low) && (tmpRates[tmp_i].low<tmpRates[tmp_i-k].low) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++; if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1; return(k); } //+-------------------------------------------------------------------------------+ //| Limpando o gráfico de objetos criados pelo script em caso de reaplicação //+-------------------------------------------------------------------------------+ int CleanChart() { string Label=LabelName; int obj_total=ObjectsTotal(0,0,-1),n=0; for(int obj=obj_total-1; obj>=0; obj--) { string objname=ObjectName(0,obj,0,-1); if(StringFind(objname,Label)>=0) ObjectDelete(0,objname); n++; } return(n); } //+------------------------------------------------------------------+
Arquivos anexados:
KeyFinder.mq5
16 kb
Experimentei e achei bom ..... algumas configurações para mantê-lo atualizado.
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


KeyFinder 2.0:
O script encontra pontos pivot DeMark, exibe-os no gráfico e indica as suas dimensões.
Autor: Pavel Trofimov