高低比率策略
本策略的核心在于运用技术指标结合基本规则进行交易决策,旨在通过高低比率策略捕捉市场的超买和超卖信号,以此指导交易行为。
一、交易逻辑思路
1. 指标计算:
- 本策略首先通过EMA(指数移动平均)计算快线和慢线的值,快线EMA反映了短期价格变动的趋势,慢线EMA则显示了长期价格变动的走向。这两者之间的交叉点被视为买卖信号的一种参考。
- 接着,策略引入了价格变动比率(CHGRATIO),该比率是通过计算平均净变动与平均总变动的比值得出的。这一指标能够量化价格变动的强度,辅助判断市场的强弱状态。
- 为了进一步衡量市场的超买或超卖状况,策略还计算了RSI值(相对强弱指数)。RSI值的范围在0到100之间,通过设定超买阈值(OVERBOUGHT)和超卖阈值(OVERSOLD),策略能够识别出市场可能存在的过度交易区域。
2. 买卖规则:
- 在制定买入规则时,策略要求快线EMA必须大于慢线EMA,这表示短期价格走势强于长期趋势。同时,RSI值需低于超买阈值,表明市场尚未达到过度买入的状态。此外,当前高价还需高于前一日的高价,以确保买入时机处于上升趋势中。
- 卖出规则则要求快线EMA小于慢线EMA,意味着短期价格走势弱于长期趋势。RSI值需高于超卖阈值,显示市场已处于过度卖出状态。当前低价还需低于前一日低价,以确保卖出时机处于下降趋势中。
3. 平仓规则:
- 当当前价格低于设定的退出低位带(EXITLOBAND)时,无论之前的持仓状态如何,策略都会指示平仓卖出。这是为了防止损失进一步扩大。
- 相反,当当前价格高于设定的退出高位带(EXITHIBAND)时,策略会指示平仓买入。这是为了锁定已有的利润。
4. 空闲与过滤:
- 如果最后的离市利润大于等于零,策略将进入空闲状态,不执行任何交易操作。这有助于保护已实现的盈利。
- 此外,策略还启用了自动过滤功能,以排除不符合交易条件的市场情况,减少不必要的交易次数。
二、策略特点
1. 灵活性:通过设定不同的参数值(如快线、慢线、平均长度等),用户可以根据自己的交易风格和风险承受能力调整策略的敏感度。
2. 综合性:策略结合了多种技术指标和交易规则,提高了决策的准确性和可靠性。
3. 风险控制:通过设定明确的买卖和平仓规则,以及空闲和过滤机制,策略有助于控制交易过程中的风险和潜在损失。
4. 适应性:该策略适用于多种市场环境,包括趋势市、震荡市等,具有较强的适应性。
策略思维导图:
策略代码解释:
// 定义变量并初始化
VARIABLE:NETCHGAVG:=0, TOTCHGAVG:=0;
// 定义快线长度
FASTLENGTH:=11;
// 定义慢线长度
SLOWLENGTH:=21;
// 定义平均长度
LENGTH:=9;
// 定义超卖阈值
OVERSOLD:=30;
// 定义超买阈值
OVERBOUGHT:=70;
// 计算快线EMA值
AVGVALUE1 : EMA(CLOSE,FASTLENGTH);
// 计算慢线EMA值
AVGVALUE2 : EMA(CLOSE,SLOWLENGTH);
// 计算平滑因子
SF := 1 / LENGTH;
// 计算价格变动
CHANGE := CLOSE - REF(CLOSE,1);
// 如果当前柱位置小于等于LENGTH
IF BARPOS <= LENGTH THEN
BEGIN
// 计算平均净变动
NETCHGAVG:=(CLOSE-VALUEWHEN(BARPOS=1,CLOSE)) / BARPOS;
// 计算平均总变动
TOTCHGAVG:MA(ABS(CLOSE - REF(CLOSE,1)),BARPOS);
END
// 如果当前柱位置大于LENGTH
IF BARPOS > LENGTH THEN
BEGIN
// 更新平均净变动
NETCHGAVG:REF(NETCHGAVG,1) + SF * (CHANGE - REF(NETCHGAVG,1));
// 更新平均总变动
TOTCHGAVG:REF(TOTCHGAVG,1)+ SF * (ABS(CHANGE) - REF(TOTCHGAVG,1));
END
// 定义新的变量存储平均净变动和平均总变动
NETCHGAVG1:=NETCHGAVG;
TOTCHGAVG1:=TOTCHGAVG;
// 计算变动比率
CHGRATIO:=NETCHGAVG / TOTCHGAVG;
// 计算RSI值
RSIVALUE := 50 * (CHGRATIO + 1);
// 计算退出高位带
EXITHIBAND := HHV(HIGH,20);
// 计算退出低位带
EXITLOBAND := LLV(LOW,20);
// 如果快线EMA大于慢线EMA且RSI小于超买阈值且当前高价高于前一日高价,则买入
AVGVALUE1> AVGVALUE2 && RSIVALUE < OVERBOUGHT && HIGH >= REF(HIGH,1),BK;
// 如果快线EMA小于慢线EMA且RSI大于超卖阈值且当前低价低于前一日低价,则卖出
AVGVALUE1< AVGVALUE2 && RSIVALUE > OVERSOLD && LOW <= REF(LOW,1),SK;
// 如果当前低价低于退出低位带,则平仓卖出
LOW <= EXITLOBAND,SP;
// 如果当前高价高于退出高位带,则平仓买入
HIGH >= EXITHIBAND,BP;
// 如果最后离市利润大于等于0,则保持空闲
IDLE(LASTOFFSETPROFIT>=0);
// 启用自动过滤
AUTOFILTER;
策略代码(文华版):
VARIABLE:NETCHGAVG:=0,TOTCHGAVG:=0;
FASTLENGTH:=11;
SLOWLENGTH:=21;
LENGTH:=9;
OVERSOLD:=30;
OVERBOUGHT:=70;
AVGVALUE1 : EMA(CLOSE,FASTLENGTH);
AVGVALUE2 : EMA(CLOSE,SLOWLENGTH);
SF := 1 / LENGTH;
CHANGE := CLOSE - REF(CLOSE,1);
IF BARPOS <= LENGTH THEN
BEGIN
NETCHGAVG:(CLOSE-VALUEWHEN
(BARPOS=1,CLOSE)) / BARPOS;
TOTCHGAVG:MA(ABS(CLOSE -
REF(CLOSE,1)),BARPOS);
END
IF BARPOS > LENGTH THEN
BEGIN
NETCHGAVG:REF(NETCHGAVG,1)
+ SF * (CHANGE - REF(NETCHGAVG,1));
TOTCHGAVG:REF(TOTCHGAVG,1)+ SF
* (ABS(CHANGE) - REF(TOTCHGAVG,1));
END
NETCHGAVG1:NETCHGAVG;
TOTCHGAVG1:TOTCHGAVG;
CHGRATIO:NETCHGAVG / TOTCHGAVG;
RSIVALUE : 50 * (CHGRATIO + 1);
EXITHIBAND : HHV(HIGH,20);
EXITLOBAND : LLV(LOW,20);
AVGVALUE1> AVGVALUE2 && RSIVALUE < OVERBOUGHT && HIGH >= REF(HIGH,1),BK;
AVGVALUE1< AVGVALUE2 && RSIVALUE > OVERSOLD && LOW <= REF(LOW,1),SK;
LOW <= EXITLOBAND,SP;
HIGH >= EXITHIBAND,BP;
IDLE(LASTOFFSETPROFIT>=0);
AUTOFILTER;