Hola
Estoy usando el siguiente indicador que funciona bien al imprimir las flechas, etc. Ejemplo de código a continuación.
#propiedad indicador_chart_window
#property indicador_buffers dos
#property indicador_color1 Lima
#propiedad indicador_ancho1 1
#propiedad indicador_color2 Amarillo
#propiedad indicador_ancho2 1
bool externo UseAlert = verdadero;
extern int BarsToCount = 1000;
doble SarUpSig[];
dual SarDownSig[];
fechahora TT;
int inicial()
//-- adentro
SetIndexStyle(0,DRAW_ARROW);
EstablecerFlechaÍndice(0,233);
SetIndexBuffer(0,SarUpSig);
SetIndexStyle(1,DRAW_ARROW);
EstablecerFlechaÍndice(1,234);
SetIndexBuffer(1,SarDownSig);
TT=iTiempo(Símbolo(),0,0);
//--
retorno(0);
comienzo int ()
límite int;
int counted_bars=IndiorCounted();
//-- se volverá a contar la última barra contada
if(barras_contadas;0) barras_contadas--;
limit=Bars-counted_bars;
//-- macd contado en el 1er búfer
if(Etapa ()! =PERIODO_H1)
retorno(0);
if (BarsToCount lt; límite)
limitación = BarsToCount;
for(int I=limitación; igt;=0; I--)
período de fecha y hora = iTime (Símbolo (), 0, I);
int shiftD1 = iBarShift(Symbol(), PERIOD_D1, time, false);
int shiftH4 = iBarShift(Symbol(), PERIOD_H4, time, false);
int shiftH1 = iBarShift(Symbol(),PERIOD_H1,time,false);
dual OsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 );
dual OsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1) ;
dual POsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 1);
dual POsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1 1);
//doble Up_ST = iCustom(Symbol(),0,4xRider STRONG-TREND Signal v2,14,2,I);
//dual Dn_ST = iCustom(Symbol(),0,4xRider STRONG-TREND Signal v2,14,1,I);
dual SARD1 = iSAR(Symbol(),PERIOD_D1,0.22,0.2,shiftD1);
SARH4 dual = iSAR(Símbolo(),PERIODO_H4,0.05,0.2,shiftH4);
SARH1 dual = iSAR(Símbolo(),PERIODO_H1,0.01,0.2,shiftH1);
//último SAR dual = iSAR(Símbolo(),0,0.02,0.2,I 1);
dual CERRADO1 = iClose(Symbol(),PERIOD_D1,shiftD1);
dual CLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4);
dual CLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1);
dual PSARD1 = iSAR(Símbolo(),PERIODO_D1,0.22,0.2,shiftD1 1);
PSARH4 dual = iSAR(Símbolo(),PERÍODO_H4,0.05,0.2,desplazamient oH4 1);
PSARH1 dual = iSAR(Símbolo(),PERÍODO_H1,0.01,0.2,desplazamient oH1 1);
//último SAR dual = iSAR(Símbolo(),0,0.02,0.2,I 1);
dual PCCERRADO1 = iClose(Symbol(),PERIOD_D1,shiftD1 1);
dual PCLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4 1);
dual PCLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1 1);
SarUpSig[I]=VALOR_VACÍO;
SarDownSig[I]=VALOR_VACÍO;
compra de cuerdas;
//COMPRAR
//si(Up_ST! =EMPTY_VALUE)
//
//SarUpSig[1] = 1.6094;
if(SarUpSig[i 1] ! = EMPTY_VALUE SARH1lt;CLOSEH1 OsMa2gt;0 SARH4lt;CLOSEH4)
SarUpSig[i] = SARH1;
if(TT! =iTiempo(Símbolo(),0,0)UsarAlerta)
//cadena de tiempo = TimeToStr(TimeCurrent());
Alerta(4xRider(COMPRAR) Símbolo());
Reproducir Sonido(alerta.wav);
TT=iTiempo(Símbolo(),0,0);
if((PSARH4gt;PCLOSEH4POsMa1lt;0PSARH1gt;PCLOSEH1)
(SARH4lt;CERRARH4OsMa1gt;0SARH1lt;CERRARH1SARD1lt; CERRADO1) OsMa2gt;0)
SarUpSig[I] = SARH1;
comprar = comercio;
if(TT! =iTiempo(Símbolo(),0,0)UsarAlerta)
//cadena de tiempo = TimeToStr(TimeCurrent());
Alerta(4xRider (COMPRAR) Símbolo());
Reproducir Sonido(alerta.wav);
TT=iTiempo(Símbolo(),0,0);
//
venta de cuerdas;
//VENDER
//si(Dn_ST! =VALOR_VACIO)
//
if(SarDownSig[i 1] ! = EMPTY_VALUE SARH1gt;CLOSEH1 OsMa2lt;0 SARH4gt;CLOSEH4)
SarDownSig[i] = SARH1;
if(TT! =iTiempo(Símbolo(),0,0)UsarAlerta)
//cadena de tiempo = TimeToStr(TimeCurrent());
Alerta(4xRider (VENDER) Símbolo());
Reproducir Sonido(alerta.wav);
TT=iTiempo(Símbolo(),0,0);
if((PSARH4lt;PCLOSEH4POsMa1gt;0PSARH1lt;PCLOSEH1)
(SARH4gt;CERRARH4OsMa1lt;0SARH1gt;CERRARH1SARD1gt; CERRADO1) OsMa2lt;0)
SarDownSig[I] = SARH1;
if(TT! =iTiempo(Símbolo(),0,0)UsarAlerta)
//cadena de tiempo = TimeToStr(TimeCurrent());
Alerta(4xRider (VENDER) Símbolo());
Reproducir Sonido(alerta.wav);
TT=iTiempo(Símbolo(),0,0);
//
//VENDER
//--
//Opinión (Del indicador:, DoubleToStr(SarUpSig[1], Digits));
retorno(0);
Estoy usando un EA para leer los valores.
#define INDI MiIndior
dual IndiUpVal = iCustom(NULL, 0, INDI, falso, 5, 0, 1);
dual IndiDownVal = iCustom(NULL, 0, INDI, falso, 5, 1, 1);
Comentario(IndiUpVal: D2S(IndiUpVal) . IndiUpVal: D2S(IndiDownVal));
D2S = DoubleToString con dígito
No importa lo que haga exactamente, iCustom produce EMPTY_VAL.
Si compenso el valor dentro del indicador en el momento ideal SarUpSig[1]
devolverá los valores correctos. Sin embargo, EMPTY_VAL siempre lo proporciona iCustom.
¿Por qué?
Cualquier ayuda es muy apreciada.