価格チャネルの突破口に基づくドンチャンの定量取引戦略


作成日: 2023-12-08 11:00:05 最終変更日: 2023-12-08 11:00:05
コピー: 0 クリック数: 655
1
フォロー
1621
フォロワー

価格チャネルの突破口に基づくドンチャンの定量取引戦略

概要

この戦略の核心構想は,唐通路の価格突破状況に基づいて取引を行うことであり,トレンド追跡型の量化戦略である.これは,価格通路を自動的に識別し,価格が通路の突破に沿ってポジションを開くことができ,価格が通路の下沿いの近くまたは止損点に戻ると平仓する.この戦略は,中長線の価格トレンドを捕捉することを目的としており,株式指数などの金融デリバティブのアルゴリズム取引に適用される.

原則

この戦略は,唐通道指数に基づいており,唐通道は,与えられた周期内の最高価格と最低価格で描かれた通道領域である.その計算方法は:

軌道上 = 近 n サイクル間の最高値 下線 = 近 n 周期間の最低値

価格が上線を突破すると多頭トレンドに入ると考えられ,価格が下線を突破すると空頭トレンドに入ると考えられる。この戦略は上線を突破した場合にのみ考慮される。

取引の論理は以下の通りです.

  1. 唐通路の軌道上をn周期最高値で描画する
  2. 市場が急激に上昇すると,追加入場をする
  3. ストップオフは,通路下線近くまたは設定されたストップポイントに閉店価格を戻す

利点

この戦略の利点は以下の通りです.

  1. 戦略は明確で,理解し,実行しやすい.
  2. 唐通路の指標は成熟し,信頼性があり,トレンドの方向を容易に判断できます.
  3. 自動で通路を識別し,人工で判断する必要はありません.
  4. 設定可能なパラメータ,適応力
  5. ストップ・メカニズムで,損失を制限します.

リスク

この戦略にはいくつかのリスクがあります.

  1. 唐津通路の破片が原因で不必要な損失が発生する可能性がある
  2. ストップ・ポジションの設定が不適切である場合,損失を拡大する可能性があります.
  3. 路に近付く際には,反転リスクに注意する必要があります.
  4. パラメータ設定 (周期長など) が不適切で,戦略の効果に影響する

対応方法:

  1. 他の指標と組み合わせたフィルタリング平準化偽破裂
  2. 停止位置を最適化し,滑らかな退出
  3. 経路の近くで取引量を増やすか,停止範囲を拡大することを検討する
  4. 異なるパラメータをテストし,最適なパラメータを見つけます.

最適化の方向

この戦略は,以下の点で最適化できます.

  1. MACD,KDなどの他の指標の判断を追加し,平準破綻を避ける
  2. 価格変動による移動式止損などの最適化止損機構
  3. 変動が大きくなる時にのみ取引するなど,最適化された参加制御
  4. パラメータ最適化,最適なパラメータの組み合わせを探す

要約する

この戦略の全体的な考え方は明確で,理解しやすく,実行しやすく,成熟した唐津通道指標を利用してトレンドの方向を自動的に識別する.同時に,配置は柔軟で,実際の需要に応じて調整することができる.止損とパラメータの最適化により,よりよい効果を得ることができる.全体的に,この戦略は,操作が容易で,一定の効率性を持ち,量化取引の入門戦略の一つとして適している.

ストラテジーソースコード
/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Giovanni_Trombetta

// Strategy to capture price channel breakouts

//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)

instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")

quantity = if instrument != 1 
    1
else
    int(money / close)
    
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)

plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)

longCondition = crossover(close, upBarrier[1]) and year >= backtest_start

if (longCondition)
    strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)

closeCondition = crossunder(close, down[1]) or down < down[1]

if (closeCondition)
    strategy.close("Long", comment = "Trailing")
    
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)

// l = label.new(bar_index, na,
//   text="PineScript Code", color= color.lime, textcolor = color.white,
//   style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])