オープン・ハイス・クロス・ロー・ブレイクアウト・トレード戦略は,トレンドをフォローする戦略である.キャンドルスティック・チャートでのオープン・クローズ価格の関係をチェックすることによって,短期トレンドの方向性を特定する.トレンドが始まると,勢いを早く掴むためにロングまたはショートポジションに入る.
基本論理は,オープン価格がキャンドルスティックの最低価格または最高価格に等しいかどうかを確認することです. オープン価格が低値に等しいとき,ロング信号が起動します. オープン価格が高値に等しいとき,ショート信号が起動します. これは短期的なトレンドを示唆するブレイクアウトを捕捉することを目的としています.
シグナルが起動すると,固定サイズのポジションが直ちに開かれます.ストップ・ロスは,市場変動を追跡するためにATR指標に基づいて設定されます.取利益レベルは,エントリー価格からのストップ・ロスの距離の固定RR倍数です.価格がストップ・ロスをまたは取利益に達すると,その相応にポジションが閉鎖されます.
この戦略は,米国市場閉店の30分前など,ユーザーによって定義された日々の切断時間にすべてのポジションをフラット化します.これは一夜間ギャップリスクを回避します.
主な利点は以下の通りです.
オープン/閉鎖価格を使用して 突破信号を素早く識別します
簡単に実行できる 明確な入力信号
利益を確保し 損失を制限するために 利得を一時停止し 利益を得ます
日々の切断値で平らな位置を設定し,夜間ギャップのリスクを回避する.
市場中立です 外国為替,株式,暗号等に適用されます
考慮すべきいくつかのリスク:
ATRで頻繁にストップ・ロスをします
追加のフィルターなしで特定の楽器とセッションにオーバーフィットします.
固有得益レベルは強い傾向で劣る可能性があります.
順位を平らにするタイミングが悪ければ,トレンドを見逃したり,不必要な損失を引き起こす可能性があります.
さらに最適化する方法:
異なる市場条件に合わせて ストップ・ロスのテクニックを試す.
誤った信号を避けるため,モメントインジケーターなどを使用したフィルターを追加します.
市場変動に基づいて ダイナミックに 利潤のレベルを調整します
各取引ツールやセッションの日々の切断時間を最適化する.
オープン・ハイ・クロス・ロー・ブレイクアウト戦略は,トレード・モメンタムの簡単な方法を提供しています. 明確なエントリー・エグジットルールは,実装と管理を容易にする. しかし,ストップ・ロスト,テイク・プロフィート,フィルターなどのパラメータのさらなる最適化は,より多くの市場条件にわたってその強度を改善します. 厳格なテストを通じて時間とともに精密に調整され,リスク調整された強いリターンを達成する可能性があります.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Open-High-Low strategy strategy('Strategy: OLH', shorttitle="OLH", overlay=true) // Inputs slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings") showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings") // Trade related rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings") endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings") mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings") lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings") // Utils green(open, close) => close > open ? true : false red(open, close) => close < open ? true : false body(open, close) => math.abs(open - close) lowerwick = green(open, close) ? open - low : close - low upperwick = green(open, close) ? high - close : high - open crange = high - low crangep = high[1] - low[1] // previous candle's candle-range bullish = close > open ? true : false bearish = close < open ? true : false // Trade signals longCond = barstate.isconfirmed and (open == low) shortCond = barstate.isconfirmed and (open == high) // For SL calculation atr = ta.atr(slAtrLen) highestHigh = ta.highest(high, 7) lowestLow = ta.lowest(low, 7) longStop = showSLLines ? lowestLow - (atr * 1) : na shortStop = showSLLines ? highestHigh + (atr * 1) : na plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross) plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross) // Trade execute h = hour(time('1'), syminfo.timezone) m = minute(time('1'), syminfo.timezone) hourVal = h * 100 + m totalTrades = strategy.opentrades + strategy.closedtrades if (mktAlwaysOn or (hourVal < endOfDay)) // Entry var float sl = na var float target = na if (longCond) strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long") sl := longStop target := close + ((close - longStop) * rrRatio) alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) if (shortCond) strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short") sl := shortStop target := close - ((shortStop - close) * rrRatio) alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) // Exit: target or SL if ((close >= target) or (close <= sl)) strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit") if ((close <= target) or (close >= sl)) strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit") else if (not mktAlwaysOn) // Close all open position at the end if Day strategy.close_all(comment = "Close all entries at end of day.")