Ayuda a la codificación - página 290

 
mladen:
Es simple :

Coloca algo así al principio del procedimiento start() de tu EA y evitará que funcione si la pérdida (o ganancia) ya realizada ese día supera alguna cantidad :

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

[/PHP]

Estimado señor MLADEN....

MUCHAS GRACIAS por los códigos anteriores.... IOU 2 créditos.....

[PHP]

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

si (OrderType()==OP_BUY | OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

Sólo para comprobar..... este código evitará más órdenes de un par de divisas específico y MagicNumber.... si la PÉRDIDA ACUMULADA de hoy supera someProfitLossLimit....

Gracias por la respuesta tan rápida....

mejor regrads

AZRUL...

 
12BPRO:
Estimado señor MLADEN....

MUCHAS GRACIAS por los códigos anteriores.... Pagaré 2 créditos.....

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

[/PHP]

Just to check..... will this code prevent any more orders from a specific currency pair and MagicNumber.... if today's ACCUMULATED LOSS exceed someProfitLossLimit....

Thanks for the very-very fast reply....

best regrads

AZRUL...

Impedirá el procesamiento posterior del código si el beneficio acumulado de las órdenes cerradas es inferior a alguna cantidad. Puede reemplazar la última línea con esto :

[PHP]if (totalProfit < 0 && totalProfit < someProfitLossLimit) return(0);

Para asegurarse de que se hace sólo en los casos en que el "beneficio" acumulado es negativo (cuando hubo pérdidas)

 
mladen:

Evitará que se siga procesando el código si el beneficio acumulado de las órdenes cerradas es inferior a alguna cantidad. Puede reemplazar la última línea con esto :

if (totalProfit < 0 && totalProfit < someProfitLossLimit) return(0);
Para que se haga sólo en los casos en que el "beneficio" acumulado sea negativo (cuando hubo pérdidas)

Estimado señor MLADEN...

Lo siento señor... Creo que no lo he dejado lo suficientemente claro para usted.....

Mi intención es que un código para mantener las pestañas en la pérdida acumulada sólo para un par de divisas específico y MagicNumber.... Sin incluir el beneficio que está haciendo... SOLO CUENTA LA PÉRDIDA...

LO SIENTO POR LA CONFUSIÓN ..

Saludos...

AZRUL...

 
12BPRO:
Estimado señor MLADEN...

Lo siento, señor... Creo que no lo hice lo suficientemente claro para usted.....

Mi intención es que un código para mantener las pestañas en la pérdida acumulada sólo para un par de divisas específico y MagicNumber.... Sin incluir el beneficio que está haciendo... SOLO CUENTA LA PÉRDIDA...

LO SIENTO POR LA CONFUSIÓN ..

Saludos cordiales...

AZRUL...

AZRUL

El beneficio puede ser negativo (==pérdida) En la lista de órdenes cerradas hay un archivo llamado Order() profit que mantiene el "beneficio": positivo para las órdenes ganadoras y negativo para las perdedoras. Ese código hace exactamente lo que usted necesita

 

Estimado señor MLADEN,

La teoría es la siguiente.... si hoy resulta ser un mercado SIDEWAY, acabaré perdiendo parte de los beneficios (si los hay) que se han obtenido y X$ de riesgo en mi capital.... Eso no es una protección contra un muy MAL DÍA de trading.....

La razón de esto es que estoy dispuesto a RIESGO a X $ por día de la negociación de hoy....

Los códigos anteriores se comerán todos los beneficios (si los hay) del día además de que también se comerán mi RIESGO (capital)....

GRACIAS

Saludos cordiales...

AZRUL...

 
mladen:
AZRUL El beneficio puede ser negativo (==pérdida) En la lista de órdenes cerradas hay un archivo llamado Order() profit que mantiene el "beneficio": positivo para las órdenes ganadoras y negativo para las operaciones perdedoras. Ese código hace exactamente lo que necesitas

Estimado señor MLADEN...

Gracias por iluminarme en la sugerencia anterior...

Voy a tratar de buscar cualquier resultado....

Saludos cordiales

AZRUL...

 

Estimado señor MLADEN,

¿Los siguientes códigos harán el truco...

Manteniendo las pestañas en la pérdida acumulada sólo para un par de divisas específico y MagicNumber.... Sin incluir el beneficio que está haciendo ... SOLO LA PÉRDIDA cuenta...

extern double LossAmount = -500.00

...............

int start()

if(LossRisk()<=LossAmount)

return(0);

...............

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

Su conocimiento es muy apreciado ...

su servidor

AZRUL....

 
12BPRO:
Estimado señor MLADEN,

Los siguientes códigos harán el truco...

Manteniendo las pestañas en la PÉRDIDA ACUMULADA sólo para un par de divisas específico y MagicNumber.... Sin incluir el beneficio que está haciendo... Sólo cuenta la pérdida...

extern double LossAmount = -500.00

...............

int start()

if(LossRisk()<=LossAmount)

return(0);

...............

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

[/PHP]

Your Knowledge is highly appreciated...

yours truly

AZRUL....

No, no lo hará

Si quieres sumar sólo las pérdidas tienes que añadir

&& (OrderProfit()+OrderCommission()+OrderSwap()<0)

Así que la función se verá así :

[PHP]void PérdidaRiesgo()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)

totalLoss += OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

 

Estimado señor MLADEN....

Actualmente estoy utilizando estos códigos en mi EA que se ejecuta en un marco de tiempo M15 ...

Se abrirá una nueva orden después de M15 marco de tiempo ...

bool AddP()

{int _num=0; int _ot=0;

for (int j=0;j<OrdersTotal();j++)

{if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol() && OrderType()<3 && ((OrderMagicNumber()==Magic) || Magic==0))

{

_num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();

}

}

if(_num==0) return(true);

if(_num>0 && ((Time[0]-_ot))>0)

return(true);

else return(false);

}

¿Podría alterar este código para hacer una orden por cada 5 minutos después de la orden anterior....

aunque estoy en un M15 timeframe....

ESPERO QUE NO SE OFENDA POR ENVIAR TANTAS PREGUNTAS....

Saludos cordiales

AZRUL...

 
mladen:
No, no lo hará

Si quieres sumar sólo las pérdidas tienes que añadir

&& (OrderProfit()+OrderCommission()+OrderSwap()<0)

Así que la función se verá así :

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)

totalLoss += OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

Estimado señor MLADEN,

Usted sabe sus maneras de hacer las cosas por aquí....

Estoy muy contento de recibir una respuesta de usted SIR....

PM me si hay algo que podría hacer a cambio ... excepto para codings....

Gracias

Saludos cordiales

AZRUL...