process_orders_on_close
当设置为 true 时 , 会在信号出来后立即执行开关单. 到 false 时,会在信号出来的下一个k线开关单(价格是会在 开盘价 左右 浮动
strategy.entry
stop
strategy.entry函数中的stop参数实际上是用于创建一个停止限价单(Stop Limit Order),只是当设置了limit 时,停止挂单了而已, 而不是一个止损订单(Stop Loss Order)
停止限价单只在市场价格达到指定的价格时才会被触发。如果市场价格突然大幅度下跌或上涨,以至于跳过了指定价格,那么停止限价单将不会被激活。因此,停止限价单并不能像止损订单那样保证您的损失不会超过指定的止损价格
注意点
当前时间是 2023.5.25, tradingview
并不支持同时持有多单跟空单, 也就是说, 开多单时假设开空单, 那这相当于自动给多单进行平仓.
这里自行验证.
常用方法整理
计算当前持仓持仓收益(浮动盈亏)
tradeOpenPL() =>
sumProfit = 0.0
for tradeNo = 0 to strategy.opentrades - 1
sumProfit += strategy.opentrades.profit(tradeNo)
result = sumProfit
获取某个订单 id 的浮动盈亏
getProfitById(id) =>
float profit = 0
for i = 0 to strategy.opentrades - 1
if strategy.opentrades.entry_id(i) == id
profit := profit + strategy.opentrades.profit(i) //一个id 可能有多个 交易编号
profit
获取开仓均价(根据id)
avgOpenPositionPrice(direction) =>
float sumOpenPositionPrice = 0.0
float trade_sum = 0
for tradeNo = 0 to strategy.opentrades - 1
if str.contains(strategy.opentrades.entry_id(tradeNo) , direction)
sumOpenPositionPrice += strategy.opentrades.entry_price(tradeNo) * strategy.opentrades.size(tradeNo)
trade_sum += strategy.opentrades.size(tradeNo)
result = trade_sum == 0 ? 0 : nz(sumOpenPositionPrice / trade_sum)
plot(avgOpenPositionPrice("long")) //假设所有的自定义id 命名 都含有 "long"字符
获取总持仓量
getPositionSize() =>
float trade_sum_ = 0
for tradeNo = 0 to strategy.opentrades - 1
trade_sum_ += strategy.opentrades.size(tradeNo)
trade_sum_
我可以写tradingview
策略,pine 语言