¿Cómo codificar? - página 197

 

¿Puede alguien ayudar a codificar este EA?

Hola,

Actualmente estoy operando con un EA de martingala que abrirá como máximo 4 niveles de órdenes. Acabo de pensar en una estrategia de cobertura que puede reducir el riesgo de usar este EA. A continuación se describe mi estrategia:

1. El EA de cobertura controlará el drawdown de las órdenes de apertura. Si el total de las pérdidas flotantes es mayor que una cantidad predeterminada, activará el EA para abrir una orden de cobertura en oposición a las órdenes de apertura.

2. El tamaño del lote de la orden cubierta se calcula en base a un múltiplo (el usuario puede establecer el múltiplo) del tamaño del lote de la última orden de apertura (por ejemplo, si el tamaño del lote de la última orden de nivel es 1,6 y el múltiplo se establece en 2, entonces la orden cubierta se abrirá con un tamaño de lote de 3,2.

3. Cuando la orden cubierta vuelva a su nivel de apertura, la orden cubierta se cerrará automáticamente.

4. Cuando la cesta global (las órdenes de apertura + la orden cubierta) alcance una cantidad de beneficio neto predeterminada, se cerrarán todas las órdenes.

Me pregunto si algún buen programador puede codificar este EA de cobertura para mí. Creo que será muy útil para otros EA de martingala también. Muchas gracias.

Saludos cordiales,

Wallace

 

whoa..

Gracias chicos...

¿que tal el stop de compra y el stop de venta?

¿sólo cambiar "BUY" por allí?

sólo quiero 2 posiciones sólo para 1 pares, no más que eso ..

Lo siento, todavía novato ...

 

¿Cómo codificar este indis en el EA?

Hola, soy un nuevo aprendiz y estoy interesado en aprender mql, ¿puede alguien decirme cómo codificar esto en el EA?

extern int Rápido.MA.Periodo = 5;

extern int Lento.MA.Periodo = 34;

extern int Señal.periodo = 5;

//---- buffers

double Buffer1[],

Buffer2[],

b2[],

b3[];

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

//| Función de inicialización de los indicadores personalizados ||.

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

int init()

{

//---- indicadores

// dos buffers adicionales utilizados para el conteo

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // abajo 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //ARRIBA 225 233 241

SetIndexBuffer(1,b3);

// Estos buffers no se trazan, sólo se usan para determinar las flechas

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

return(0);

}

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

//| Función de desinicialización del indicador Custor ||

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

int deinit()

{

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int inicio()

{

int, counted_bars=IndicatorCounted();

doble MA5,MA34;

int limit=Barras_contadas;

Print(" imprimir límite = ", límite);

if(counted_bars>0) limit++; <----¿alguien puede explicarme qué significa?

// Línea principal

for(i=0; i<límite; i++) <----¿Puede alguien explicarme qué significa?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Periodo.MA.Lento,0,MODO_SMA,PRECIO_MEDIO,i);

Buffer1=MA5-MA34;

}

// Línea de señal

for(i=0; i<limit; i++) <----¿Puede alguien explicarme qué significa?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <----¿alguien puede explicarme qué significa?

// Flechas

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Punto;

if(Buffer1 Buffer2)

b3 = Bajo-10*Punto; <----¿puede alguien explicarme qué significa?

}

//----

return(0);

}

Gracias chicos =^_^=

 
liew_stanley:
if(counted_bars>0) limit++; <----¿Alguien puede explicarme qué significa?

// Línea principal

for(i=0; i<limit; i++) <----¿Puede alguien explicarme qué significa?

// Línea de señalización

for(i=0; i<limit; i++) <----¿Puede alguien explicarme qué significa?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <----¿alguien puede explicarme qué significa?

// Flechas

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Punto;

if(Buffer1 Buffer2)

b3 = Bajo-10*Punto; <----¿Puede alguien explicarme qué significa?

Gracias chicos =^_^=

Es muy fácil.

Cuando inicias tu indi, Bars=1000 (por ejemplo) y counted_bars=0. Entonces limit=1000 y tu indi calcula todas las 1000 barras. Después de esto counted_bars=1000, y cada nuevo tick el indi calcula sólo la última barra (cero). Cuando llega la siguiente barra, limit=1 y el indi recalcula las dos últimas barras.

b3 = Low-10*Point; - es sólo una línea 10 puntos más baja que el mínimo de la barra.

 
liew_stanley:
Hola, soy un nuevo aprendiz y estoy interesado en aprender mql, ¿alguien puede decirme cómo codificar esto en el EA?

extern int Periodo.MA.rápido = 5;

extern int Periodo.MA.lento = 34;

extern int Señal.periodo = 5;

//---- buffers

double Buffer1[],

Buffer2[],

b2[],

b3[];

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

//| Función de inicialización de los indicadores personalizados ||.

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

int init()

{

//---- indicadores

// dos buffers adicionales utilizados para el conteo

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // abajo 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //ARRIBA 225 233 241

SetIndexBuffer(1,b3);

// Estos buffers no se trazan, sólo se usan para determinar las flechas

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

return(0);

}

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

//| Función de desinicialización del indicador Custor ||

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

int deinit()

{

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int inicio()

{

int, counted_bars=IndicatorCounted();

doble MA5,MA34;

int limit=Barras_contadas;

Print(" imprimir límite = ", límite);

if(counted_bars>0) limit++; <----¿alguien puede explicarme qué significa?

// Línea principal

for(i=0; i<límite; i++) <----¿Puede alguien explicarme qué significa?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Periodo.MA.Lento,0,MODO_SMA,PRECIO_MEDIO,i);

Buffer1=MA5-MA34;

}

// Línea de señal

for(i=0; i<limit; i++) <----¿Puede alguien explicarme qué significa?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <----¿alguien puede explicarme qué significa?

// Flechas

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Punto;

if(Buffer1 Buffer2)

b3 = Bajo-10*Punto; <----¿puede alguien explicarme qué significa?

}

//----

return(0);

}

Gracias chicos =^_^=

Si quieres usar este indicador en un ea puedes usar la función icustom() para acceder a él. realmente no necesitas entender nada del código del indicador, sólo los datos que escupe. Al menos esa es la forma fácil de hacerlo.

 
fxcourt:
Si quieres usar este indicador en un EA puedes usar la función icustom() para acceder a él. realmente no necesitas entender nada del código del indicador, sólo los datos que escupe. Al menos esa es la forma más fácil de hacerlo.

Es decir, utilizar la función icustom() en el EA para recuperar los indis? ¿Cómo debe ser la codificación para ser escrito en el EA? me puede dar alguna guía?

Muchas gracias

 
toiii:
whoa ..

Gracias chicos...

¿que tal el stop de compra y el stop de venta?

¿sólo cambiar "BUY" por allí?

sólo quiero 2 posiciones sólo para 1 pares, no más que eso ..

Lo siento, todavía novato ..

Leer esto

Tutorial MQL4

 

¿Esta codificación es correcta?

extern double TakeProfit=100;

extern double Lots=1;

extern double TrailingStop=35;

extern int ShortEma = 5;

extern int LongEma = 34;

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

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

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

int init()

{

//----

//----

return(0);

}

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

//| función de desinicialización experta ||

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

int deinit()

{

//----

//----

return(0);

}

int Cruzado (doble línea1 , doble línea2)

{

static int última_dirección = 0

static int dirección_actual = 0;

if(línea1>línea2)dirección_actual = 1; //arriba

if(línea1<línea2)dirección_actual = 2; //abajo

if(dirección_actual != última_dirección) //cambio

{

última_dirección = última_dirección;

return (última_dirección);

}

else

{

return (0);

}

}

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

//| función de inicio experto ||

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

int inicio()

{

//----

int total

double shortEma, longEma;

shortEma = iCustom(NULL,0, "Test_Demo",13,0,0);

longEma = iCustom(NULL,0, "Test_Demo",54,0,0);

Print("shortEma = " + shortEma + " : longEma = " + longEma);

int isCrossed = 0;

isCrossed = Crossed (LongEma,ShortEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);

if(1>0)

{

if(OrderSelect(1,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de COMPRA : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red);

si(2>0)

{

if(OrderSelect(2,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}

}

Tengo un error que dice 1 & 2 token inesperado, ¿qué significa eso? ¿puede guiarme?

Gracias

 

Supongo que borraste algo y lo olvidaste:

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(2>0)

es una tontería.

 
liew_stanley:
extern double TakeProfit=100;

extern double Lots=1;

extern double TrailingStop=35;

Tengo un error que dice 1 & 2 unexpected token, ¿qué significa eso? ¿puede guiarme?

Gracias

Borrar 1=, y 2= antes de OrderSend(....

Razón de la queja: