Trailing Stops e Trailing Profit - pagina 5

 
Arav007:


3rd Trade's TP= 108.536 [ ho impostato questo TP a tale distanza così funzionerà come se non ci fosse alcun TP]

Ora, come da mia richiesta, quando il prezzo sarà diciamo 7 pip [103.603] in profitto, lo Stop Loss di

1° e 2° trade diventeranno 1 pip di profitto [103.543] e lo Stop Loss del 3° trade rimarrà a 103.386.

Come nell'immagine sottostante:

Il 1° ordine GBPUSD è stato chiuso con un profitto di 10 pip.

Il 2° ordine è ancora in esecuzione e il suo SL è stato spostato.

Per il 3° trade anche lo SL è stato spostato, cosa che non voglio.

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,0, "Buy Order",MagicNumber, 0,Blue);//tp 0
 
deVries:


Grazie. Questo è un altro modo e un buon modo per impostare No TP.

Ma per quanto riguarda l'SL? Come posso farlo senza la via del biglietto d'ordine variabile?

Saluti

 
if(OrdersTotal()>0){
 

for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
        
        if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber){
                
        
                sl     = OrderStopLoss(); // Stop Loss. 
                tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                
                if(OrderType()==OP_BUY){

if (OrdersTotal()==3){

if (cnt==1){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}    // end of  if (OrdersTotal()==3)

else{    // Looking for 2nd option                           

if (OrdersTotal()==2){                           // 10 pips TP trade can be closed already

if(cnt== 0){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}  // End of  if (OrdersTotal()==2)

}  // End of  else

 

Cosa ne pensate di questo? Va bene per la parte Stop Loss?

 
Arav007:

Cosa ne pensate di questo? Va bene per la parte Stop Loss?


no, è sbagliato

ma quello che non mi piace di più è come devo leggere

è illeggibile la codifica che hai qui cambia il tuo stile scrivendo il tuo codice !!!!

le linee vuote non sono necessarie , questo è uguale al tuo

puoi farlo così?

if(OrdersTotal()>0)
   {
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber)
        {
        sl     = OrderStopLoss(); // Stop Loss. 
        tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
        if(OrderType()==OP_BUY)
           {
           if (OrdersTotal()==3) 
              {
              if (cnt==1)
                 {
                 Fixed Stop Loss     
                 }
               else{
                   Trailing Stop Loss
                   }
              }    // end of  if (OrdersTotal()==3)
           else{    // Looking for 2nd option                           
               if (OrdersTotal()==2)
                 {                           // 10 pips TP trade can be closed already
                 if(cnt== 0)
                   {
                   Fixed Stop Loss
                   }
                   else{
                       Trailing Stop Loss
                       }
                 }  // End of  if (OrdersTotal()==2)
   }  // End of  else

nessuna linea vuota

facile vedere dove inizia '{' e per quale parte di codice è dentro dove finisce '}'.

può succedere che tu abbia più di 20 operazioni aperte che non puoi usare all'interno del ciclo if (OrdersTotal()==

o if(cnt==

perché fate questo orderloop

fate questo orderloop per eseguire tutte le vostre compravendite una per una

Quello che dovete codificare è un BreakEven

cosa fa lo Stop Loss fisso ????

 
deVries:


no, è sbagliato

ma quello che non mi piace di più è come devo leggere

è illeggibile la codifica che hai qui cambia il tuo stile scrivendo il tuo codice !!!!

le linee vuote non sono necessarie questo è uguale al tuo

puoi farlo così?

nessuna linea vuota

facile vedere dove inizia '{' e per quale parte di codice è dentro dove finisce '}'.

può succedere che tu abbia più di 20 operazioni aperte che non puoi usare all'interno del ciclo if (OrdersTotal()==

o if(cnt==

perché fate questo orderloop

fate questo orderloop per eseguire tutte le vostre compravendite una per una

Quello che dovete codificare è un BreakEven

cosa fa lo Stop Loss fisso ????


Scusa, in realtà mi sento più a mio agio con le linee vuote. Comunque, lo seguirò mentre posterò i codici qui.

Pensavo che 'OrdersTotal()' recuperasse gli ordini 'Solo' dalla coppia a cui l'EA è collegato.

Ma probabilmente recupera tutti gli ordini e poi distinguiamo gli ordini della coppia collegata con altri ordini

usando questa linea:

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

Giusto?

Con Stop Loss fisso mi riferisco al fatto che lo stop loss "iniziale" non si sposterà.

Saluti

 
deVries:


cambia stile scrivendo il tuo codice !!!!

linee vuote non necessarie


È una questione di opinioni, ma è generalmente considerato una buona pratica usare linee vuote (nei posti logici) quando si codifica. In ogni caso, non è davvero qualcosa che vale la pena sottolineare in altri codici in questo modo.

Se guardate il codice sorgente di Apache o del Kernel Linux (due progetti Open molto collaborativi) vedrete un sacco di linee vuote.


SERVER WEB APACHE:

AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
                                                   void *struct_ptr,
                                                   const char *arg)
{
    int offset = (int)(long)cmd->info;

    *(const char **)((char *)struct_ptr + offset) = arg;

    return NULL;
}

KERNEL LINUX:


static int jz4740_musb_init(struct musb *musb)
{
 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 if (!musb->xceiv) {
 pr_err("HS UDC: no transceiver configured\n");
 return -ENODEV;
 }

 /* Silicon does not implement ConfigData register.
 * Set dyn_fifo to avoid reading EP config from hardware.
 */
 musb->dyn_fifo = true;

 musb->isr = jz4740_musb_interrupt;

 return 0;
} 
 
Arav007:


a volte una linea vuota può essere comoda, ma non se la si fa dopo ogni linea scritta

anche il posto delle parentesi graffe rende più facile leggere il codice


dal MACD per usarlo come esempio

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }

ora vedi come confrontare il grafico del prezzo della valuta con l'orderopenprice del tuo trade

devi fare qualcosa del genere anche tu...

 
ydrol:

È una questione di opinioni, ma è generalmente considerato una buona pratica usare linee vuote (nei posti logici) quando si codifica. In ogni caso, non è davvero qualcosa che vale la pena sottolineare in altri codici in questo modo.

Se guardate il codice sorgente di Apache o del Kernel Linux (due progetti Open molto collaborativi) vedrete un sacco di linee vuote.


SERVER WEB APACHE:

KERNEL LINUX:

il punto è che con ogni linea scritta una linea vuota

diventa difficile leggere codici grandi che si continua a scorrere su/giù per leggere il codice

e quando non c'è nemmeno la logica di mettere { } allora diventa ancora più difficile trovare i bug

 
deVries:


dal MACD per usarlo come esempio

ora vedi come confrontare il grafico del prezzo della valuta con l'orderopenprice del tuo trade

devi fare qualcosa del genere anche tu...


Ho questa funzione di confronto dei prezzi

Come posso confrontare il 'Commento' dell'ordine selezionato di OrderSend() come il Magic Number dell'ordine selezionato?

Come se volessi verificare se OrderComment() corrisponde al commento dell'ordine selezionato?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Ora posso confrontare in questo modo:

OrderComment()=="Sell Order" // ?

Posso anche definire il commento della funzione OrderSend() in questo modo:

string comment_sell="Vendi Ordine";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

E poi confrontare:

if (OrderComment()=="comment_sell") // ?

Per quanto riguarda

 
Arav007:


Ho questa funzione di confronto dei prezzi.

Come posso confrontare il 'Commento' dell'ordine selezionato di OrderSend() come il Numero Magico dell'ordine selezionato?

Come se volessi verificare se OrderComment() corrisponde al commento dell'ordine selezionato?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Ora posso confrontare in questo modo:

OrderComment()=="Sell Order" // ?

Posso anche definire il commento della funzione OrderSend() in questo modo:

string comment_sell="Vendi Ordine";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

E poi confrontare:

if (OrderComment()=="comment_sell") // ?

Saluti


OrderComment può essere sovrascritto dal tuo broker

che vuoi... Ora, secondo le mie esigenze, quando il prezzo sarà di 7 pip [103.603] in profitto, lo Stop Loss di

1° e 2° trade diventeranno 1 pip di profitto [103.543] e lo Stop Loss del 3° trade rimarrà a 103.386.

fare extern int BreakEven = 7

         if(OrderType()==OP_BUY)
           {

            //--- check for BreakEven
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>Point(*10)*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point(*10),OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }

(* 10 ) correzione a 5 cifre broker per ottenere pipvalue

Motivazione: