English

## Calculate lotsize from money (USD)

8
question 2015.03.17 22:11 #

WHRoeder:
 question: What is DIR? +1 for a buy -1 for a sell
Never mind, the formula I tried to figure out doesn't seems to work too.
 352 GreenMoney 2015.03.17 22:40 #   If I am not wrong , the code in link you posted solves when you want to get lotsize from % of balance. The code I linked to does illustrate position sizing using percentage of balance.  But the main formula (lotsize = risk amount / stoploss value) is true for both percentage of balance and fixed risk amounts.My question is, how can I improve the formula and make it finally usable? Should I multiply stoploss with PointValue like you do? Would that be a solution?I can't answer your questions definitively because you haven't posted any of your code in which you attempt to "improve" the formula and "make it finally usable".  This is partially why I gave you just the main formula (lotsize = risk amount / stoploss value).  How you calculate both risk amount and stoploss value is up to you in your code (although, I caution you that calculating the stoploss value can be a bit tricky...and the subject of much debate on this site.).  If you attempt to code it and encounter problems, post your attempted code here and several of us can try to help.
 8 question 2015.03.17 22:47 #   "although, I caution you that calculating the stoploss value can be a bit tricky...and the subject of much debate on this site."Yes, plenty of opinions, topics and codes... That's why I asked for the solution, because I can't figure it out by myself. There's just too much of that everywhere and no solution. I didn't want to anyone to write an EA for me, I just wanted one function. What's wrong with that? If that's such a problem, sorry for bothering you. I tried that:  ```      double PointValue = MarketInfo(Symbol(), MODE_TICKVALUE) / (MarketInfo(Symbol(), MODE_TICKSIZE) / Point);       double Lotsize = Risk_USD/SLoss*PointValue;```
 352 GreenMoney 2015.03.18 03:50 #   Yes, plenty of opinions, topics and codes... That's why I asked for the solution, because I can't figure it out by myself. There's just too much of that everywhere and no solution. I understand.  There is allot of topics, conversations, and opinions regarding how to calculate lot size.  There is no easy answer...there are times where you have to wade through the minutiae just to find the right answer.  I tried that:```double PointValue = MarketInfo(Symbol(), MODE_TICKVALUE) / (MarketInfo(Symbol(), MODE_TICKSIZE) / Point); double Lotsize = Risk_USD/SLoss*PointValue;```Is your SLoss denominated in points or pips?  To use PointValue, as I've used in my equation, stoploss must be distance denominated in points.  So, let's say that PointValue is 1.0 (standard account with USD deposit currency on a EUR/USD chart) and your stoploss is 1000 points (100 pips) and your fixed risk amount is \$80.  The equation is: lotsize = 80 / (1000 * 1.0) Therefore, lotsize = 0.08 (that is 8 microlots on a standard account).That is why, using the code that I used in my equation, SLoss must be denominated in points, not pips.  (If you used pips, rather than points, the equation would be: lotsize = 80 / (100 * 1.0), which is 0.80 (8 minilots) and a 10 times larger position then you wanted. However, you can change the equation to use pips...I just found it easier to use points.)There is also a question of minimum and maximum lotsize and the lotstep.  The minimum and maximum lotsize are self-explanatory...your lotsize must be equal to or greater than the minimum and must be less than or equal to the maximum.  Lotstep determines the least significant digit for lotsize between the minimum and maximum.  For example, if the minimum lotsize is 0.10 and lotstep is 0.01, then you can use lotsizes 0.10, 0.11, 0.12, etc, but not 0.09.Review the code that I linked to to get an idea about minimum and maximum lotsize and lotstep.
 12985 WHRoeder 2015.03.18 13:19 #   question: "although, I caution you that calculating the stoploss value can be a bit tricky...and the subject of much debate on this site."`PointValue = MarketInfo(Symbol(), MODE_TICKVALUE) / (MarketInfo(Symbol(), MODE_TICKSIZE) / Point);`Had you bothered to look at my DeltaPerLot link you wouldn't have seen any /Point and you would have known why. Drop the /Point. On currencies Ticksize == point but on metals they don't. `  double Lotsize = Risk_USD/SLoss*PointValue;`We have no idea what SLoss is but it had better be a change in price, not pips or points.Account Balance * percent = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Note OOP-OSL includes the SPREAD) Look at the equation and your derivation again. Don't you want Risk_USD/ ( SLoss * PointValue ) or Risk_USD/SLoss / PointValue?
12985
WHRoeder 2015.03.18 19:31 #

1. Risk = change in price * DeltaValuePerLot * lots. So If you want the change per point multiply by point. If you want the change in pips, multiply by pips like my link showed
2.  "Why would you divide by PointValue???" RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot Do your algebra. divide by price change RISK / (OrderOpenPrice - OrderStopLoss)*DIR  =  OrderLots * DeltaPerlot Do your algebra. divide by delta RISK / (OrderOpenPrice - OrderStopLoss)*DIR  / DeltaPerlot  = OrderLots Do your algebra.check your units Risk / ( delta / deltaPerlot) = Risk/perlot = lots Does it make sense? The bigger the value per lot, the smaller the lots for the same risk.
3.  Risk_USD / (SLoss * PointValue). This was explicit in my code and inferred from my examples. Why would you divide by PointValue??? Risk_USD / (SLoss * PointValue) is dividing by PointValue Of course you MUST divide by PointValue. Your original post did NOT `double Lotsize = Risk_USD/SLoss*PointValue;`

4. Thirteen: I trade in the US, so unfortunately, I am restricted by law and CFTC rule from trading precious metals in my forex account.  Since I can't trade metals in my forex account, I generally don't code for them; and my code and functions reflect that fact!
FXCM is a US broker and allows metals Did you market watch -> right click -> show all?
5. and just because you can't (with your current broker) means you may not in the future (same or difference,) code it correctly and be done. Do you really want to have a known, waiting bug in your code?