¿Cómo codificar? - página 321

 
mladen:
dasio

Intenta algo como esto :

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

//------------------------------------------------------------------

//

//------------------------------------------------------------------

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

if (countedBars<0) return(-1);

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

for(i=limit; i>=0; i--)

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Mladen lo he intentado pero sin éxito.

Adjunto hay un ejemplo de mi indicador. Las únicas diferencias están en los cálculos pero lo demás es lo mismo.

¿Puedes integrarlo con tu fórmula? para que yo también pueda estudiarlo.

Gracias

test1.mq4

Archivos adjuntos:
test1.mq4  3 kb
 

Hola a todos. Buscando ayuda rápida para escribir una línea de código para una señal.

Estoy usando Step_Indy y una cruz EMA para la señal. Lo que quiero hacer es que el EA entre en la operación sólo cuando ambos den una señal dentro de 10 barras de diferencia.

Así que digamos que el Paso da una señal, quiero que el EA para mirar hacia atrás 10 bares para ver si había una cruz de MA, si sí entrar. (Nota: no quiero que sólo compruebe y vea si la señal actual de cruce de MA es larga, quiero que haya sido reciente como dentro de 10 barras)

TIA para cualquier ayuda, no creo que he visto esto hecho en el pasado en cualquier EA que he mirado.

 

dasio

Del código no puedo ver cuál es la intención del código. De todas formas, aquí tienes un código en el que puedes elegir si quieres usar el rango verdadero como valor "básico" del indicador (es la primera parte de tu código) o quieres usar la segunda parte de tu código como valor "básico"

dasio:
Mladen lo he intentado pero sin éxito.

Adjunto hay un ejemplo de mi indicador. Las únicas diferencias están en los cálculos pero lo demás es lo mismo.

¿Puedes integrarlo con tu fórmula? para que yo también pueda estudiarlo.

Gracias

test1.mq4
Archivos adjuntos:
_test1.mq4  2 kb
 

Problemas con la señal

Mladen, gracias una vez más, la alerta ya no se repite, funciona bien.....pero quiero poner un stop sgnal.....y escribí el siguiente código, la señal de compra y venta funciona pero el stop de compra y el stop de venta no funcionan, ver el código de abajo:

//-----Asignación de Alarts----

if(Period()==240){

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRECIO_CIERRE,0);

double b4enCCI=iCCI(NULL,240,6,PRECIO_TIPICO,1);

double nowenCCI=iCCI(NULL,240,6,PRECIO_TIPICO,0);

double b4trCCI=iCCI(NULL,240,14,PRECIO_TIPICO,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// Alertas comerciales

¡if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Comprar","\n", "Lahora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

¡if((adx_h4>=20)&&(di_m_h4>=20)&&(di_m_h4>di_p_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Tiempo[0];

Alert("Vender","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

// Detener las alertas

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>¡=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Stop Buy","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

if((adx_h4>=20)&&(di_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>¡=20)&&(di_p_h4<di_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Tiempo[0];

Alert(" Stop Sell","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

}

mladen:
Pruebe así :
if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 
mladen:
dasio Del código no puedo ver cuál es la intención del código. De todas formas, aquí tienes un código en el que puedes elegir si quieres usar el rango verdadero como valor "básico" del indicador (es la primera parte de tu código) o quieres usar la segunda parte de tu código como valor "básico"

Gracias mladen.

Sé que calcular de esta manera no tiene sentido. Pero estoy tratando de codificar un análisis que hago todos los días. ^^

Es sólo 1/3 del trabajo.

Gracias

 
mladen:
dasio Del código no puedo ver cuál es la intención del código. De todas formas, aquí tienes un código en el que puedes elegir si quieres usar el rango verdadero como valor "básico" del indicador (es la primera parte de tu código) o quieres usar la segunda parte de tu código como valor "básico"

Gracias, es perfecto.

¿Es posible añadir el arreglo del viernes?

Gracias

Saludos

 

Volumen

quiero consultar el volumen de cada barra, pero no tengo ni idea de cómo hacerlo soy nuevo en la programación mql4, pero tratando de aprender he intentado este sencillo programa, pero puede ser una completa basura, por favor, hágamelo saber, y cualquier sugerencia sería apreciada. a continuación es el comienzo de la secuencia de comandos para consultar el volumen de una barra y luego imprimir el resultado, por favor, hágamelo saber donde voy wrong!!!! seguir tratando de compilar hay un error que dice (final del programa que termina paréntesis } esperado.

//--- parámetros de entrada

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double volumemore = 600

extern double volumeless = 150;

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

//| función de inicialización de expertos ||.

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

int inicio()

{

if (Volumen=>volumemore)

{

Imprimir ("volumen más");

{

if (Volumen=<volumemore)

{

Print ("volumen menos");

if(Bares<20)

{

Print("barras menos de 20");

{

//----

//----

return (0);

}

 

Utilice el Volumen donde "índice" es el número de la barra para la que desea ver el volumen. Recuerde que en Metatrader 4 el "Volumen" es siempre el volumen del tick

Tim Latham:
quiero consultar el volumen de cada barra, pero no tengo ni idea de cómo hacerlo soy nuevo en la programación mql4, pero tratando de aprender he intentado este programa simple, pero puede ser una completa basura, por favor hágamelo saber, y cualquier sugerencia sería apreciada. a continuación es el comienzo de la secuencia de comandos para consultar el volumen de una barra y luego imprimir el resultado, por favor hágamelo saber donde voy wrong!!!! seguir tratando de compilar hay un error que dice (final del programa que termina paréntesis } esperado.

//--- parámetros de entrada

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30

extern double volumemore = 600

extern double volumeless = 150;

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

//| función de inicialización de expertos ||.

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

int inicio()

{

if (Volumen=>volumemore)

{

Imprimir ("volumen más");

{

if (Volumen=<volumemore)

{

Print ("volumen menos");

if(Bares<20)

{

Print("barras menos de 20");

{

//----

//----

return (0);

}
 
jayjonbeach:
Hola a todos. Busco ayuda rápida para escribir una línea de código para una señal.

Estoy usando Step_Indy y un cruce de EMA para la señal. Lo que quiero hacer es que el EA entre en la operación sólo cuando ambos den una señal con 10 barras de diferencia.

Así que digamos que el Paso da una señal, quiero que el EA mire hacia atrás 10 barras para ver si hubo un cruce de EMA, si sí entrar. (Nota: no quiero que sólo compruebe si la señal actual de cruce de MA es larga, quiero que sea reciente, como dentro de las 10 barras).

TIA para cualquier ayuda, no creo que he visto esto hecho en el pasado en cualquier EA que he mirado.

Bueno, he intentado un par de cosas, pero hasta ahora nada ha funcionado.

Aquí está una de las formas en que he intentado esto:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest );

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

if (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

si (trendCurr<0)

return(LONG);

si no, return(NONE);

}

}

}

if(VeintiunaEMA < CincuentaCincoEMA)

{

if (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

si (trendCurr>0)

return(SHORT);

si no, return(NONE);

}

}

}

return(NONE);

}

Se agradece cualquier idea, también he probado (int i=1; i<=lookback; i++)

 

...

jayjonbeach,

Estás probando el valor de trendCurr una y otra vez en el bucle sin cambiarlo (por lo que siempre devolverá NONE)

Prueba a poner el iCustom() en el bucle y luego prueba ese valor. Algo como esto :

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
Bueno he probado un par de cosas, pero hasta ahora nada ha funcionado.

Esta es una de las formas en que probé esto:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest);

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

if (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

si (trendCurr<0)

return(LONG);

si no, return(NONE);

}

}

}

if(VeintiunaEMA < CincuentaCincoEMA)

{

if (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

si (trendCurr>0)

return(SHORT);

si no, return(NONE);

}

}

}

return(NONE);

}

Se agradece cualquier idea
Razón de la queja: