
基均线回环策略利用Ichimoku云图指标中的基均线(Kijun Sen),根据价格与基均线的交叉做多做空,属于趋势跟随策略。该策略通过基均线的回环来捕捉趋势的转折点,具有趋势捕捉能力强、回撤可控等优势。
基均线回环策略使用Ichimoku云图的基均线(Kijun Sen)作为决策的基准线。基均线是根据一定周期内的最高价和最低价计算出的平均线。当价格从基均线下方上穿时,做多;当价格从基均线上方下穿时,做空。这样,就利用基均线的回环来判断价格趋势的转折点,实现趋势跟随。
具体来说,策略通过Base Long和Base Short两个条件判断基均线的回环。Base Long条件为开盘价低于基均线且收盘价高于基均线,表示基均线上穿;Base Short条件为开盘价高于基均线且收盘价低于基均线,表示基均线下穿。当触发Base Long时,做多入场;当触发Base Short时,做空入场。平仓条件则为价格重新跨过基均线,如价格跌破基均线则平多单,价格涨破基均线则平空单。
这样,策略就利用基均线的回环来捕捉价格趋势的转折点,实现了趋势跟随。
基均线回环策略具有以下优势:
捕捉趋势转折能力强。基均线能很好地反映价格趋势,其回环代表价格趋势的转折,策略能及时捕捉转折点,实现趋势跟随。
回撤风险可控。策略通过基均线来限制回撤范围,比简单移动平均线策略更可控回撤风险。
实现简单。该策略仅需要基均线一个指标,逻辑简单明了,易于实现。
适用范围广。可应用于不同周期和各种主流交易品种,适用面较广。
数据需求量小。该策略仅需要价格数据,不需要大量指标计算,数据需求量小。
基均线回环策略也存在以下风险:
容易产生过多交易信号。基均线存在频繁回环的情况,会导致过于频繁交易,增加交易费用和滑点损失。
回撤控制能力有限。基均线能一定程度控制回撤范围,但在价格剧烈波动时,回撤可能依然较大。
容易产生错误信号。基均线近期内频繁上下穿越时,会产生错误信号,入场方向与趋势不符。
效果与品种相关性较大。不同品种基均线运行效果差异较大,需要针对品种调整参数。
仅考虑单一指标。基于单一指标设计,容易受到指标失效的影响。
对应解决方法:
优化参数,降低交易频率。
增加止损止盈策略,进一步控制回撤。
加入过滤器,避免错误信号。
针对品种调整参数设置。
结合多个指标进行决策。
基均线回环策略可从以下方面进行优化:
加强趋势判断能力。可引入其他趋势判断指标,如MACD,布林线等,避免基于单一指标出现错误信号。
优化参数设置。可通过调整基均线参数,平衡获利速度和胜率。也可以测试不同止损止盈策略。
引入交易量特征。根据交易量情况过滤信号,避免不合理信号。
多品种通用参数。通过机器学习等方法,获得不同品种通用的参数范围,减少人工调参工作。
优化入场时机。可引入其他指标判断力度,选择力度较强的时机入场。
优化止损策略。进一步优化止损策略,在保证胜率的前提下尽量减少不必要止损。
引入风险管理机制。根据不同市场环境调整仓位和止损策略,主动控制风险。
基均线回环策略利用基均线的回环判断价格趋势,具有捕捉趋势转折、回撤可控等优势。但也存在产生错误信号、回撤控制有限等风险。未来可从优化参数设置、加入辅助判断指标等方面进行改进,使策略更稳健可靠。总体来说,基均线策略较简单实用,适当优化后可成为量化交易的基础策略之一。
/*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)