tara: Sin embargo, en la pestaña "Eventos" del menú "Herramientas - Configuración", las cosas están bastante mal. Intenta usarlo :(
Estoy de acuerdo, es malo ... La alerta no se desactiva con la barra espaciadora, sólo manualmente ... cambiar el parámetro de alerta en "service-settings-events" no hace nada ...
Chicos, por favor, dadme una pista. Ya he hecho esta pregunta, pero no he conseguido que el código sea correcto.
Una vez más, le diré lo esencial de la idea. Mediante el indicador Awesom, desde la parte inferior (por debajo de 0) hasta la superior (por encima de 0), se calcula el volumen de la onda (indicador Volumes).
La etiqueta de texto con la suma del volumen de la onda, debe imprimirse en el gráfico del indicador y calcularse sobre todo el historial.
Tengo esto:
¿Cuál es el error?
#property indicator_separate_window#property indicator_buffers 2#property indicator_color1 Red#property indicator_color2 SteelBlue#property indicator_width1 2//---- basic fan indicator parametersexternbool Show_AOLine_2=true;
externint SlowEMA3=34;
externint EMA=3;
externbool Show_Volume=true;
externdouble coaf=0.5;
//---- indicator buffersdouble AOBuffer3[];
double ExtMapBuffer1[];
double VLUP, AO_up,AO_dn;
double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
datetime tmhgh, tmlw;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- drawing settingsstring name_ind = "Awesome_super_volumes";
IndicatorShortName("Awesome_super_volumes");
//---- AO_fan line 2 (basic)if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
else
{Show_AOLine_2=DRAW_NONE; }
SetIndexBuffer(0,AOBuffer3);
SetIndexStyle(0,Show_AOLine_2);
SetIndexLabel(0,"basic line");
SetIndexBuffer(1,ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexLabel(1,"Volume");
//---- initialization donereturn(0);
}
//+------------------------------------------------------------------+//| Awesome Oscillator |//+------------------------------------------------------------------+int start()
{
int limit;
int counted_bars=IndicatorCounted();
double prev,current;
//---- last counted bar will be recountedif(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=0; i<limit; i++)
{
//---- AO_fan + Volumes
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}
}
//-- Поиск High & Time & Min_AO if (AOBuffer3[i]>0)
{
AO_up = AOBuffer3[i]*0.1+AOBuffer3[i];
prhgh_s = High[i];
if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}
//SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmhgh, AO_up, Black);
}
//-- Поиск Low & Time & Max_AOif (AOBuffer3[i]<0)
{
AO_dn = AOBuffer3[i]*0.1+AOBuffer3[i];
prlw_s = Low[i];
if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
//SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmlw, AO_dn, Black);
}
// -- Пересчет баров от High до Lowif(NewBar())
{
int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);
int shift=iBarShift(NULL,0,tmhgh);
for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
}
Comment("Vol_",VLUP,prlw_e,prhgh_e);
for(i=0; i<limit; i++)
{
SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmlw, AO_dn, Black);
}
//---- donereturn(0);
}
//+------------------------------------------------------------------+void SetText(string name, string Vl, datetime t1, double p1, color c)
{
// if (ObjectFind(name)!=-1) ObjectDelete(name);ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
ObjectSetText(name, Vl, 10, "Times New Roman", c);
ObjectSet(name, OBJPROP_TIME1 , t1);
ObjectSet(name, OBJPROP_PRICE1, p1);
ObjectSet(name, OBJPROP_COLOR, c);
}
bool NewBar()
{
staticdatetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}}
Mi función encuentra el número de órdenes de mercado abiertas, ofertas pendientes y liquidaciones. He añadido otra función incorporada que encuentra los valores de los precios máximos y mínimos de las órdenes pendientes con el fin de comprobar una cosa más rápida.
Puedo ver a través de la impresión que en algún momento encuentra valores que no son los que quiero.
La idea es que si las órdenes pendientes ya están cerradas, deben ser omitidas pero esta función no las omite por alguna razón. Esta es la función:
Así, para las órdenes que están activas el precio de cierre es lógicamente cero (ya que no está cerrada), pero para las órdenes que ya se han cerrado el precio de cierre no es cero (el precio de cierre será el del momento en que se borró). Lógicamente, esta es la hora de cierre...
Entiendo que las órdenes pendientes no se cierran, sino que se borran, pero ¿de qué otra forma deberíamos implementarlo?
FAQ: ¿Puede escribir lo que necesita de la función: encontrar las órdenes pendientes más externas?
Para encontrar los precios de las órdenes pendientes más externas. Son los activos, no los borrados. Es decir, quiero omitir los pedidos pendientes eliminados en nuestra búsqueda... Espero haberme explicado bien.
Pero eres rápido. He borrado el post porque lo he encontrado yo mismo. ¡Muchas gracias!
Me alegro de saber de ti, pensé que estaba respondiendo a un viejo post que no puedo encontrar :)
Sin embargo, en la pestaña "Eventos" del menú "Herramientas - Configuración", las cosas están bastante mal. Intenta usarlo :(
Estoy de acuerdo, es malo ... La alerta no se desactiva con la barra espaciadora, sólo manualmente ... cambiar el parámetro de alerta en "service-settings-events" no hace nada ...
Chicos, por favor, dadme una pista. Ya he hecho esta pregunta, pero no he conseguido que el código sea correcto.
Una vez más, le diré lo esencial de la idea. Mediante el indicador Awesom, desde la parte inferior (por debajo de 0) hasta la superior (por encima de 0), se calcula el volumen de la onda (indicador Volumes).
La etiqueta de texto con la suma del volumen de la onda, debe imprimirse en el gráfico del indicador y calcularse sobre todo el historial.
Tengo esto:
¿Cuál es el error?
El EA lanza una pila de órdenes en el gráfico.
Mi función encuentra el número de órdenes de mercado abiertas, ofertas pendientes y liquidaciones. He añadido otra función incorporada que encuentra los valores de los precios máximos y mínimos de las órdenes pendientes con el fin de comprobar una cosa más rápida.
Puedo ver a través de la impresión que en algún momento encuentra valores que no son los que quiero.
La idea es que si las órdenes pendientes ya están cerradas, deben ser omitidas pero esta función no las omite por alguna razón. Esta es la función:
Tengo una condición clara:
Significa que si la hora de cierre de una orden no es cero, está cerrada y debemos omitirla.
En la salida, veo que no los salta. Aquí está el gráfico:
¿Por qué se equivoca el precio de la pausa? Porque el código es correcto, tal y como yo lo veo.
La condición que tengo está claramente explicada:
¿Qué es para los delanteros?
¿Qué pasa con los pedidos pendientes?
Así, para las órdenes que están activas el precio de cierre es lógicamente cero (ya que no está cerrada), pero para las órdenes que ya se han cerrado el precio de cierre no es cero (el precio de cierre será el del momento en que se borró). Lógicamente, esta es la hora de cierre...
Entiendo que las órdenes pendientes no se cierran, sino que se borran, pero ¿de qué otra forma deberíamos implementarlo?
¿Puede escribir lo que necesita de la función: encontrar las órdenes pendientes más externas?
Para encontrar los precios de las órdenes pendientes más externas. Son los activos, no los borrados. Es decir, quiero omitir los pedidos pendientes eliminados en nuestra búsqueda... Espero haberme explicado bien.