Chiedete! - pagina 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

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

NewBar=0;

}

else {

prevtime

L'ho trovato! Lo farò in futuro - Impariamo con l'aiuto di altri che hanno più conoscenza e saggezza di noi nelle aree della nostra mancanza di comprensione! Grazie mille!

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 il formato giusto ora, uno di voi codificatori molto generosi mi aiuterebbe a risolvere questo problema di SL e TP qui sopra. Ritorno alla mia richiesta originale. Il mio programma di sonno disattiva l'EA in vari momenti. L'EA ha creato trade aperti prima della modalità sleep con Stop Loss di 40-50 pip e Take Profit di 100. Appena prima che l'EA venga messo a dormire, voglio che lo Stop Loss su ogni ticket aperto passi a 15 pip, e il Take profit passi a 25 pip. Lo stoploss non deve essere un trailing stop, ma un hard stop al di sotto (acquisto) o al di sopra (vendita) del suo attuale prezzo di scambio (anche il Take Profit). Prestatemi la vostra esperienza e fatemi felice!

 

Per i trailingstop, usate la seguente funzione. Penso che sia scritto in un modo che può essere compreso facilmente. A volte gli smanettoni della programmazione scrivono del codice che può essere efficiente per una frazione di millisecondo, ma che rende un lavoro dannatamente difficile da leggere e debuggare.

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

}

Chiamatelo nel vostro inizio usando quanto segue:

TrailingAlls(TrailStartPips,TrailStopPips);

 

Maji, nel mio codice (che è sbagliato). Non voglio trailing stop. Voglio solo che i ticket aperti siano modificati in modo che ogni acquisto e vendita aperta abbia un hard stop loss di 15 pips, e un hard take profit di 25 pips dal prezzo attuale della valuta.

Ho bisogno che cerchi di vedere cosa è aperto in relazione al simbolo della valuta, e poi modifichi lo stop loss e il take profit su ogni trade aperto. Questo è tutto ciò di cui ho bisogno.

Ieri sera siamo entrati in una tangente e abbiamo parlato di trailing stop - incomprensione tra me e Phoenix.

Per favore aiutatemi a realizzare questa funzione non troppo difficile - Per voi!

Dave <<<
 

Dave,

Penso che gli ingredienti per fare questo cambiamento siano presenti nella routine che ti ho dato.

Altrimenti, dovrai postare il tuo codice o mandarmi un'email e posso vedere cosa posso fare. A volte, è molto difficile leggere il codice degli altri, quindi forse è un compito che richiede tempo. In questo caso, alzo le mani.

Buona fortuna.

 

Il post #309 è il mio codice così com'è, in PHP.

Ho solo bisogno di cambiare i trade aperti in hard stop loss di 15 e hard take profit di 25. Non dovrebbe essere troppo per un professionista come te modificare questo codice.

Dave <<
 

Dave,

Come ho detto, richiede molto tempo fare questo tipo di modifiche. Sto giocando nella mia ora di pranzo ed ecco un tentativo. Se non funziona, sei da solo. Non è testato, quindi...

Chiamatelo nel vostro programma principale appena prima di istruire il programma a dormire.

Buona fortuna.

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

}

 

Dove avviene la modifica in questo? Lo stop loss originale era 40 e il take profit era 100. Come parte della modalità sleep, lo stop loss passerà a 15 su tutti gli ordini aperti esistenti e il take profit passerà a 25 su tutti gli ordini aperti esistenti.

Biglietti d'ordine aperti : Prima della modalità sleep.

Prima della modalità sleep Stop Loss - 40 Prima della modalità sleep Take Profit-100 Dopo la modifica della modalità sleep Stop Loss -15 Dopo la modifica della modalità sleep Take Profit - 25

Non sto inizializzando le impostazioni degli ordini, sto modificando gli ordini esistenti già piazzati e ancora attivi.

Grazie comunque per il tuo aiuto! Perché qualcosa di così semplice sembra così difficile?

Dave <<
 

Dave,

Non è difficile. Dovrai studiare MQ un po' di più. Controlla il codice che ho fornito. I parametri, stop e takeprofit dovrebbero essere i numeri che vuoi usare.

È tutto lì, dovrai capire come usarlo

 

Getto la spugna. Ricevo errori. Userò quello che Phoenix mi ha fornito perché funziona fino a un punto con cui posso vivere. Se questa lingua avesse una scuola da cui imparare negli Stati Uniti, sicuramente mi renderebbe la vita più facile. Sfortunatamente, non ce n'è nessuna.

Grazie per l'input, sia Maji che Phoenix!

Dave <<<