Net profit in pips

Back to topics list To post a new topic, please log in or register
avatar
160
cashcube 2016.07.12 06:18
 

Hi I have this following code to count net profit in pips. But the code shows positive pips in negative & data is slightly different than original.

//----------------------------------    
   double profit = 0;
   for(int cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
         if(OrderSelect(cnt,SELECT_BY_POS, MODE_HISTORY))
         {
         if ( TimeToStr(TimeCurrent(),TIME_DATE) == TimeToStr(OrderCloseTime(),TIME_DATE) )
         {
            profit = profit + (OrderProfit() + OrderCommission() + OrderSwap())/GetPPP(OrderSymbol());
         }
         }
   }
   Alert("today's profit in pips is ",profit);
    

double GetPPP(string A)
{
   double B = (((MarketInfo(A,MODE_TICKSIZE)/MarketInfo(A,MODE_BID))* MarketInfo(A,MODE_LOTSIZE)) * MarketInfo(A,MODE_BID))/10; //For 5 Digit

   return(B); 
}

 

avatar
108
eddie 2016.07.12 09:26 #
 

Why are you adding commission and swap to your profit?

First check your code without calculating in pip.


avatar
164
drazen64 2016.07.12 09:43 #
 

Why don't you simply calculate difference between OrderClosePrice() and OrderOpenPrice()?

Note that you have to take care of sign depending on the type of the order (buy or sell). 

If you really need it, commission and swap can be approximated with point values, but those don't have anything to do with points because they are usually calculated based on the order lot size.


 

avatar
13009
WHRoeder 2016.07.12 16:23 #
 
  • You place the stop where it needs to be - where the reason for the trade is no longer valid. E.g. trading a support bounce the stop goes below the support.
  • Account Balance * percent/100 = RISK = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerlot + CommissionPerLot) (Note OOP-OSL includes the SPREAD)
  • Do NOT use TickValue by itself - DeltaPerlot
  • You must normalize lots properly and check against min and max.
  • You must also check FreeMargin to avoid stop out
  1. Your GetPPP is gibberish. Replace with DeltaPerLot and thus EquivalentPips = (OP+OC+OS) / OrderLots / DeltaPerLots / pips2dbl;
  2. Don't hard code numbers (/10)
    double pips2dbl = Digits%2==0 ? Point : 10*Point;

avatar
160
cashcube 2016.07.13 14:46 #
 
WHRoeder:
  1. Your GetPPP is gibberish. Replace with DeltaPerLot and thus EquivalentPips = (OP+OC+OS) / OrderLots / DeltaPerLots / pips2dbl;
  2. Don't hard code numbers (/10)

I did it in following way, But it showing zero divide error.

//----------------------------------    
   double profit = 0;
   for(int cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
         if(OrderSelect(cnt,SELECT_BY_POS, MODE_HISTORY))
         {
         if ( TimeToStr(TimeCurrent(),TIME_DATE) == TimeToStr(OrderCloseTime(),TIME_DATE) )
         {
            profit = profit + (OrderProfit() + OrderCommission() + OrderSwap())/OrderLots()/DeltaValuePerLot(OrderSymbol())/pips2dbl(OrderSymbol());
         }
         }
   }
   Alert("today's profit is ",profit);

//-----------------------------------------------------------    
double  DeltaValuePerLot(string pair){
       return(  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
//---------------------------------------------------------
 double pips2dbl( string A)
 { 
 return(MathMod(MarketInfo(A,MODE_DIGITS),2)==0 ? MarketInfo(A,MODE_POINT) : 10*MarketInfo(A,MODE_POINT));
 }

 

avatar
160
cashcube 2016.07.13 14:47 #
 
eddie:

Why are you adding commission and swap to your profit?

First check your code without calculating in pip.


I need to know about the net pips . Without calculating pips my previous code is working correctly.
avatar
13009
WHRoeder 2016.07.13 16:39 #
 
cashcube: I did it in following way, But it showing zero divide error.
  1. OrderSelect loop, filter by opened orders (OrderType <= OP_SELL) There are other things in history, that don't have a symbol.
  2. Print out your variables, and find out why.

avatar
160
cashcube 2016.07.14 10:24 #
 
WHRoeder:
cashcube: I did it in following way, But it showing zero divide error.
  1. OrderSelect loop, filter by opened orders (OrderType <= OP_SELL) There are other things in history, that don't have a symbol.
  2. Print out your variables, and find out why.

I added OrderType() == OP_BUY || OrderType() == OP_SELL

Now variables,

OrderProfit() + OrderCommission() + OrderSwap()  = 0.93

OrderLots() = 0.01

DeltaValuePerLot(OrderSymbol())  = 947.32

pips2dbl(OrderSymbol() = 0.01

Actual Net pl is +2.7 pips. but printf results shows  -9.81 along with zero divide error.

 

 

avatar
160
cashcube 2016.07.17 10:39 #
 
Any idea why it is not working?
Back to topics list  

To add comments, please log in or register