Library "strategy" Library containing few key calculations for strategy involving leveraged limit and stop orders
getQty(entry, stop, riskPercentage) calculate qty and leverage based on entry and stop price for given risk percentage. Parameters: entry: Entry Price stop: Stop Price riskPercentage: risk percentage per trade Returns: [quantity, leverage] - Quantity based on the risk and calculated leverage on position including existing positions
bracketOrder(entry, stop, target, maxLeverage, isLimitOrder, riskPercentage) Calculates position size based on risk and creates bracket orders for given entry/stop/target Parameters: entry: Entry Price stop: Stop Price target: Target Price maxLeverage: Maximum leverage allowed isLimitOrder: if true, places limit order for entry, else places stop order. riskPercentage: risk percentage per trade Returns: orderPlaced - true if orders successfully placed, false otherwise.
order(entry, stop, maxLeverage, isLimitOrder, riskPercentage) Calculates position size based on risk and creates order for given entry/stop Parameters: entry: Entry Price stop: Stop Price maxLeverage: Maximum leverage allowed isLimitOrder: if true, places limit order for entry, else places stop order. riskPercentage: risk percentage per trade Returns: orderPlaced - true if orders successfully placed, false otherwise.
릴리즈 노트
⋅
v2
Added: bracketOrderWithoutLeverage(id, entry, stop, target, isLimitOrder) Creates bracket orders for given entry/stop/target without leverage and qty calculation. (Uses the values from strategy definition) Parameters: id entry: Entry Price stop: Stop Price target: Target Price isLimitOrder: if true, places limit order for entry, else places stop order. Returns: orderPlaced - true if orders successfully placed, false otherwise.
릴리즈 노트
⋅
v3
릴리즈 노트
⋅
v4
Updated: getQty(entry, stop, riskAmount, riskType) calculate qty and leverage based on entry and stop price for given risk percentage. Parameters: entry: Entry Price stop: Stop Price riskAmount: risk percentage per trade or risk cash per trade riskType: Can be either trategy.percent_of_equity or strategy.cash Returns: [quantity, leverage] - Quantity based on the risk and calculated leverage on position including existing positions
bracketOrder(id, entry, stop, target, maxLeverage, isLimitOrder, riskAmount, riskType) Calculates position size based on risk and creates bracket orders for given entry/stop/target Parameters: id entry: Entry Price stop: Stop Price target: Target Price maxLeverage: Maximum leverage allowed isLimitOrder: if true, places limit order for entry, else places stop order. riskAmount: risk percentage per trade or risk cash per trade riskType: Can be either trategy.percent_of_equity or strategy.cash Returns: orderPlaced - true if orders successfully placed, false otherwise.
order(id, entry, stop, maxLeverage, isLimitOrder, riskAmount, riskType) Calculates position size based on risk and creates order for given entry/stop Parameters: id entry: Entry Price stop: Stop Price maxLeverage: Maximum leverage allowed isLimitOrder: if true, places limit order for entry, else places stop order. riskAmount: risk percentage per trade or risk cash per trade riskType: Can be either trategy.percent_of_equity or strategy.cash Returns: orderPlaced - true if orders successfully placed, false otherwise.
릴리즈 노트
⋅
v5
Corrected calculation logic for newPosition in getQty function. Thanks to @serkany88 for highlighting
Can you refer to a reference strategy where you have used this library?
serkany88
⋅
Riskpercentage doesn't give similar results compared to Tradingview's own strategy library even with 1 leverage. What could be the reason?
Trendoscope
⋅
@serkany88, risk calculation logic may be different. Haven't checked tradingview library. Compare and check.
serkany88
⋅
@HeWhoMustNotBeNamed, I think there is a problem with the code or am i wrong. Aren't you supposed to do leverage = math.ceil(newPosition*strategy.position_avg_price/strategy.equity) while calculating the leverage since quantity has to be converted to quote currency first before division?
Trendoscope
⋅
@serkany88, is already covered. Check how newPosition is calculated.