¿Cómo codificar? - página 300

 

Evitar el overtrading

Hola a todos,

He probado mi EA usando el método de todos los ticks en un gráfico H4 usando un cruce de MACD para iniciar órdenes (entre otros) y el probador de la estrategia abre alrededor de 200 posiciones en los primeros minutos, así que después de leer un poco me doy cuenta de que necesito limitar el número de operaciones que coloca, en mi sistema no debería colocar más de 1 operación cada 4 horas porque espero a que la vela se cierre antes usando iMACD(... PRICE_CLOSE...) y compensar esto para 0 para MACDMainCurrent & MACDSymbolCurrent y 1 para MACDMainPrevious & MACDSymbolPrevious.

Mis variables globales son

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

Y he insertado este código antes de que mi EA compruebe si hay posiciones largas o cortas:

//--- Determina si la orden ya está colocada en el bloque de tiempo H4

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Comprobar la posibilidad de posición larga (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

si ... (aquí es donde realmente compruebo el cruce del MACD entre otros indicadores).

Entonces si la orden se abrió con éxito:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

si (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc etc.

¿Alguien puede decirme si estoy haciendo esto de la manera correcta? No sé si puede haber una forma más eficiente o precisa de hacerlo. Gracias.

 

...

¿Por qué no cuenta simplemente cuántas órdenes ha abierto ya su EA y si ya ha abierto una orden, no abre una nueva?

Sólo una idea (y una forma habitual y la más sencilla de cómo se limita el número de órdenes abiertas por un EA)

crsnape@btinternet.com:
Hola a todos,

He probado mi EA usando el método de todos los ticks en un gráfico H4 usando un cruce de MACD para iniciar órdenes (entre otros) y el probador de estrategias abre unas 200 posiciones en los primeros minutos así que después de leer un poco me doy cuenta de que necesito limitar el número de operaciones que coloca, en mi sistema no debería colocar más de 1 operación cada 4 horas porque espero a que la vela se cierre antes usando iMACD(... PRICE_CLOSE...) y compensar esto para 0 para MACDMainCurrent & MACDSymbolCurrent y 1 para MACDMainPrevious & MACDSymbolPrevious.

Mis variables globales son

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

Y he insertado este código antes de que mi EA compruebe si hay posiciones largas o cortas:

//--- Determina si la orden ya está colocada en el bloque de tiempo H4

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Comprobar la posibilidad de posición larga (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

si ... (aquí es donde realmente compruebo el cruce del MACD entre otros indicadores).

Entonces si la orden se abrió con éxito:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

si (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc etc.

¿Puede alguien decirme si estoy haciendo esto de la manera correcta? No sé si puede haber una forma más eficiente o precisa de hacerlo. Gracias.
 

Sólo porque mi EA suele tener varias posiciones abiertas a la vez; así que no podría usar digamos

si (CountedOrders > 5)

Romper;

O algo por el estilo, porque no sé cuántas posiciones estarán abiertas en un momento dado. Necesito relacionarlo con el tiempo que estoy pensando.

 

I m adjuntar este EA a mi cuenta de 5 dígitos mt4.. Pero no se abre cualquier comercio....

Por favor, ayúdame

Archivos adjuntos:
dipu_2.mq4  5 kb
 

Por favor, necesito editar este EA para mover el stoploss en 3 pasos

este EA ya tiene la capacidad de alcanzar el punto de equilibrio pero quiero que este EA mueva mi

stoploss de su primer punto de equilibrio a otro +20 pips una vez que mi beneficio llega a

+27pips y lo mueva de nuevo a +40pips cuando llegue a +50pips e incluso

más si es posible.

Archivos adjuntos:
 

Hola Mladen,

Gracias por el aviso. Ya he conseguido solucionarlo.

Por cierto, ¿sabes qué función tienen MODE y SHIFT en iStochasticdo o hay algún sitio que proporcione más información? He estado leyendo la documentación en la página web de mql4 pero todavía no tiene sentido para mí. La explicación que dan es demasiado breve.

Por ejemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

¿Qué hace el actual + 0 etc.?

Gracias y saludos

Terrance

mladen:
Terrance Eso es una función. Ponla al final de tu EA y coloca llamadas a ella donde creas conveniente para comprobar si una orden ya está abierta en una barra actual
 

Hola, ¿alguien podría decirme en qué me estoy equivocando aquí, por favor? Estoy recibiendo el código de error ')', un recuento de parámetros erróneo en la línea resaltada en rojo - pero todos los parámetros se suman...

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Comprobar la posibilidad de posición larga (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Gracias

 

...

Terrance

MODE_MAIN significa que estás leyendo el valor de la línea estocástica. MODE_SIGNAL significa que estás leyendo el valor de la línea de señal estocástica.

En cuanto a SHIFT: es el mismo para todos los indicadores (incluso los personalizados). Por ejemplo: SHIFT=0 significa el valor de la barra actual, SHIFT=1 significa el valor de la primera barra cerrada y así sucesivamente ...

tkuan77:
Hola Mladen,

¡Gracias por el aviso! Ya he conseguido solucionarlo.

Por cierto, ¿sabéis qué función tienen MODE y SHIFT en iStochasticdo o hay algún sitio que proporcione más información? He estado leyendo la documentación en la página web de mql4 pero todavía no tiene sentido para mí. La explicación que dan es demasiado breve.

Por ejemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

¿Qué hace el actual + 0 etc.?

Gracias y saludos

Terrance
 

...

El error es que GlobalVariableGet() sólo tiene un parámetro (el nombre de la variable). No necesitas el segundo parámetro (el"false" que tienes en la llamada a la función)

crsnape@btinternet.com:
Hola, ¿alguien podría decirme en qué me estoy equivocando aquí, por favor? Estoy recibiendo el código de error ')' recuento de parámetros erróneos en la línea resaltada en rojo - pero todos los parámetros se suman...

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Comprobar la posibilidad de posición larga (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Gracias
 

He cambiado el código a este, y su libre de errores por lo menos - es que está bien?

if (GlobalVariableGet (hasOrderedGV) == false)

Razón de la queja: