ブロークン・ハイ/ロー戦略は,前回のキャンドルスティックの高値や低値を超えた価格ブレイクを追跡するトレンドフォロー戦略である.トレンド方向を決定するために移動平均値を使用し,ストップ・ロストまたはトラッキング・ストップ・ロストで利益をロックするブレイクポイントに入力する.
この戦略によって決定される 入国・退出の主要な条件は次のとおりです.
この戦略は,偽のブレイクを避けるため,信号の信頼性を確保するために,第2回反転キャンドルに基づくフィルターも使用しています.
リスク管理対策:
この戦略は,次の側面で最適化できます.
Broken High/Low戦略は全体的に成熟したトレンドフォロー戦略である.補助判断のための移動平均の助けにより,一定のレベルのトレンドを捉えることができます.ストップ・ロストとトレーリング・ストップメカニズムも利益をロックするのに役立ちます.継続的なテストと最適化によって,この戦略のパラメータとパフォーマンスはより顕著になります.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity) useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy') trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy') fastMALength = input(5 , 'Fast MA length', group = 'Trend strength') fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength') slowMALength = input(10, 'Slow MA length', group = 'Trend strength') slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength') ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength') useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy') secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength') longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings') shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings') fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength) slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength) FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters') FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters') FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters') ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters') ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters') ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters') start=timestamp(FromYear,FromMonth,FromDay,00,00) finish=timestamp(ToYear,ToMonth,ToDay,23,59) window()=>time>=start and time<=finish?true:false afterStartDate = time >= start and time<=finish?true:false closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters') trailStopMA = ta.ema(close, trailStopMALength) isGreenCandle = close > open isRedCandle = close < open isBrokenHigh = close > open[1] isPriorCandleRed = close[1] < open[1] isPriorPriorCandleRed = close[2] < open[2] isPriorPriorCandleGreen = close[2] > open[2] isPriorCandleGreen = close[1] > open[1] isBrokenLow = close < open[1] isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA) longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA) shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition if (longOpenCondition) strategy.entry("Long Entry", strategy.long) if (longCloseCondition) strategy.close('Long Entry', 'Long Exit') if (shortOpenCondition) strategy.entry("Short Entry", strategy.long) if (shortCloseCondition) strategy.close('Short Entry', 'Short Exit') if (closeTradesEOD and hour >= 14 and minute >= 30) strategy.close_all("EOD") plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red) plot(fastMA) plot(ignoreSlowMA ? na : slowMA, linewidth = 4)