Pine Script 5策略问题:sell_condition1b卖出后需等10根K线再买入
交易策略:sell_condition1b卖出后等待10根K线再买入的实现
问题背景
原始策略代码:
if buy_condition1 strategy.entry('.', strategy.long) if sell_condition1a strategy.close('.') if sell_condition1b strategy.close('.')
需求:当通过sell_condition1b条件卖出后,需等待至少10根K线才能执行下一次买入订单。
用户尝试的代码(未生效,sell_condition2卖出后立即出现买入订单):
var bool inBuy1 = false var bool inBuy1x = false var bool can_buy = true var int bars_since_sell = na if not na(bars_since_sell) bars_since_sell := bars_since_sell + 1 if bars_since_sell >= 10 can_buy := true if buy_condition1 and can_buy if buy_condition1a and not B strategy.entry('.', strategy.long) inBuy1 := true can_buy := false if buy_condition1b and conditionX and B strategy.entry('.', strategy.long) inBuy1 := true can_buy := false if sell_condition1a and not inBuy1x strategy.close('.') inBuy1 := false can_buy := true if buy_condition2 and can_buy strategy.entry('.', strategy.long) inBuy1x := true can_buy := false if sell_condition2 and inBuy1x strategy.close('.') inBuy1x := false can_buy := false bars_since_sell := 0
问题分析与修正方案
你的代码存在两个核心问题:
bars_since_sell仅在sell_condition2触发时重置,和需求针对sell_condition1b的逻辑不匹配can_buy的更新逻辑不严谨,未在非等待状态下保持正确的开关状态
以下是修正后的代码,核心逻辑聚焦sell_condition1b的卖出后等待:
// 初始化状态变量 var bool in_position = false var int bars_since_sell_1b = na // 更新卖出后的K线计数 if not na(bars_since_sell_1b) bars_since_sell_1b := bars_since_sell_1b + 1 // 判断是否允许买入:无等待需求 或 已满足10根K线等待 can_buy = na(bars_since_sell_1b) or bars_since_sell_1b >= 10 if buy_condition1 and can_buy and not in_position strategy.entry('.', strategy.long) in_position := true bars_since_sell_1b := na // 买入后重置等待计数 // 卖出条件1a:触发后不限制后续买入 if sell_condition1a and in_position strategy.close('.') in_position := false // 卖出条件1b:触发后开始计数,限制后续买入 if sell_condition1b and in_position strategy.close('.') in_position := false bars_since_sell_1b := 0 // 卖出时初始化计数为0
关键逻辑说明
bars_since_sell_1b仅在sell_condition1b卖出时被设为0,之后每根K线自动累加can_buy通过判断bars_since_sell_1b状态,决定是否开放买入权限- 成功买入后立即重置
bars_since_sell_1b,消除等待限制
内容的提问来源于stack exchange,提问作者NqHai
相关产品推荐
相关产品推荐

