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

 
alex12:

Pero hay otro código en el EA:

pon por ejemplo Print("close by CloseMarket ", j); en esta función y algo similar en la anterior que has puesto . ejecútala y mira en los logs a ver cuál de estas impresiones aparece para analizar cuál es la que se dispara. luego registra de forma similar los valores de las variables comprobadas en las condiciones de ejecución del cierre y encuentra las razones de su disparo...

 
alsu:
¿Y qué te impide poner el EA en la ventana exacta donde quieres dibujar?


Mi EA funciona mejor en M1, porque es mejor en M1 y abre 1 operación en la apertura de la barra M5, también rellena si las condiciones lo permiten. También utilizo indicadores en M5 y otros TFs. Y es mejor probar en M1 en la apertura de la barra, mientras que en otros TFs con todos los ticks se prueba mal.

Yo no dibujo, sólo veo los resultados de los cálculos que hace el EA y que se muestran en sommentos para asegurarme de que todo está en orden. Gracias por su atención y ayuda.

 
borilunad:


Mi EA funciona mejor en M1, ya que hace un mejor arrastre en M1 y abre 1 operación en la apertura de la barra M5, también rellena si las condiciones lo permiten. Y uso indicadores en M5 y otros TFs. Y es mejor probar en M1 en la apertura de la barra, mientras que en otros TFs con todos los ticks se prueba mal.

Yo no dibujo, sólo veo los resultados de los cálculos que hace el EA y que se muestran en sommentos para asegurarme de que todo está en orden. Gracias por su atención y ayuda.

En M1, y en M5 los ticks se toman de la misma fuente, y se puede utilizar cualquier marco de tiempo de cualquier gráfico, sólo hay que sustituir Close[] por iClose, etc. Para probarlo mejor, hay que hacer mejores archivos fxt de ticks, aquí hay un ejemplo, pero en general google, hay mucha información sobre este tema.
 
alsu:
Tanto en M1 como en M5 los ticks se toman de la misma fuente, y se puede utilizar cualquier marco de tiempo de cualquier gráfico, sólo hay que sustituir Close[] por iClose, etc. Para probarlo mejor, hay que hacer mejores archivos fxt de ticks, aquí hay un ejemplo, pero en general google, hay mucha información sobre este tema.

La práctica ha demostrado, que es mejor abrir en Op y la prueba también mejor, que en las garrapatas. No me gustan nada las garrapatas. Cuando la depo lo permita, es posible que pase a una TF más alta, que mostrará mejores resultados en un día. No dejo ofertas para la noche para dormir bien. Gracias de nuevo.
 
smshev:

Print("Close by CloseMarket ", j); en esta función y algo similar en la anterior que has publicado. Ejecútala y busca en el registro los resultados de estas impresiones para analizar cuál es la que se dispara. Luego registra de forma similar los valores de las variables comprobadas en las condiciones de cierre y encuentra las razones de su disparo...

Gracias.
 
borilunad:

La práctica ha demostrado que es mejor abrir en Orep y probar mejor, también, que en las garrapatas. Y no me gustan nada las garrapatas. Cuando la depo lo permita, es posible que cambie a una TF más alta, que mostrará mejores resultados en un día. No dejo ofertas para la noche para dormir bien. Gracias de nuevo.
No digo eso, digo que qué más da dónde se acople el EA. Si está bien escrito, da igual dónde esté situado: incluso si está en el gráfico de la bolsa de Mongolia, pero si está configurado para funcionar en EURUSD 1 minuto, lo hará. Y no es difícil programarlo, sólo hay que cambiar un par de líneas como norma.
 

Estimado Sr. Programador No puedo dibujar una línea horizontal por el valor numérico máximo de la ventana del indicador MACD.

Código


#property indicador_separar_ventana
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Rojo
//--- buffers
doble ExtMapBuffer1[];
doble ExtMapBuffer2[];
double topBuffer[];


bool initFinished=false; // añadir una variable que recuerde el estado de la inicialización.
// false - la inicialización aún no se ha producido.
// true - fue inicializado
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int inicio()
{
int barras_contadas=IndicadorContado(),
límite;

if(barras_contadas>0)
counted_bars--;

limit=Barras_contabilizadas;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRECIO_CERRADO,SEÑAL_MODO,i);

if(initFinished==false)
{
IndicatorShortName("MACD_max-min");

int win_idx=WindowFind("MACD_max-min");
// encontrar el número de la subventana de nuestro indicador

if(win_idx<0)
{
// si el número de subventana es -1, hay un error
Print("Ventana no encontrada");
return(0);
}

double top=VentanaPrecioMax(win_idx);
//buscar el valor máximo de la escala vertical de la subventana especificada del gráfico actual


ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// dibujar una línea horizontal en una subventana de nuestro indicador

ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);

WindowRedraw();
// redibujar la ventana para ver la línea

initFinished=true;
// el dibujo está terminado

}

topBuffer[i]=top;


}

//----
return(0);
}

//+------------------------------------------------------------------+


Parece que en la línea

double top=VentanaPrecioMax(win_idx);

la variable superior no obtiene ningún valor y en el

ObjectCreate("max",OBJ_HLINE,win_idx,0,top);

en lugar de ella (es decir, en lugar de la variable top) obtengo automáticamente 0 (cero). Por lo tanto, obtengo una línea cero en la ventana requerida y en el color requerido. topBuffer[] también está vacío. Si en esta línea en lugar de la variable top se pone un valor numérico, la línea toma este valor fijo.En algún lugar tengo un error clínico.Ayuda para entender! Gracias de antemano.

Archivos adjuntos:
 
IndicatorShortName sería mejor moverlo a init()
 
alsu:
IndicatorShortName debería moverse a init()
Cuando abres el indicador, el objeto no aparece, debes abrir adicionalmente la ventana con las propiedades del indicador, cerrarla y entonces el objeto será visible.
 
¿es win_idx el correcto?