この戦略は主に,市場の方向性と強さを判断するために,Kラインの高低点によって形成されたボックスの突破を検出する. 上向きのボックスのブレイクがあるとき,戦略はブレイクポイントの周りにロングポジションを設定する. 下向きのボックスのブレイクがあるとき,戦略はブレイクポイントの周りにショートポジションを設定する. 取引信号が生成されると,戦略はポジションを開くオーダーを出し,ストップ損失を設定し,リスクを制御するために利益を取ります.
戦略は取引期間を定義し,その期間中での取引機会のみを探します.
各K線が形成された後,戦略は,前2つのK線の最高値と最低値の間で有意な突破があるかどうかを判断します.
2.1 2番目のKラインの最低価格が1番目のKラインの最高価格より高くなった場合,上向きボックスブレイクが発生します.
2.2 2番目のKラインの最高価格が1番目のKラインの最低価格より低い場合,下向きボックスブレイクが発生します.
ボックスブレイクシグナルが確認された後,戦略は現在のKラインの最高値や最低値の周りに長値または短値のエントリーポイントを設定します.
ポジションが開かれたら 戦略はトレンドの加速を把握するために ブレイクアウト範囲の2倍をベースに 利益を得ることを設定します
ストップ・ロスは2番目のKラインの最低または最高値に設定され,損失リスクを軽減します.
この戦略には以下の利点があります.
論理はシンプルで 実行も簡単です
市場方向と強さを判断するために K線ボックスブレイクを使用すると高い精度があります
トレンドの加速から得られる機会を把握します 掛け算は調整できます
単一の損失を制御するための明確なストップ損失論理があります
戦略のアイデアは柔軟で,個人的なスタイルに応じてカスタマイズすることができます.
しかし,この戦略にはいくつかのリスクがあります.
ブレイクシグナルが偽ブレイクシグナルで 損失は完全に回避できない
エントリーポイント近くのストップ・ロスは,攻撃的な市場によって容易に引き起こすことができます.
傾向構造を判断できず,レンジ・バインド市場では頻繁にストップが発生する可能性があります.
異なる製品や時間帯の影響を考慮しない.
戦略をさらに最適化するために,次の側面から改善することができます:
適応型ストップ損失と利益のパラメータを 異なる製品と期間で設定します
トレンド判断のための技術指標を追加し,レンジ・バインド市場に閉じ込められないようにします.
トレンドランスを追跡するための追加機会を設定します
音量指標を組み合わせて ブレイクとフィルター信号の真性を判断する.
マシン学習アルゴリズムを追加して 傾向の方向性を決定します
この戦略は,過剰な収益のために,ブレークアウトの後で加速したランスを捕捉するための単純なブレークアウト原則に基づいて設計されています.リスクを制御するためにストップと利益を使用します.理解し,実装しやすい戦略は,個人的なニーズと市場環境に応じてカスタマイズされ,最適化され,非常に実践的です.
/*backtest start: 2024-01-07 00:00:00 end: 2024-01-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Dvitash //@version=5 strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true) startTime = input(defval = "1000", title = "Start Time") endTime = input(defval = "1600", title = "End Time") contractAmt = input.int(defval = 2, title = "Contract Amount") fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color") borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color") fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length") allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York")) newDay = bool(ta.change(time('D'))) h = hour(time('1'), "America/New_York") var bool fvgDrawn = na var float entryPrice = na var float stopPrice = na var float tpPrice = na if newDay fvgDrawn := false // a_allBoxes = box.all // if array.size(a_allBoxes) > 0 // for i = 0 to array.size(a_allBoxes) - 1 // box.delete(array.get(a_allBoxes, i)) if allowedTime and barstate.isconfirmed and h <= 16 //Long FVG if high[2] < low and not fvgDrawn // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := low[2] entryPrice := low tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry") fvgDrawn := true if low[2] > high and not fvgDrawn // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := high[2] entryPrice := high tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry") fvgDrawn := true if h >= 16 strategy.close_all() strategy.cancel_all() strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit") strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")