Announcement

Collapse
No announcement yet.

TP in percentuale dello SL

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

    TP in percentuale dello SL

    Ciao a tutti ragazzi allora volevo un vostro consiglio ho fatto questa funzione che dovrebbe settare il TP su una percentuale dello SL:
    PHP Code:

    double TakeProfitInPercentuale
    (double PercentualeDiRischiobool BuySellint stoploss)
      {
       
    double TakeProfit,ValoreTP,ValoreTick,Coefficiente

       
    Coef=(stoploss*PercentualeDiRischio/100);

       if(
    Digits%2==0)
          
    ValoreTick=MarketInfo(Symbol(),MODE_TICKVALUE)/MarketInfo(Symbol(),MODE_TICKSIZE)/10;
       else
          
    ValoreTick=MarketInfo(Symbol(),MODE_TICKVALUE)/MarketInfo(Symbol(),MODE_TICKSIZE);

       
    ValoreTP=TakeProfit*ValoreTick;

       if ( 
    BuySell ==true )//buy
           
    TakeProfit Bid ValoreTP

       
    if (BuySell ==false)//sell
          
    TakeProfit Ask ValoreTP 

       
    return(NormalizeDouble(TakeProfit,MarketInfo(Symbol,MODE_TICKVALUE));
      } 
    esempio entrata al valore "x" SL glelo passo io (già moltiplicato * point) dopo detto ciò la funzione mi calcolerà la % dello stop e lo somma/sottrae al prezzo di entrata e setta il TP l'idea è questa,
    Nel calcolo del TP devo aggiungere * p tipo:
    PHP Code:
       if ( BuySell ==true )//buy
           
    TakeProfit Bid ValoreTP *Point

       
    if (BuySell ==false)//sell
          
    TakeProfit Ask ValoreTP Point

       
    return(NormalizeDouble(TakeProfit,MarketInfo(Symbol,MODE_TICKVALUE));
      } 
    nel return ve bene il NormalizeDouble vero?

    Ho la sensazioni che manchi qualcosa e che si possa ottimizzare di +?
    avete consigli?
    Vi tingrazio

    #2
    Ho sistemato cosi la funzione che dovrebbe calcolarmi la percentuale(Percentage) che gli do in input sulla cifra che gli passo (diff)

    PHP Code:
    TPBuy =Bid TakePercentage(PercentualeTake,SLBuy) * p;


    double TakePercentage(double Percentagedouble diff)
    {

    double PointValue,TP;
    diff=NormalizeDouble(diffDigits);
    TP= (diff Percentage 100)/(MarketInfo(Symbol(),MODE_TICKVALUE)*diff*MathPow10,MarketInfo(Symbol(),MODE_DIGITS)));;
    return 
    NormalizeDouble(TP,Digts); 
    il problema è queso nonostante nep return faccio un "Normalize......" mi restituisce una cifra con 7 decimali anche se Digts vale 5, dove sbaglio?

    Comment


      #3
      NormalizeDouble arrotonda il numero a digits cifre dopo la virgola

      double NormalizeDouble(
      double value, // normalized number
      int digits // number of digits after decimal point
      );


      in pratica la variabile che userai per i calcoli sarà arrotondata a digits cifre dopo la virgola.


      Invece, se vuoi STAMPARE il numero va usata la funzione DoubleToStr
      che restituisce la stringa del numero arrotondata a digits cifre dopo la virgola

      string DoubleToStr(
      double value, // value
      int digits // precision
      );


      https://docs.mql4.com/convert/doubletostr
      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


        #4
        Ok, grazie mille, ora non mi torna una cosa, questa riga

        PHP Code:
        Print("Buy" "\nentrata: " NormalizeDouble(Ask,Digits)+ "\nSL Buy" SLBuy "\nTake Profit:"+DoubleToString(TPBuy,Digits)+"\nStopLevel " dStopLevel +"\nCalcola Size " calcola); 
        mi "stamapa" questi dati:"

        2020.04.15 09:35:06.628 2018.10.04 19:04:51 BreakinNew_v1 GBPUSD,M15: Buy
        entrata: 1.30115
        SL Buy1.29882
        Take Profit:1.30113
        StopLevel 0
        Calcola Size 0.67
        "
        Però nel diaro l'ordine viene piazzato cosi: "2020.04.15 09:35:06.628 2018.10.04 19:04:51 BreakinNew_v1 GBPUSD,M15: open #1 buy 0.67 GBPUSD at 1.30115 sl: 1.29882 tp: 2.60226 ok"

        guardate la differenza di valore del Tp? perchè?

        Comment


          #5
          stai stampando il take profit usando una tua variabile TPBuy.... che ci scrivi dentro TPBuy ?

          ricorda sempre che
          - quando apri un trade Buy l'apertura è sull'ASK, mentre il takeprofit e stoploss vengono piazzati sul Bid
          - viceversa per un trade Sell l'apertura è sul Bid, mentre il takeprofit e stoploss vengono piazzati sull'ASK
          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


            #6
            Ho notato pure che non mi piazza lo stop dove gli dico......perchè............. sto uscendo di testa!!
            PHP Code:
                     SLBuy =Low[0] - dStopLevel StopLoss p;
                     
            TPBuy =Bid TakePercentage(PercentualeTake,SLBuy) * p;
                     
            double calcolaCalcolaSize(Rischio,SLBuy);//
                     
            Print("Buy" "\nentrata: " NormalizeDouble(Ask,Digits)+ "\nSL Buy" SLBuy "\nTake Profit:"+DoubleToString(TPBuy,Digits)+"\nStopLevel " dStopLevel +"\nCalcola Size " calcola);        
                     
            Comment("Buy" "\nentrata: " NormalizeDouble(Ask,Digits)+ "\nSL Buy" SLBuy "\nTake Profit:"+DoubleToString(TPBuy,Digits)+"\nStopLevel " dStopLevel +"\nCalcola Size " calcola);

                     
            bool ticket OrderSend(Symbol(),OP_BUY,CalcolaSize(Rischio,SLBuy),Ask,0,SLBuyBid TPBuy,"AndreEA",MagicNumber,0,Blue);
                     
            AllertoPerIlRialzo();
                     if(
            ticket == false)
                        Print(
            "Error modifying order!, error#"GetLastError());
                    } 

            Comment

            Working...
            X