Announcement

Collapse
No announcement yet.

Funzione Heging se c'è perdita - Help

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Funzione Heging se c'è perdita - Help

    Ciao a tutti

    Premetto che sto cercando di imparare...

    Mi sono bloccato sulla creazione di una funzione. In pratica vorrei aprire un Heging con lottaggio pari al doppio della prima (senza pendenti) se c'è una perdita di x punti. Quando la posizione contraria viene aperta, la primaria rimane aperta e gestita normalmente...

    Mi hanno aiutato ad impostarla in questo modo ma non riesco ad andare avanti:

    void Heging(){

    for (int i = OrdersTotal() -1; i>= 0; i--){

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

    if ( OrderProfit() <0 && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){

    int LossPT= MathAbs((OrderOpenPrice - (OrderType == OP_BUY?Bid:Ask))/_Point)
    if( LossPT >= 100 * Point) { // OrderSend ..... SELL? mi sono bloccato qua. devo inserire un OrderSend?}

    }
    }
    }

    Grazie per l'aiuto

    #2
    io scriverei questa funzione
    PHP Code:
    double LossPT_MAX=20// perdita massima di pip di un trade, oltre il quale viene aperto un trade di segno opposto come hedging

    void Heging()
       {
       
    int ticket;
       
    double LossPT;

          for(
    int i OrdersTotal()-1i>= 0i--)
          {
             if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
             {
                if(
    OrderProfit()<&& OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                {
                   if(
    OrderType()==OP_BUY)
                   {
                      
    LossPT=((OrderOpenPrice()-Bid)/_Point);
                      if (
    LossPT>LossPT_MAXticket OrderSend(Symbol(), OP_SELL2*OrderLots(), NormalizeDouble(Bid,Digits), 000"Sell Hedging"MagicNumber0clrLime);
                   }
                   else if(
    OrderType()==OP_SELL)
                   {
                      
    LossPT=((Ask-OrderOpenPrice())/_Point);
                      if (
    LossPT>LossPT_MAXticket OrderSend(Symbol(), OP_BUY2*OrderLots(), NormalizeDouble(Ask,Digits), 000"Buy Hedging"MagicNumber0clrLime);
                   }
                }
             }
          }
       } 
    La vita non è un giro di prova, cogli l’attimo..
    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

    Comment


      #3
      Originally posted by umbertosm View Post
      io scriverei questa funzione
      PHP Code:
      double LossPT_MAX=20// perdita massima di pip di un trade, oltre il quale viene aperto un trade di segno opposto come hedging

      void Heging()
      {
      int ticket;
      double LossPT;

      for(
      int i OrdersTotal()-1i>= 0i--)
      {
      if(
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
      if(
      OrderProfit()<&& OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
      {
      if(
      OrderType()==OP_BUY)
      {
      LossPT=((OrderOpenPrice()-Bid)/_Point);
      if (
      LossPT>LossPT_MAXticket OrderSend(Symbol(), OP_SELL2*OrderLots(), NormalizeDouble(Bid,Digits), 000"Sell Hedging"MagicNumber0clrLime);
      }
      else if(
      OrderType()==OP_SELL)
      {
      LossPT=((Ask-OrderOpenPrice())/_Point);
      if (
      LossPT>LossPT_MAXticket OrderSend(Symbol(), OP_BUY2*OrderLots(), NormalizeDouble(Ask,Digits), 000"Buy Hedging"MagicNumber0clrLime);
      }
      }
      }
      }

      ciao boss.
      intanto grazie per avermi aiutato. sto cercando di imparare ma faccio fatica.

      riguardo la funzione sopra in pratica mi ero dimenticato di identificare il tipo di operazione con OrderType?
      Poi: il ticket non deve essere uguale a quello della prima operazione giusto? es: se operazione primaria è buy ed è identificata con ticket, la secondaria deve essere identificata con ticket1?

      scusa mi sono dimenticato di domandarti dove va inserita. cioè: basta inserirla solo nella ontick? magari posso fare una booleana per attivarla a piacere:

      extern bool AttivaHeging = true;

      Ontick(){

      if (AttivaHeging) Heging();

      }

      Comment


        #4
        Originally posted by nexus View Post
        Poi: il ticket non deve essere uguale a quello della prima operazione giusto? es: se operazione primaria è buy ed è identificata con ticket, la secondaria deve essere identificata con ticket1?
        ciao, si il ticket è soltanto il numero del nuovo ordine che apri, se apri un buy come hedging del sell perdente, ticket è il numero di questo nuovo ordine.
        se apri un sell come hedging del buy perdente, il ticket è il numero di questo nuovo ordine.
        Del ticket poi ne fai quel che vuoi, io l'ho solo messo lì, poi cosa farci è decisione tua, scrivendo altre linee di codice.


        Originally posted by nexus View Post
        mi sono dimenticato di domandarti dove va inserita. cioè: basta inserirla solo nella ontick? magari posso fare una booleana per attivarla a piacere:
        la definizione delle funzioni va messa al di fuori della OnTick() e poi la funzione va richiamata dentro la OnTick(), come hai scritto:

        extern bool AttivaHeging = true;

        Ontick(){

        if (AttivaHeging) Heging();


        Ma se mi fai queste domande vuol dire che stai correndo troppo.
        Con Metaquote language si comincia pian piano con gli script e poi dopo con gli EA (e infine per ultimo con gli indicatori che sono i più tosti a codificare).

        Io ho iniziato a studiare leggendo due volte il manuale, anni fa: https://book.mql4.com/
        quando hai finito di studiarlo, puoi leggere le novità del linguaggio qui: le variazioni al linguaggio dopo il 2014

        Aiuta molto anche la MQL4 Reference (dal MetaEditor : menu HELP - MQL4 Reference)

        La vita non è un giro di prova, cogli l’attimo..
        Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

        Comment


          #5
          Originally posted by umbertosm View Post
          ciao, si il ticket è soltanto il numero del nuovo ordine che apri, se apri un buy come hedging del sell perdente, ticket è il numero di questo nuovo ordine.
          se apri un sell come hedging del buy perdente, il ticket è il numero di questo nuovo ordine.
          Del ticket poi ne fai quel che vuoi, io l'ho solo messo lì, poi cosa farci è decisione tua, scrivendo altre linee di codice.



          la definizione delle funzioni va messa al di fuori della OnTick() e poi la funzione va richiamata dentro la OnTick(), come hai scritto:

          extern bool AttivaHeging = true;

          Ontick(){

          if (AttivaHeging) Heging();


          Ma se mi fai queste domande vuol dire che stai correndo troppo.
          Con Metaquote language si comincia pian piano con gli script e poi dopo con gli EA (e infine per ultimo con gli indicatori che sono i più tosti a codificare).

          Io ho iniziato a studiare leggendo due volte il manuale, anni fa: https://book.mql4.com/
          quando hai finito di studiarlo, puoi leggere le novità del linguaggio qui: le variazioni al linguaggio dopo il 2014

          Aiuta molto anche la MQL4 Reference (dal MetaEditor : menu HELP - MQL4 Reference)
          Riguardo l'apprendimento so soltanto alcune cose basilari e sto cercando di imparare al meglio. aimè non ho nessuno che mi segue, quindi devo cercare di arrangiarmi come posso ed eventualmente contare su qualche anima pia, come te ed altri, che mi aiuta in qualche modo. il fatto della funzione in se adesso l'ho capita.
          diciamo che prima vorrei capire la logica che sta dietro una funzione per poi applicarla con i metodi più semplici possibili. perchè se si fa copia e incolla non si impara null.
          ho provato a domandare qua sperando appunto in un aiuto, cose che da altre parti fanno e metà. io so un po cocciuto e prima che capisco una cosa ce ne vuole
          quindi prima posto quello che intendo fare, funzione etc... poi se è sbagliato spero in una correzione così capisco dove sbaglio.

          riguardo la domanda nell'ontick so come si procede ma a volte ho bisogno di qualche conferma. forse sbaglio.

          ...
          Aiuta molto anche la MQL4 Reference (dal MetaEditor : menu HELP - MQL4 Reference)
          concordo con te ma ci sono esempi difficili per me. ho capito di più come hai scritto te che con la guida
          ...

          Originally posted by umbertosm View Post
          ciao, si il ticket è soltanto il numero del nuovo ordine che apri, se apri un buy come hedging del sell perdente, ticket è il numero di questo nuovo ordine.
          se apri un sell come hedging del buy perdente, il ticket è il numero di questo nuovo ordine.
          Del ticket poi ne fai quel che vuoi, io l'ho solo messo lì, poi cosa farci è decisione tua, scrivendo altre linee di codice.
          ok. l'operazione primaria deve stare sempre aperta e gestita normalmente con SL, TP, etc... quindi in quel caso, se vado in perdita di x pip si aprirà una seconda operazione senza chiudere subito la prima.spero di essermi spiegato bene.

          Comment

          Working...
          X