Ayuda a la codificación - página 201

 
Slow Moe:
Hola, quiero preguntar, si es posible reescribir este indicador, para que sólo muestre las flechas, y que se muestren en los candeleros? ¿Alguien podría ayudarme con esto, o quizás codificarlo para mí, por favor?

con respecto a

Lento

fxmtn-test.mq4

Lento

Pruébalo así

Archivos adjuntos:
 

¡¡Muchas gracias mladen funciona de maravilla !!

Estoy tratando de conseguir "extern int arrowDistance = XXX;" de alguna manera activado también.

Ahora aparece en el menú de selección, pero no tiene la Distancia cambiante. ¿Dónde poner el *arrowDistance ?

¿O estoy totalmente equivocado?

Lo puse en varios lugares, pero sólo me dio más puntos, no más distancia....

Noob tratando de entender el código, y la esperanza de un poco de luz

 

Ahora lo hice así :

si (SobreBuff > 24.0) ShortBuff = Alto+ (Punto*distancia de la flecha /2);

if (BelowBuff < -24.0) LongBuffe = Low- (Point*arrowDistance /2);

¿Es esta una forma correcta? Sólo porque funciona, puede ser incorrecto

 
Slow Moe:
Ahora lo hice así :

si (SobreBuff > 24.0) ShortBuff = Alto+ (Punto*distancia de la flecha /2);

if (BelowBuff < -24.0) LongBuffe = Low- (Point*arrowDistance /2);

¿Esta es una forma correcta? Sólo porque funciona, puede estar mal

Eso debería funcionar, hay otra manera puede hacerlo así

LongBuffe = Low-arrowDistance*iATR(NULL,0,20,i) y ShortBuff = High+arrowDistance**iATR(NULL,0,20,i)

 

Lento,

Es mejor usar el modo iATR(). Cambie los marcos de tiempo y verá lo que quiero decir. Visualmente tendrás un problema en los marcos de tiempo más altos cuando la distancia de una flecha desde el máximo o el mínimo es fija (se verán desordenados en algún marco de tiempo). Usar iATR() en lugar de usar la distancia fija resuelve ese problema

 

Gracias mrtools,mladen funciona realmente mucho mejor.

Un último indicador que no puedo controlar....

Tratando de cambiarlo aquí : SignalGap = MathCeil(iATR(NULL,0,50,0)/Punto);

Pensé que este era el punto correcto, ya que al cambiar el 50 cambia la distancia. Pero nada de lo que probé funcionó con arrowDistance.

 
Slow Moe:
Gracias mrtools,mladen funciona realmente mucho mejor.

Un último indicador que no puedo controlar ....

Tratando de cambiarlo aquí : SignalGap = MathCeil(iATR(NULL,0,50,0)/Punto);

Pensé que este era el punto correcto, ya que al cambiar el 50 cambia la distancia. Pero nada de lo que probé funcionó con arrowDistance.

Lento

Cuando estás demandando atr para la distancia de las flechas probablemente la mejor manera de modificar esa distancia es una especie de multiplicador. Por ejemplo :

arrowPrice = High+iATR(NULL,0,50,0)*arrowDistance;

Donde arrowDistance se define como doble y puede ser fraccional (por lo que podría utilizar valores como 0,5 así como valores como 10,5 también). Cambiando el periodo de atr no cambiará la distancia significativamente (sólo tomará un promedio más largo de rangos en cuenta)

 

intentar obtener el valor de otro indicador

hola com,

Estoy tratando de escribir mi primer indicador y quiero usar también un valor de un indicador existente que obtuve de este sitio.

¿Qué tengo que codificar en mi nuevo indicador para saber si la barra es azul/roja o 1/0?

incluso he intentado poner todo el código en mi indicador y no ha funcionado.

cualquier ayuda será apreciada

thx bob

#property copyright "fxfariz"

#property link "fxfariz@gmail.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue //Red //Aqua

#property indicator_color2 Red

extern int SSP=7;

extern double Kmax=50.6; //24 21.6 21.6

extern int CountBars=300;

extern int myPeriod = 0 ;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtHBuffer1[];

double ExtHBuffer2[];

int xPeriod ;

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

string TimeFrameToString(int tf)

{

string tfs;

switch(tf) {

case PERIOD_M1: tfs="M1" ; break;

case PERIOD_M5: tfs="M5" ; break;

case PERIOD_M15: tfs="M15" ; break;

case PERIOD_M30: tfs="M30" ; break;

case PERIOD_H1: tfs="H1" ; break;

case PERIOD_H4: tfs="H4" ; break;

case PERIOD_D1: tfs="D1" ; break;

case PERIOD_W1: tfs="W1" ; break;

case PERIOD_MN1: tfs="MN1";

}

return(tfs);

}

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

IndicatorBuffers(4);

SetIndexStyle(0,DRAW_HISTOGRAM,0,4); //Red

SetIndexBuffer(0,ExtHBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM,0,4); //Lime

SetIndexBuffer(1,ExtHBuffer2);

SetIndexBuffer(2,ExtMapBuffer1);

SetIndexBuffer(3,ExtMapBuffer2);

if(myPeriod==0){xPeriod=Period();} {xPeriod=myPeriod;}

string tPeriod = TimeFrameToString(xPeriod) ;

IndicatorShortName(tPeriod + " Trade What You see ("+SSP+")");

//----

return(0);

}

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

//| Custor indicator deinitialization function |

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

int deinit()

{

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars+SSP);

SetIndexDrawBegin(1,Bars-CountBars+SSP);

int i, counted_bars=IndicatorCounted();

double SsMax, SsMin, smin, smax;

if(Bars<=SSP+1) return(0);

if(counted_bars<SSP+1)

{

for(i=1;i<=SSP;i++) ExtMapBuffer1[CountBars-i]=0.0;

for(i=1;i<=SSP;i++) ExtMapBuffer2[CountBars-i]=0.0;

}

for(i=CountBars-SSP;i>=0;i--) {

SsMax = High;

SsMin = Low[Lowest(NULL,xPeriod,MODE_LOW,SSP,i-SSP+1)];

smax = SsMax-(SsMax-SsMin)*Kmax/100;

ExtMapBuffer1=smax;

ExtMapBuffer2=smax;

}

for(int b=CountBars-SSP;b>=0;b--)

{

if(ExtMapBuffer1>ExtMapBuffer2)

{

ExtHBuffer1=1;

ExtHBuffer2=0;

}

else

{

ExtHBuffer1=0;

ExtHBuffer2=1;

}

}

return(0);

}
 
BobMorane1000:
hola com,

Estoy tratando de escribir mi primer indicador propio y quiero usar también un valor de un indicador existente que obtuve de este sitio.

¿Qué tengo que codificar en mi nuevo indicador para saber si la barra es azul/roja o 1/0?

incluso he intentado poner todo el código en mi indicador y no ha funcionado.

cualquier ayuda será apreciada

thx bob

#property copyright "fxfariz"

#property link "fxfariz@gmail.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue //Red //Aqua

#property indicator_color2 Red

extern int SSP=7;

extern double Kmax=50.6; //24 21.6 21.6

extern int CountBars=300;

extern int myPeriod = 0 ;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtHBuffer1[];

double ExtHBuffer2[];

int xPeriod ;

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

string TimeFrameToString(int tf)

{

string tfs;

switch(tf) {

case PERIOD_M1: tfs="M1" ; break;

case PERIOD_M5: tfs="M5" ; break;

case PERIOD_M15: tfs="M15" ; break;

case PERIOD_M30: tfs="M30" ; break;

case PERIOD_H1: tfs="H1" ; break;

case PERIOD_H4: tfs="H4" ; break;

case PERIOD_D1: tfs="D1" ; break;

case PERIOD_W1: tfs="W1" ; break;

case PERIOD_MN1: tfs="MN1";

}

return(tfs);

}

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

IndicatorBuffers(4);

SetIndexStyle(0,DRAW_HISTOGRAM,0,4); //Red

SetIndexBuffer(0,ExtHBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM,0,4); //Lime

SetIndexBuffer(1,ExtHBuffer2);

SetIndexBuffer(2,ExtMapBuffer1);

SetIndexBuffer(3,ExtMapBuffer2);

if(myPeriod==0){xPeriod=Period();} {xPeriod=myPeriod;}

string tPeriod = TimeFrameToString(xPeriod) ;

IndicatorShortName(tPeriod + " Trade What You see ("+SSP+")");

//----

return(0);

}

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

//| Custor indicator deinitialization function |

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

int deinit()

{

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars+SSP);

SetIndexDrawBegin(1,Bars-CountBars+SSP);

int i, counted_bars=IndicatorCounted();

double SsMax, SsMin, smin, smax;

if(Bars<=SSP+1) return(0);

if(counted_bars<SSP+1)

{

for(i=1;i<=SSP;i++) ExtMapBuffer1[CountBars-i]=0.0;

for(i=1;i<=SSP;i++) ExtMapBuffer2[CountBars-i]=0.0;

}

for(i=CountBars-SSP;i>=0;i--) {

SsMax = High;

SsMin = Low[Lowest(NULL,xPeriod,MODE_LOW,SSP,i-SSP+1)];

smax = SsMax-(SsMax-SsMin)*Kmax/100;

ExtMapBuffer1=smax;

ExtMapBuffer2=smax;

}

for(int b=CountBars-SSP;b>=0;b--)

{

if(ExtMapBuffer1>ExtMapBuffer2)

{

ExtHBuffer1=1;

ExtHBuffer2=0;

}

else

{

ExtHBuffer1=0;

ExtHBuffer2=1;

}

}

return(0);

}

BobMorane1000

Puedes hacer algo como esto:

bool blueValue = (iCustom(NULL,0,"indicatorNameHere",SSP,Kmax,0,0)!=0);

bool redValue = (iCustom(NULL,0,"indicatorNameHere",SSP,Kmax,1,0)!=0);

Pero ten cuidado. Ese indicador es una variación del indicador de súper señal, y el indicador de súper señal recalcula (repinta)

 

muchas gracias y por tu aviso^^, ahora lo probaré...