por trader201 » 22 Jun 2014, 16:58
Saludos. Estoy diseñando un indicador, pero no está dibujando las lineas del indicador (aparece sin error cuando lo compilo, cuando reviso lista de indicadores en ventana de precio aparece como si estuviera, pero no se ve en indicador). Lo mismo me está pasando cuando lo coloco como indicador aparte de la ventana de precio: aparece el cuadro donde va el indicador, pero no la linea. ¿Qué falta o necesito corregir para que se vea? Gracias de antemano. Aquí está el código: - Código: Seleccionar todo
#property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 White #property indicator_color2 White
//--- buffers double Buffer1[]; double Buffer2[];
//+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer (0, Buffer1); SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2, White);
SetIndexBuffer (0, Buffer2); SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2, White); //--- 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[]) {
double ATR, C; int i, Counted_bars; Counted_bars = IndicatorCounted(); i= Bars - Counted_bars - 1; //--- while (i>0) { ATR=iATR(NULL, PERIOD_CURRENT, 14, 1); C= iClose(NULL, PERIOD_CURRENT, 1); Buffer1[0]= C + ATR; Buffer2[0]= C - ATR; i--; } //--- return value of prev_calculated for next call return(rates_total); }
-
trader201
-
- Mensajes: 281
- Registrado: 13 Feb 2010, 21:05
- Karma: 0
por FXWizard » 23 Jun 2014, 11:28
El problema lo tienes aquí: - Código: Seleccionar todo
Buffer1[0]= C + ATR; Buffer2[0]= C - ATR;
Observa que estás fijando el valor del indicador al momento 0 (el más reciente) cuando pones [0], en su lugar deberías poner [i]. En todo caso, lo que quieres calcular ya existe: se llama Keltner Channel y lo tienes adjunto a este mensaje Saludos, FXWizard
- Adjuntos
-
- Keltner_Channels.mq4
- (2.08 KiB) 483 veces
-
FXWizard
-
- Mensajes: 8493
- Registrado: 12 Feb 2008, 15:17
- Karma: 35
por trader201 » 23 Jun 2014, 17:01
FXWizard escribió:El problema lo tienes aquí: - Código: Seleccionar todo
Buffer1[0]= C + ATR; Buffer2[0]= C - ATR;
Observa que estás fijando el valor del indicador al momento 0 (el más reciente) cuando pones [0], en su lugar deberías poner [i]. En todo caso, lo que quieres calcular ya existe: se llama Keltner Channel y lo tienes adjunto a este mensaje Saludos, FXWizard
Saludos FXWizard. Me sigue pasando lo mismo a pesar de colocar [i]. Lo que sucede es que este indicador que estoy haciendo lo hago es para aprender a diseñar indicadores (no por el indicador como tal). Cuando hago un indicador de un solo buffer, luego de algunas pruebas, me ha salido bien, pero cuando hago de dos buffer pues estoy teniendo este problema, aunque se supone que es lo mismo, pero no se por qué no me está saliendo la linea. Ahorita probé con un solo buffer, y me pasó lo mismo. A veces me pongo a curiosear, y derepente comienza a funcionar. Sin embargo, lo estoy haciendo es mas por suerte que por saber exactamente que está pasando. Coloqué en el buffer Ask-Bid; (solo eso. Y cuando lo pongo en el par, aparece el cuadro donde se supone debe dibujarse la linea, pero no aparece la linea). Tambien probé con MarketInfo(NULL,MODE_SPREAD), y con solo MODE_SPREAD. Supongo que hay es algo en el código.
-
trader201
-
- Mensajes: 281
- Registrado: 13 Feb 2010, 21:05
- Karma: 0
por FXWizard » 24 Jun 2014, 11:27
Una cosa: el cálculo del bucle debes hacerlo con un for, no un while. Observa el indicador que te he adjuntado, en particular este apartado: - Código: Seleccionar todo
for(int x=0; x<limit; x++) { middle[x] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, x); avg = findAvg(period, x); upper[x] = middle[x] + avg; lower[x] = middle[x] - avg; }
Saludos, FXWizard
-
FXWizard
-
- Mensajes: 8493
- Registrado: 12 Feb 2008, 15:17
- Karma: 35
por trader201 » 30 Jun 2014, 21:17
Tengo entendido operador "for" es como utilizar un "if" o "while"? Así:
for (expresión1, condición1, expresión2) es como decir
double expresión 1 if (condicion 1) expresión1+1 (este contador seria el enunciado en la expresión 2)
Entonces, sustituyo:
int i, Counted_bars; Counted_bars = IndicatorCounted(); i= Bars - Counted_bars - 1; //--- while (i>0) { ATR=iATR(NULL, PERIOD_CURRENT, 14, 1); C= iClose(NULL, PERIOD_CURRENT, 1); Buffer1[0]= C + ATR; Buffer2[0]= C - ATR; i--; }
Por este código:
int i; //--- for (i= Bars - IndicatorCounted() - 1; i>0; i++) { ATR=iATR(NULL, PERIOD_CURRENT, 14, 1); C= iClose(NULL, PERIOD_CURRENT, 1); Buffer1[0]= C + ATR; Buffer2[0]= C - ATR; }
¿Todo esto está correcto?
-
trader201
-
- Mensajes: 281
- Registrado: 13 Feb 2010, 21:05
- Karma: 0
|
|