¡Pide! - página 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {

NewBar=0;

}

else {

prevtime

¡Lo he encontrado! Haré esto en el futuro - ¡Aprendemos con la ayuda de otros que tienen más conocimiento y sabiduría que nosotros en áreas de nuestra falta de entendimiento! ¡Muchas gracias!

Dave <<<<
 

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(OrderOpenPrice()-Ask>=TrailingStop*Point)

{

if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(Bid-OrderOpenPrice()>=TrailingStop*Point)

{

if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

return(0);

}

}

Con el formato adecuado ahora, ¿podría alguno de ustedes, codificadores muy generosos, ayudarme a resolver este problema de SL y TP arriba. Volviendo a mi petición original. Mi programa de sueño desactiva el EA en varios momentos. El EA creó operaciones abiertas antes del modo de suspensión con 40 - 50 pip Stop Loss, y Take Profit de 100. Justo antes de que el EA se ponga a dormir, quiero que el Stop Loss de cada entrada abierta cambie a 15 pips, y el Take Profit cambie a 25 pips. El stoploss no debe ser un trailing stop, sino un stop duro por debajo (compra) o por encima (venta) de su precio actual de negociación (al igual que el Take Profit). ¡¡Prestadme vuestra experiencia y alegradme el día!!

 

Para los trailingstops, utilice la siguiente función. Creo que está escrito de una manera que se puede entender fácilmente. A veces los frikis de la programación escriben código, que puede ser eficiente por una fracción de milisegundo, pero hace que sea un trabajo muy difícil de leer y depurar.

void TrailingAlls(int start,int stop)

{

int profit;

double stoptrade;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Bid-(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Ask+(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);

}//Shrt

}

}//for

}

Llámelo en su inicio usando lo siguiente:

TrailingAlls(TrailStartPips,TrailStopPips);

 

Maji, en mi código (que está mal). No quiero trailing stops. Sólo quiero que los tickets abiertos sean modificados para que cada compra y venta abierta tenga un stop loss duro de 15 pips, y un take profit duro de 25 pips desde el precio actual de la divisa.

Necesito que busque para ver lo que está abierto que se relaciona con el símbolo de la moneda, y luego modificar la pérdida de la parada y tomar ganancias en cada comercio abierto. Eso es todo lo que necesito.

Anoche nos metimos por la tangente y nos metimos en los trailing stops - Malentendido entre Phoenix y yo.

Por favor, ayúdame a lograr esta función no muy difícil - ¡Para ti que es!

Dave <<<<
 

Dave,

Creo que los ingredientes para hacer ese cambio están ahí en la rutina que te di.

Si no es así, tendrás que publicar tu código o enviármelo por correo electrónico y veré lo que puedo hacer. A veces, es muy difícil leer el código de otros, por lo que tal vez sea una tarea que requiera mucho tiempo. En ese caso, levantaré las manos.

Buena suerte.

 

Post #309 es mi código tal como está, en PHP.

Sólo hay que cambiar las operaciones abiertas a la pérdida de la parada duro de 15 y duro tomar ganancias de 25. No debería ser demasiado para un profesional como usted para modificar esta codificación.

Dave <<
 

Dave,

Como he dicho, se necesita mucho tiempo para hacer ese tipo de ediciones. Estoy jugando en mi hora de almuerzo y aquí es un intento. Si no funciona, estás por tu cuenta. No está probado, así que...

Llame a esto en su programa principal justo antes de instruir el programa para dormir.

Buena suerte.

void ChangeStop(int takeprofit,int stop)

{

double profit;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=Ask+(takeprofit*point);

stopcal=Bid-(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=Bid-(takeprofit*point);

stopcal=Ask+(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);

}//Shrt

}

}//for

}

 

¿Dónde tiene lugar la modificación en esto? El stop loss original era de 40 y el take profit de 100. Como parte del modo sleep, el stop loss debe cambiar a 15 en cualquier orden abierta existente y el take profit debe cambiar a 25 en cualquier orden abierta existente.

Entradas de órdenes abiertas: Antes del modo de reposo.

Antes del modo de reposo Stop Loss - 40 Antes del modo de reposo Take Profit-100 Después del modo de reposo Modificación de Stop Loss -15 Después del modo de reposo Modificación de Take Profit - 25

No estoy inicializando la configuración de las órdenes, estoy modificando las órdenes existentes ya colocadas y aún activas.

¡Gracias por su ayuda de todos modos! ¿Por qué algo tan simple parece tan difícil?

Dave <<
 

Dave,

No es difícil. Tendrás que estudiar un poco más el MQ. Revisa el código que te proporcioné. Los parámetros, stop y takeprofit deberían ser los números que quieres usar.

Todo está ahí, usted tendrá que averiguar cómo usarlo

 

Tiro la toalla. Me da errores. Usaré lo que Phoenix ha proporcionado porque funciona hasta un punto con el que puedo vivir. Si este idioma tuviera una escuela para aprender en Estados Unidos, seguro que me facilitaría la vida. Desgraciadamente, no hay ninguna.

¡Gracias por los aportes, tanto de Maji como de Phoenix!

Dave <<<<