He podido simular su situación. Este comportamiento es el resultado de utilizar otro script después de KeyFinder 2.0. Todavía no he encontrado la forma de solucionar este problema a nivel de código. En términos de uso - vuelva a aplicar KeyFinder 2.0 y el botón volverá a "funcionar".
¿Quizás es más razonable hacer el programa como un indicador, y borrar la pantalla cuando el indicador se quita del gráfico?
komposter:
¿Quizás sería más razonable hacer el programa como un indicador, y borrar la pantalla cuando el indicador se quite del gráfico?
Estoy trabajando en un indicador. El script es una "prueba de mi pluma".
¿Quizás sería más razonable hacer el programa como un indicador, y borrar la pantalla cuando el indicador se quite del gráfico?
Rubick:
He podido simular su situación. Este comportamiento es el resultado de utilizar otro script después de KeyFinder 2.0. Todavía no he encontrado la forma de solucionar este problema a nivel de código. En términos de uso - vuelva a aplicar KeyFinder 2.0 y el botón volverá a "funcionar".
He intentado vencer el botón atascado en la pantalla de todo tipo de maneras. La más sencilla es borrar la ventana del par de divisas y crearla de nuevo desde cero. La información que muestra el script es muy útil. Por ejemplo, yo uso un montón de cosas en el comercio (niveles de Murray - TirMethod, modelos de negociación de Tercera Ola y Consolidación) y en todas partes necesito un indicador similar (ZigZag, ZipPips,), y el guión ayuda a evaluar la exactitud de la construcción de las cifras y la proporcionalidad de los extremos. Vamos a esperar a que el indicador. Manténganos informados. ¿Tiene una página en cualquier red social? ¡Buena suerte y éxito para usted!
He podido simular su situación. Este comportamiento es el resultado de utilizar otro script después de KeyFinder 2.0. Todavía no he encontrado la forma de solucionar este problema a nivel de código. En términos de uso - vuelva a aplicar KeyFinder 2.0 y el botón volverá a "funcionar".
ernst.yagafarof:
He intentado vencer el botón "atascado" en la pantalla de todas las maneras posibles. La más sencilla es borrar la ventana de pares de divisas y crearla de nuevo desde cero. La información que muestra el script es muy útil. Por ejemplo, yo uso un montón de cosas en el comercio (niveles de Murray - TirMethod, modelos de negociación de Tercera Ola y Consolidación) y en todas partes necesito un indicador similar (ZigZag, ZipPips,), y el guión ayuda a evaluar la exactitud de la construcción de las cifras y la proporcionalidad de los extremos. Vamos a esperar a que el indicador. Manténganos informados. ¿Tiene una página en cualquier red social? ¡Mucha suerte y éxito!
He actualizado mi perfil.
He intentado vencer el botón "atascado" en la pantalla de todas las maneras posibles. La más sencilla es borrar la ventana de pares de divisas y crearla de nuevo desde cero. La información que muestra el script es muy útil. Por ejemplo, yo uso un montón de cosas en el comercio (niveles de Murray - TirMethod, modelos de negociación de Tercera Ola y Consolidación) y en todas partes necesito un indicador similar (ZigZag, ZipPips,), y el guión ayuda a evaluar la exactitud de la construcción de las cifras y la proporcionalidad de los extremos. Vamos a esperar a que el indicador. Manténganos informados. ¿Tiene una página en cualquier red social? ¡Mucha suerte y éxito!
Rubick:
¡Tengo buenas noticias! He terminado de diseñar y escribir la clase para el indicador, ahora estoy escribiendo el indicador en sí, planeo terminar la próxima semana - a lo sumo, por lo menos durante el fin de semana en curso.
Gracias. ¡Lo esperamos con impaciencia!
¡Tengo buenas noticias! He terminado de diseñar y escribir la clase para el indicador, ahora estoy escribiendo el indicador en sí, planeo terminar la próxima semana - a lo sumo, por lo menos durante el fin de semana en curso.
¿A qué lo puedo aplicar?
Puse tu script en el Indicador, cuando cambio el gráfico recalcula todo.
//+------------------------------------------------------------------+ //|KeyFinder.mq5 //|Trofimov Pavel | //|trofimovpp@mail.ru | //+------------------------------------------------------------------+ #property copyright "Trofimov Pavel" #property link "trofimovpp@mail.ru" #property version "1.00" #property description "¡Atención! Este algoritmo utiliza ciclos en los cálculos!" #property description "¡Se recomienda encarecidamente fijar un máximo de 1.000 bares para el procesamiento!". #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //--- parámetros de entrada input int MinDimesion = 5; // Dimensionalidad mínima de los puntos input int MaxBars = 300; // Número de barras a procesar input string LabelName = "KF_Label"; // //+------------------------------------------------------------------+ //| Función de inicialización del indicador personalizada | //+------------------------------------------------------------------+ int OnInit() { //--- asignación de búferes indicadores //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { CleanChart(); Comment(""); } //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizada | //+------------------------------------------------------------------+ 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[]) { //--- //comprobar la disponibilidad del historial para el número de barras establecido int SMaxBars=Bars(Symbol(),0),iMaxBars=MaxBars; if(SMaxBars<MaxBars) { iMaxBars=SMaxBars; Comment("El parámetro MaxBars es demasiado grande".+"\n"+"Para los cálculos se utilizará "+IntegerToString(SMaxBars)+"bares".); }; int clean=CleanChart();//borrar el gráfico al volver a aplicarlo MqlRates rates_array[]; string Com=""; int iCod=CopyRates(Symbol(),Period(),0,iMaxBars,rates_array);//número de elementos de la matriz iCod=iCod-1;//Índice del elemento máximo de la matriz Com="Trabajando... ¡Espéralo!"; Comment(Com); if(iCod>0) { FindUpKeyPoints(iCod,rates_array);//Encuentra los principales puntos clave Com=Com+"\n"+"Los puntos superiores han sido procesados".+"\n"; Comment(Com); FindLowKeyPoints(iCod,rates_array);//Encontrar puntos clave inferiores Comment("Procesamiento completo".); } else Comment("¡¡¡Falta de barras de procesamiento!!!"); //--- valor de retorno de prev_calculado para la siguiente llamada return(rates_total); } //+------------------------------------------------------------------+ //|| Encontrar los principales puntos clave| //+------------------------------------------------------------------+ void FindUpKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int HD=1; for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--)// ciclo por barras desde final - MinDimension hasta cero + MinDimension { HD=getHighDimension(temp_rates,i,temp_iCod);//obtener la dimensionalidad de los puntos if((HD>=MinDimesion) || (HD==-1)) { // crear una marca si cumple las condiciones 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 { //Si no podemos determinar la dimensión, la marcamos con una 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); }; }; }; } //+------------------------------------------------------------------+ //|Búsqueda de puntos clave inferiores | //+------------------------------------------------------------------+ void FindLowKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int LD=1;//inicializar las dimensiones de los puntos 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";//Preocúpate de las barras en las que el mínimo y el máximo pueden ser puntos clave 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("No se puede crear un 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("No se puede crear un objeto".); }; }; }; } //+------------------------------------------------------------------+ //| Determinar la dimensionalidad del punto 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); } //+------------------------------------------------------------------+ //| Determinar la dimensionalidad del punto 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); } //+-------------------------------------------------------------------------------+ //| Borrar el gráfico de los objetos creados por el script en caso de reaplicación ||| //+-------------------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+
Archivos adjuntos:
KeyFinder.mq5
16 kb
lo probe y me resulto bueno .....un par de ajustes para tenerlo actualizado
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese


KeyFinder 2.0:
El script encuentra y marca en el gráfico los puntos de apoyo de DeMark y muestra su dimensión.
Autor: Pavel Trofimov