基均线回环策略


创建日期: 2023-11-06 16:46:45 最后修改: 2023-11-06 16:46:45
复制: 0 点击次数: 682
avatar of ChaoZhang ChaoZhang
1
关注
1617
关注者

基均线回环策略

概述

基均线回环策略利用Ichimoku云图指标中的基均线(Kijun Sen),根据价格与基均线的交叉做多做空,属于趋势跟随策略。该策略通过基均线的回环来捕捉趋势的转折点,具有趋势捕捉能力强、回撤可控等优势。

策略原理

基均线回环策略使用Ichimoku云图的基均线(Kijun Sen)作为决策的基准线。基均线是根据一定周期内的最高价和最低价计算出的平均线。当价格从基均线下方上穿时,做多;当价格从基均线上方下穿时,做空。这样,就利用基均线的回环来判断价格趋势的转折点,实现趋势跟随。

具体来说,策略通过Base Long和Base Short两个条件判断基均线的回环。Base Long条件为开盘价低于基均线且收盘价高于基均线,表示基均线上穿;Base Short条件为开盘价高于基均线且收盘价低于基均线,表示基均线下穿。当触发Base Long时,做多入场;当触发Base Short时,做空入场。平仓条件则为价格重新跨过基均线,如价格跌破基均线则平多单,价格涨破基均线则平空单。

这样,策略就利用基均线的回环来捕捉价格趋势的转折点,实现了趋势跟随。

优势分析

基均线回环策略具有以下优势:

  1. 捕捉趋势转折能力强。基均线能很好地反映价格趋势,其回环代表价格趋势的转折,策略能及时捕捉转折点,实现趋势跟随。

  2. 回撤风险可控。策略通过基均线来限制回撤范围,比简单移动平均线策略更可控回撤风险。

  3. 实现简单。该策略仅需要基均线一个指标,逻辑简单明了,易于实现。

  4. 适用范围广。可应用于不同周期和各种主流交易品种,适用面较广。

  5. 数据需求量小。该策略仅需要价格数据,不需要大量指标计算,数据需求量小。

风险分析

基均线回环策略也存在以下风险:

  1. 容易产生过多交易信号。基均线存在频繁回环的情况,会导致过于频繁交易,增加交易费用和滑点损失。

  2. 回撤控制能力有限。基均线能一定程度控制回撤范围,但在价格剧烈波动时,回撤可能依然较大。

  3. 容易产生错误信号。基均线近期内频繁上下穿越时,会产生错误信号,入场方向与趋势不符。

  4. 效果与品种相关性较大。不同品种基均线运行效果差异较大,需要针对品种调整参数。

  5. 仅考虑单一指标。基于单一指标设计,容易受到指标失效的影响。

对应解决方法:

  1. 优化参数,降低交易频率。

  2. 增加止损止盈策略,进一步控制回撤。

  3. 加入过滤器,避免错误信号。

  4. 针对品种调整参数设置。

  5. 结合多个指标进行决策。

优化方向

基均线回环策略可从以下方面进行优化:

  1. 加强趋势判断能力。可引入其他趋势判断指标,如MACD,布林线等,避免基于单一指标出现错误信号。

  2. 优化参数设置。可通过调整基均线参数,平衡获利速度和胜率。也可以测试不同止损止盈策略。

  3. 引入交易量特征。根据交易量情况过滤信号,避免不合理信号。

  4. 多品种通用参数。通过机器学习等方法,获得不同品种通用的参数范围,减少人工调参工作。

  5. 优化入场时机。可引入其他指标判断力度,选择力度较强的时机入场。

  6. 优化止损策略。进一步优化止损策略,在保证胜率的前提下尽量减少不必要止损。

  7. 引入风险管理机制。根据不同市场环境调整仓位和止损策略,主动控制风险。

总结

基均线回环策略利用基均线的回环判断价格趋势,具有捕捉趋势转折、回撤可控等优势。但也存在产生错误信号、回撤控制有限等风险。未来可从优化参数设置、加入辅助判断指标等方面进行改进,使策略更稳健可靠。总体来说,基均线策略较简单实用,适当优化后可成为量化交易的基础策略之一。

策略源码
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Master VP","MVP",true)
        
//INDICATOR---------------------------------------------------------------------    
    //Average True Range (1. RISK)
atr_period = input(14, "Average True Range Period")
atr = atr(atr_period)

    //Ichimoku Cloud - Kijun Sen (2. BASELINE)
ks_period = input(20, "Kijun Sen Period")
kijun_sen = (highest(high, ks_period) + lowest(low,ks_period))/2
base_long = open < kijun_sen and close > kijun_sen
base_short = open > kijun_sen and close < kijun_sen

//TRADE LOGIC-------------------------------------------------------------------
    //Long Entry
    //if -> WPR crosses below -39 AND MACD line is less than signal line
l_en = base_long
    //Long Exit
    //if -> WPR crosses above -14
l_ex = close < kijun_sen
    //Short Entry
    //if -> WPR crosses above -39 AND MACD line is greater than signal line
s_en = base_short
    //Short Exit
    //if -> WPR crosses under -14
s_ex = close > kijun_sen
strategy.initial_capital = 50000
//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(4,"Risk %")/100           //risk % per trade
equity_protector = input(30,"Equity Protection %")/100  //equity protection %
stop = atr*100000*input(1.5,"Average True Range multiplier")    //Stop level
target = input(100, "Target TP in Points")  //TP level
    //Calculate current DD and determine if stopout is necessary
equity_stopout = false
if(floating<0 and abs(floating/balance)>equity_protector)
    equity_stopout := true
    
    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000            //Set min. lot size

//TRADE EXECUTION---------------------------------------------------------------
strategy.close_all(equity_stopout)      //Close all trades w/equity protector
is_open = strategy.opentrades > 0

if true
    strategy.entry("l_en",true,oca_name="a",when=l_en and not is_open)  //Long entry
    strategy.entry("s_en",false,oca_name="a",when=s_en and not is_open) //Short entry
    
    strategy.exit("S/L","l_en",loss=stop, profit=target)      //Long exit (stop loss)
    strategy.close("l_en",when=l_ex)            //Long exit (exit condition)
    strategy.exit("S/L","s_en",loss=stop, profit=target)      //Short exit (stop loss)
    strategy.close("s_en",when=s_ex)            //Short exit (exit condition)
    
//PLOTTING----------------------------------------------------------------------
plot(kijun_sen,"Kijun-Sen",color.blue,2)