I11L ハイパートレンドで走る傾向と平均逆転
I11Lハイパートレンド戦略は,複数のタイムフレームにわたるモメンタムスコアリングシステムを利用し,買いすぎのレベルとトレードアップトレンドを特定する.短期間の反トレンドブランスとモメンタムブレイクから利益を得ることを目的としています.
戦略 の 効果
主要な構成要素は以下のとおりです.
ロングは過売り回転で,スコアがクロスオーバーしたときに入ります.ショートも上昇傾向でスコアがクロスオーバーしたときに入ります.
トレーリングストップは利益を固定し,テイク・プロフィートはリスク/リターン倍数で終了します.
I11L システムの利点
このアプローチの主な利点は:
ダイナミック・スコア・システムでは,逆転とブレイクアウトの両方を取引するのに貴重な洞察を提供します.
潜在 的 な 弱み と 危険 性
しかし,いくつかの制限があります:
過去のパフォーマンスメトリックは,前向きにテストされていない場合,誤解を招く可能性があります.慎重な最適化とリスク管理が必要です.
キーチューニングパラメータ
オプティマイズできる重要なインプット:
堅牢な戦略は,高値,下値,レンジ市場におけるパフォーマンスをバランスさせる.厳格なウォークフォワードテストは曲線フィッティングを防ぐ.
概要
I11Lハイパートレンドは,過剰売り回転と上向きのブレイクアウトの取引のための体系的なプロセスを提供しています.適切な構成とリスク管理により,このモメントアプローチは長期的に優位性を提供します.
/*backtest start: 2023-01-01 00:00:00 end: 2023-04-15 00:00:00 period: 8h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // strategy("I11L Hypertrend",overlay=false, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00) strategy.initial_capital=50000 tradingMode = input.string("Oversold or Trend", "Trading Mode", ["Oversold or Trend", "Always Buy"], tooltip="Choose the Trading Mode by trying Both in your Backtesting. I use it if one is far better then the other one.") invertStrategy = tradingMode == "Trend" ? true : false compoundingMode = input.bool(false,"Work with the total equity") useTSL = input.bool(true,"Use a trailing SL") useTP = input.bool(true,"Use a TP") scoreLookbackDistance = input.int(20, step=1,title="Lookbackdistance for the Score") scoreLoopCountTo = 20 leverage = input.float(1.0,"Leverage (x)",[20,10,5,2,1]) SL_Factor = 1 - input.float(3.0,"Risk Capital per Trade unleveraged (%)", minval=0.1, maxval=100, step=0.25) / 100 / leverage TPFactor = input.float(1.2, step=0.1) chooseDate = input.string(title="Select Date", defval="All available Records", options=["Start-2012","2012-Now","All available Records"],tooltip="Seperation works best for 8hr cfd markets, you might want to finetune your Settings in the past and see if the future results (2010 to now) are better then random") dateFrom = chooseDate == "Start-2012" ? timestamp("01 Jan 1970 00:00") : chooseDate == "2012-Now" ? timestamp("01 Jan 2012 00:00") : timestamp("01 Jan 1970 00:00") dateTo = chooseDate == "Start-2012" ? timestamp("31 Dec 2011 23:59") : chooseDate == "2012-Now" ? timestamp("31 Dec 2170 23:59") : timestamp("31 Dec 2170 23:59") inDateRange = (time >= dateFrom) and (time < dateTo) var disableAdditionalBuysThisDay = false var minuteOfLastSell = 0 if(dayofmonth != dayofmonth[1]) disableAdditionalBuysThisDay := false longStopPrice = 0.0 longStopPrice := if (strategy.position_size > 0) if(useTSL) math.max(high * SL_Factor, longStopPrice[1]) else strategy.position_avg_price*SL_Factor else 0 if(strategy.position_size != strategy.position_size[1]) disableAdditionalBuysThisDay := true //Trade Logic //isOversold SCORE = 0 loopCount = 1 for i=0 to scoreLoopCountTo trendLengthAdjusted = loopCount loopCount := loopCount + 1 if(ta.ema(close,trendLengthAdjusted) / ta.sma(close,trendLengthAdjusted) > 1) SCORE := SCORE + 1 SCORE_ema50 = ta.ema(SCORE,scoreLookbackDistance) SCORE_sma50 = ta.sma(SCORE,scoreLookbackDistance) isOversold = ta.crossover(SCORE_sma50 / SCORE_ema50,1.0) isTrend = ta.crossover(SCORE_ema50 / SCORE_sma50,1.0) isBuy = isTrend or isOversold or tradingMode == "Always Buy" if(isBuy and not(disableAdditionalBuysThisDay) and inDateRange) if(compoundingMode) strategy.entry("Buy", strategy.long, (strategy.equity / close) * leverage) else strategy.entry("Buy", strategy.long, (strategy.initial_capital / close) * leverage) if(strategy.position_size > 0) strategy.exit("TSL", "Buy", stop=longStopPrice) if(useTP) strategy.close("Buy", when=close > strategy.position_avg_price * (1 + (1 - SL_Factor) * TPFactor), comment="TP") findTrendOrOversold(i) => ta.ema(close,i) / ta.sma(close,i) plot(1 + 100 * (findTrendOrOversold(1) - 1),color = findTrendOrOversold(1) > 1 ? #6efa7b44 : #ff222244) plot(1 + 100 * (findTrendOrOversold(2) - 1),color = findTrendOrOversold(2) > 1 ? #73fa7a44 : #ff302244) plot(1 + 100 * (findTrendOrOversold(3) - 1),color = findTrendOrOversold(3) > 1 ? #78fb7944 : #ff3a2244) plot(1 + 100 * (findTrendOrOversold(4) - 1),color = findTrendOrOversold(4) > 1 ? #7cfb7844 : #ff432244) plot(1 + 100 * (findTrendOrOversold(5) - 1),color = findTrendOrOversold(5) > 1 ? #81fb7744 : #ff4b2244) plot(1 + 100 * (findTrendOrOversold(6) - 1),color = findTrendOrOversold(6) > 1 ? #85fc7644 : #ff522344) plot(1 + 100 * (findTrendOrOversold(7) - 1),color = findTrendOrOversold(7) > 1 ? #89fc7644 : #fe592444) plot(1 + 100 * (findTrendOrOversold(8) - 1),color = findTrendOrOversold(8) > 1 ? #8dfc7544 : #fe602544) plot(1 + 100 * (findTrendOrOversold(9) - 1),color = findTrendOrOversold(9) > 1 ? #91fc7444 : #fe662744) plot(1 + 100 * (findTrendOrOversold(10) - 1),color = findTrendOrOversold(10) > 1 ? #95fd7344 : #fe6b2944) plot(1 + 100 * (findTrendOrOversold(11) - 1),color = findTrendOrOversold(11) > 1 ? #99fd7344 : #fd712b44) plot(1 + 100 * (findTrendOrOversold(12) - 1),color = findTrendOrOversold(12) > 1 ? #9dfd7244 : #fd762d44) plot(1 + 100 * (findTrendOrOversold(13) - 1),color = findTrendOrOversold(13) > 1 ? #a1fd7144 : #fd7b3044) plot(1 + 100 * (findTrendOrOversold(14) - 1),color = findTrendOrOversold(14) > 1 ? #a4fe7144 : #fd803244) plot(1 + 100 * (findTrendOrOversold(15) - 1),color = findTrendOrOversold(15) > 1 ? #a8fe7044 : #fc853544) plot(1 + 100 * (findTrendOrOversold(16) - 1),color = findTrendOrOversold(16) > 1 ? #abfe7044 : #fc8a3944) plot(1 + 100 * (findTrendOrOversold(17) - 1),color = findTrendOrOversold(17) > 1 ? #affe6f44 : #fc8f3c44) plot(1 + 100 * (findTrendOrOversold(18) - 1),color = findTrendOrOversold(18) > 1 ? #b2ff6f44 : #fc933f44) plot(1 + 100 * (findTrendOrOversold(19) - 1),color = findTrendOrOversold(19) > 1 ? #b6ff6e44 : #fb984344) plot(1 + 100 * (findTrendOrOversold(20) - 1),color = findTrendOrOversold(20) > 1 ? #b9ff6e44 : #fb9c4744) plot(invertStrategy ? SCORE_ema50 / SCORE_sma50 : SCORE_sma50 / SCORE_ema50, color=(invertStrategy and isTrend) or (not(invertStrategy) and isOversold) ? color.green : color.gray, linewidth=2) plot(1,color=color.white)