No entiendo muy bien lo que quieres hacer....
Pero el error de i te da por que en los dos bucles for tienes "int i"
Debes definir la variable al comienzo de la función: "int i;" y después en los for utilizar "for i=....."
No entiendo muy bien lo que quieres hacer....
Pero el error de i te da por que en los dos bucles for tienes "int i"
Debes definir la variable al comienzo de la función: "int i;" y después en los for utilizar "for i=....."
Hola Jesús, la idea que tengo es la de crear un indicador que vaya creando con cada vela un canal equidistante, este canal equidistante debe crearse a partir de los valores de una SMA. O sea, se sabe que un canal equidistante tiene dos coordenadas de donde se crea, supongamos dos valores mínimos del precio en distantes momentos, y una tercer coordenada define la distancia de las líneas o la altura del canal, supongamos un valor máximo del precio en determinado rango ¿cierto?. Entonces lo que quiero es digamos:
//Estos serían los puntos del primer y segundo punto del canal equidistante
SMAPoint1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_COSE, i+3);
SMAPoint2 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_COSE, i+1);
//Este sería el punto que definiría la distancia de las líneas
PointDistance = 50 (puntos o pips, la verdad no se como se definiría acá)
Hola Jesús, la idea que tengo es la de crear un indicador que vaya creando con cada vela un canal equidistante, este canal equidistante debe crearse a partir de los valores de una SMA. O sea, se sabe que un canal equidistante tiene dos coordenadas de donde se crea, supongamos dos valores mínimos del precio en distantes momentos, y una tercer coordenada define la distancia de las líneas o la altura del canal, supongamos un valor máximo del precio en determinado rango ¿cierto?. Entonces lo que quiero es digamos:
//Estos serían los puntos del primer y segundo punto del canal equidistante
SMAPoint1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_COSE, i+3);
SMAPoint2 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_COSE, i+1);
//Este sería el punto que definiría la distancia de las líneas
PointDistance = 50 (puntos o pips, la verdad no se como se definiría acá)
//+------------------------------------------------------------------+ //| Modificación para Foro indicador RVM.mq4 | //| Copyright 2020, MetaQuotes Software Corp. Envex | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp. Envex" #property link "https://www.mql5.com" #property version "1.00" #property strict #include <stdlib.mqh> #include <stderror.mqh> //--- indicator settings #property indicator_chart_window #property indicator_buffers 3 #property indicator_type1 DRAW_LINE #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_color1 clrBlue #property indicator_label1 "Neutral" #property indicator_type2 DRAW_LINE #property indicator_style2 STYLE_SOLID #property indicator_width2 2 #property indicator_color2 clrRed #property indicator_label2 "Sell" #property indicator_type3 DRAW_LINE #property indicator_style3 STYLE_SOLID #property indicator_width3 2 #property indicator_color3 clrGreen #property indicator_label3 "Buy" //--- indicator buffers double Buffer1[]; double Buffer2[]; double Buffer3[]; extern int MA_Period = 34; extern int Distance=5; extern color CenterLineColor= clrBlue; extern color TopLineColor= clrRed; extern color BottomLineColor= clrGreen; double myPoint; //initialized in OnInit void myAlert(string type, string message) { if(type == "print") Print(message); else if(type == "error") { Print(type+" | Canal TMA @ "+Symbol()+","+IntegerToString(Period())+" | "+message); } else if(type == "order") { } else if(type == "modify") { } } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { IndicatorBuffers(3); SetIndexStyle(0,DRAW_LINE,indicator_style1,indicator_width1,CenterLineColor); SetIndexBuffer(0, Buffer1); SetIndexEmptyValue(0, EMPTY_VALUE); SetIndexStyle(1,DRAW_LINE,indicator_style2,indicator_width2,TopLineColor); SetIndexBuffer(1, Buffer2); SetIndexEmptyValue(1, EMPTY_VALUE); SetIndexBuffer(2, Buffer3); SetIndexStyle(2,DRAW_LINE,indicator_style3,indicator_width3,BottomLineColor); SetIndexEmptyValue(2, EMPTY_VALUE); //initialize myPoint myPoint = Point(); if(Digits() == 5 || Digits() == 3) { myPoint *= 10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { int limit = rates_total - prev_calculated; //--- counting from 0 to rates_total ArraySetAsSeries(Buffer1, true); ArraySetAsSeries(Buffer2, true); ArraySetAsSeries(Buffer3, true); //--- initial zero if(prev_calculated < 1) { ArrayInitialize(Buffer1, 0); ArrayInitialize(Buffer2, 0); ArrayInitialize(Buffer3, 0); } else limit++; //--- main loop for(int i = limit-1; i >= 0; i--) { if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation //Indicator Buffer 1 if(true //no conditions! ) { Buffer1[i] = iMA(NULL, PERIOD_CURRENT, MA_Period, 0, MODE_SMA, PRICE_CLOSE, i); } { Buffer2[i] = Buffer1[i] + Distance*myPoint; } { Buffer3[i] = Buffer1[i] - Distance*myPoint; } } return(rates_total); } //+-----------------------------------
Esta es una modificación rápida de un indicador que tengo hecho, pruébalo a ver si es lo que quieres. Por cierto, esto es para MT4, no he encontrado si has dicho en algún sitio si querías MT4 o MT5
Esta es una modificación rápida de un indicador que tengo hecho, pruébalo a ver si es lo que quieres. Por cierto, esto es para MT4, no he encontrado si has dicho en algún sitio si querías MT4 o MT5
Hola Enrique, agradezco tu aporte, me temo que no es lo que quiero. Dejaré una imagen para mostrar a que me refiero con canal equidistante.
https://www.metatrader5.com/i/help/terminal/en/equidistant_channel.png
Hola Enrique, agradezco tu aporte, me temo que no es lo que quiero. Dejaré una imagen para mostrar a que me refiero con canal equidistante.
https://www.metatrader5.com/i/help/terminal/en/equidistant_channel.png
AAAAh, de acuerdo, lo entendí mal entonces, no había visto la imagen
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Buenas tardes compañeros,
Requiero de su ayuda para ejecutar una idea que tengo respecto a la creación de un indicador. La función de este será crear un canal equidistante a partir de una MA. Por ejemplo:
Esta base la vi en la página de mql5, pero no entiendo respecto a los porcentajes de fecha y precio, no se donde introducir los valores de la MA, ni como definir los tiempos para que los puntos de anclaje sean una, dos y tres velas anteriores a la actual vela. Además al compilar el código me sale un error respecto a que la variable "i" ya fue definida antes. En el primer comentario colocaré el código que encontré.