如何在TradingView的Pine Script中截断订单合约数量的小数位
Pine Script 合约数量小数位截断实现方案
核心逻辑
要实现截断小数位而非四舍五入,核心思路是将原数值放大对应小数位的倍数后取整,再缩小回原倍数即可。
代码修改步骤
- 新增通用截断函数
// number:待处理数值,decimals:要保留的小数位数 truncate(number, decimals) => factor = math.pow(10, decimals) int(number * factor) / factor
- 下单前手动计算可开仓数量,调用截断函数处理后传入下单接口
你原有策略中设置的是固定850USDT的现金下单,因此可开仓数量为850 / 当前K线收盘价,将该值截断到3位小数后传入strategy.entry的qty参数即可。
修改后完整代码
strategy(title="IN USE [bch-usdt] [strat cash <850usd>] [close <sma 100>]", default_qty_type=strategy.cash, default_qty_value=850) // 新增截断函数 truncate(number, decimals) => factor = math.pow(10, decimals) int(number * factor) / factor angle(_src) => rad2degree=100/3.14159265359 //pi ang=rad2degree*atan((_src[0] - _src[1])/atr(14)) ma_slope=angle(sma(close, 100)) longCondition = crossover(sma(close, 1), sma(close, 100)) if (longCondition) stop_level = close*0.95 // 计算并截断下单数量到3位小数 trade_qty = truncate(strategy.default_qty_value / close, 3) strategy.entry("My Long Entry Id", strategy.long, qty=trade_qty) strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level) shortCondition = crossunder(sma(close, 1), sma(close, 100)) if (shortCondition) strategy.close("My Long Entry Id") plot(strategy.netprofit)
调整说明
如果需要修改保留的小数位数,只需调整truncate函数的第二个参数即可,例如要保留2位小数就改为truncate(strategy.default_qty_value / close, 2)。
内容的提问来源于stack exchange,提问作者Michael O'Brien
相关产品推荐
相关产品推荐

