[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 647

 
Mathers:

de la derecha.
 
Buenas tardes miembros del foro. Encontrado un código interesante para la construcción de una línea de tendencia. Y decidió jugar con él un poco - que dibujaría la línea de tendencia no en puntos, pero en porcentaje, pero por alguna razón - después de mi torreta de terminación deja de dibujar la historia - sólo las tres últimas barras (o más bien si se ejecuta la torreta, la línea de tendencia que dibuja desde el inicio normal, pero una vez que haga clic para actualizar la torreta - propiedad>ОК historia se restablece. ¿Qué he hecho mal?
He dibujado el código de abajo. ¿Puede alguien decirme cuál es el problema, el fragmento que he puesto en negrita?
El problema es que el indicador dibuja el historial hacia atrás inmediatamente y no lo reinicia después de cambiar los parámetros.
#property indicador_separar_ventana
#property indicator_buffers 1
#property indicator_color1 LimeGreen

doble AUD;

extern int PerAvr=5,Delta=1;
doble Idx[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,Idx);

//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador Custor |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int inicio()
{
int barras_contadas=IndicadorContado();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Barras contadas;
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr ,0,MODE_LWMA ,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta);

//if (Curency =="AUDUSD")
Idx[i] = AUD;



}

//----

//----
return(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
Buenas tardes, miembros del foro. He encontrado un código interesante para construir una línea de tendencia. He decidido jugar un poco con él.

Por alguna razón me acordé de una anécdota: en una familia de un programador, un hijo se acerca a su padre y le pregunta por qué el sol sale por el este y se pone por el oeste.

Papá, sin apartar los ojos de su ordenador, ¿realmente amanece en el este? -Sí. ¿Y se pone en el oeste? - Sí. Entonces, ¿qué, todos los días? - Sí. Bueno, no toques nada si está funcionando.

 
Roger:

Por alguna razón me acordé de una anécdota: en una familia de un programador, un hijo se acerca a su padre y le pregunta por qué el sol sale por el este y se pone por el oeste.

Papá, sin apartar los ojos de su ordenador, ¿realmente amanece en el este? -Sí. ¿Y se pone en el oeste? - Sí. Entonces, ¿qué, todos los días? - Sí. Bueno, no tienes que tocar nada si está funcionando.

:))
 
Lonely_man:
Hola usuarios del foro, he encontrado un código interesante para dibujar la línea de tendencia.

Lo curioso es que has cambiado el código según tus principios y quieres que una brigada de eruditos encuentre fallos.

es posible que todo funcione pero que se obtengan los datos que no se muestran en el precio actual sino en algún lugar de la parte inferior del gráfico - creo que es el separatetwinds

SZS buena suerte

 
IgorM:

¿Sabes lo que es gracioso? Has cambiado el código según tus principios y quieres que una brigada de eruditos encuentre los fallos

es posible que todo funcione pero que se obtengan los datos que no se muestran en el precio actual sino en algún lugar de la parte inferior del gráfico - creo que es el separatetwinds

SZS buena suerte

No puedo ver lo que sucederá con este código - aparentemente este método de cálculo no funcionará para el interés((.

Inmediatamente, por alguna razón, recuerdo un chiste: el hijo de un programador se acerca a su padre y le pregunta por qué el sol sale por el este y se pone por el oeste.

Papá, sin apartar los ojos de su ordenador, ¿realmente amanece en el este? -Sí. ¿Y se pone en el oeste? - Sí. Entonces, ¿qué, todos los días? - Sí. Bueno, no tienes que tocar nada si está funcionando.

))) Sugerencia: Lo necesito para el comercio de divisas cruzadas - sus pips al cambio de dólar de GBP o JPY no dan información completa, que de ellos cayó en el precio frente a la otra, pero su cambio porcentual frente al dólar muestra todo claramente - como una herramienta adicional es cosa muy útil.
 
Mathers:
Gracias. Supongo que la única diferencia es que el EA se lanza cada vez que entra un nuevo tick, mientras que el script tiene que lanzarse en bucle infinito para mantenerlo en funcionamiento?


No necesariamente. Todo depende de la finalidad del guión. Si el propósito del guión es para una única ejecución (que es la gran mayoría), no hay necesidad de inventar bucles interminables. La necesidad de calcular la cantidad de dinero que se va a involucrar en el mercado cuando se abre una posición con un lote preestablecido puede servir como ejemplo de este tipo de guión único. Dado que el precio del punto en el lote mínimo es diferente para los distintos instrumentos, es más fácil abrir el instrumento requerido, aplicarle el script, introducir el lote previsto en la ventana de parámetros y ver cuánto dinero se bloqueará si se abre la operación.

Esto es sólo un ejemplo. La finalidad de los guiones puede ser diferente.

 
Lonely_man:

No veo cómo funcionará este código - aparentemente este método de cálculo de porcentaje no funcionará((.

Inmediatamente, por alguna razón, recuerdo una anécdota: un hijo de una familia de programadores se acerca a su padre y le pregunta ¿por qué el sol sale por el este y se pone por el oeste?

Papá, sin apartar los ojos de su ordenador, ¿realmente amanece en el este? -Sí. ¿Y se pone en el oeste? - Sí. Entonces, ¿qué, todos los días? - Sí. Bueno, no tienes que tocar nada si está funcionando.

))) La pista: lo necesito para el comercio de divisas cruzadas - los pips al dólar para GBP o JPY no dan información completa de cuál de ellos cayó en el precio frente al otro, pero su cambio porcentual frente a USD muestra todo claramente - como un indicador adicional es una cosa muy útil.

Es un indicador bastante sencillo. No veo cómo los porcentajes son mejores que los pips, pero da igual.

Sin embargo, has cometido algunos errores :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

Para calcular correctamente el porcentaje hay que añadir paréntesis.

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


El problema es que el indicador dibuja el historial hacia atrás inmediatamente y no lo reinicia después de cambiar los parámetros.

Lo más interesante es que despertó el interés deportivo y se sentó durante media hora en su indicador.

¿Por qué no se calculó la historia?
La respuesta es que has añadido una operación de división.

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

No se ha tenido en cuenta el hecho de que la función iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta) devuelve 0 al principio del historial. Y te han "echado" con el error 4013 (ERR_ZERO_DIVIDE) al intentar dividir por 0, comprueba el registro.

Puede añadir una comprobación más en el bucle FOR.

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

Y todo estará bien. A continuación, mi variante.

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#property indicator_color1 Blanco

¿Es posible cambiar este parámetro mediante programación en el módulo start()?

¿Es posible cambiar el color de la memoria intermedia a medida que avanza el programa?



 
valenok2003:

#property indicator_color1 Blanco

¿Es posible cambiar este parámetro mediante programación en el módulo start()?

¿Es posible cambiar el color de la memoria intermedia a medida que avanza el programa?




No lo creo. ¿Y por qué debería ser así?