Nバーズ 脱出戦略

作者: リン・ハーンチャオチャン,日付: 2024-04-12 16:57:15
タグ:

img

概要

Nバースブレイクアウト戦略は,価格ブレイクアウトに基づいた定量的な取引戦略である.この戦略の主な考え方は,閉じる価格が過去Nバーの最高値を超えるとロングポジションを開き,閉じる価格が過去Nバーの最低値を下回るとロングポジションを閉じることである.現在の価格を過去Nバーの最高値と最低値と比較することによって,この戦略は強力なブレイクアウト動きを捉え,トレンドフォロー効果を達成することを目的としている.

戦略原則

  1. 過去のNバーの最高高値 (最高値) と最低低値 (最低値) を計算する.
  2. 現在の閉じる価格が最高値より高くなった場合,ロング (ロング) ポジションを開く.
  3. 現在の閉じる価格が最低値より低い場合は,ロングポジション (ショート) を閉じる.
  4. 信号源として閉じる価格 (閉じる) や高/低価格 (高/低) を選択できます.
  5. 信号源に応じて,最高値と最低値を計算するために,最高値と最低値を使用します.
  6. 価格ブレイクを決定するには,ta.crossover と ta.crossunder を使います.

戦略 の 利点

  1. シンプルで明快な論理で 簡単に実装し最適化できます
  2. 強い突破動きを効果的に捉える 強いトレンドフォロー能力
  3. パラメータの最適化のための大きな空間,異なる機器とタイムフレームに最適化することができます.
  4. 幅広い適用可能性があり,ほとんどの楽器と時間枠でうまく機能します.
  5. 信号源の柔軟な選択により 戦略の適応性が向上します

戦略リスク

  1. 不安定で変動が少ない市場では業績が悪く,取引コストが高くなるため,ポジションを頻繁に開閉している.
  2. パラメータの不適切な選択は 過適性リスクを引き起こす可能性があります.
  3. トレンドの逆転時に大きな引き上げを経験する可能性があります.
  4. 単一の信号源は信号歪みの危険に直面する可能性があります.

戦略の最適化方向

  1. トレンドフィルタリング条件,例えば MA トレンド方向,ADX などを追加し,不安定な市場での取引を減らす.
  2. N値,信号源などパラメータ選択を最適化して戦略の安定性と収益性を向上させる.
  3. ストップ・ロスの論理とストップ・ロスの論理を追加し,単一の取引リスクを制御します.
  4. シグナル信頼性を向上させるために複数の信号源を組み合わせる.例えば,閉値と高値/低値のブレイクの両方を考慮する.
  5. パラメータとロジックを異なる機器と時間枠に合わせて個別に最適化する.

概要

N Bars Breakout ストラテジー (N Bars Breakout ストラテジー) は,価格ブレイクを捕捉することで良いトレンドフォロー効果を達成するシンプルで実践的な定量的な取引戦略である.この戦略は明確な論理,大きな最適化空間,幅広い適用可能性を有し,さらなる研究と最適化に値する定量的な戦略である.合理的なパラメータ最適化と論理改善を通じて,この戦略の安定性と収益性がさらに向上し,異なる市場環境により良い適応が可能である.


/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Breakout", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(5, "N Bars", minval=1)
src_input = input.string("Close", "Source", ["Close", "High/Low"])

bull_src = switch src_input
	"Close" => close
	"High/Low" => high
	=>
		runtime.error("Invalid source input")
		na

bear_src = switch src_input
	"Close" => close
	"High/Low" => low
	=>
		runtime.error("Invalid source input")
		na

highest = ta.highest(bull_src[1], n)
lowest = ta.lowest(bear_src[1], n)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

bool long = ta.crossover(bull_src, highest)
bool short = ta.crossunder(bear_src, lowest)

//Plots
lowest_plot  = plot(lowest,  color=color.red, title="Lowest")
highest_plot  = plot(highest,  color=color.green, title="Highest")
bull_src_plot = plot(bull_src, color=color.blue, title="Bull")
bear_src_plot = plot(bear_src, color=color.orange, title="Bear")

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)

もっと