SSLチャネルバックテスト戦略とATRとマネーマネジメント

作者: リン・ハーンチャオチャン, 日付: 2023-11-23 10:26:58
タグ:

img

概要

これは,SSLチャネル指標に基づいたバックテスト戦略で,SSLチャネル戦略のより包括的なテストを促進するために,ATRストップ損失,ATR取利益,マネーマネジメントなどの機能と統合されています.

戦略の論理

SSL チャネル インディケーター

SSLチャネルインジケーターは,チャネルミッドラインとチャネルバンドから構成される.チャネルミッドラインには,通常,バックバック期間の高値と低値の単純な移動平均である上線トラックと下線トラックが含まれています.チャネルバンドは,上線トラックと下線トラックの間に形成されます.

価格が上部帯に近づくと,過剰購入状態を示し,価格が下部帯に近づくと,過剰販売状態を示します.チャネル帯のブレイクはトレンド逆転を意味します.

SSLチャネルパラメータは,ssl_period=16この戦略で

ATR ストップ・損失/収益

平均値 True Range (ATR) は市場変動を測定し,ストップ・ロストと収益率を決定するために使用できます.

この戦略は14期間のATR (atr_period=14) とダイナミックマルチプリキューターatr_stop_factor=1.5そしてatr_target_factor=1.0適正ストップロスを設定し,波動性に基づいて利益を取ります.

また,計器が2桁の精度を持っているかどうかを確認する (two_digitドルとJPYなどの対に対してストップとターゲットを相応に調整する.

資金管理

資金管理はposition_size(固定位置のサイズ) とrisk資金管理モジュールは,use_mm=true.

目標は,各取引の最適なポジションサイズを決定することです.取引ごとに固定リスク%を使用することで,各取引の損失を制限するために,許容されるポジションサイズは,口座資本に基づいて動的に計算されます.

利点分析

  • SSLチャネルは,トレンド逆転信号を捉えるのに有効です.
  • ATRベースのストップは,変動に基づいて自動的に調整されます.
  • 資金管理は,あらゆる職業におけるリスクを制御するのに役立ちます

リスク分析

  • SSLチャネル信号は完全に信頼できない場合があり,偽信号が発生する可能性があります.
  • ATRストップは幅が広いり狭すぎたりする
  • 資金管理 の 設定 が 適切 で ない 場合,過大 な ポジション や 低 効率 な 状態 に なる こと が あり ます.

これらのリスクは以下によって軽減できます.

  1. シグナルを確認し,誤った入力を避けるためにフィルターを追加する
  2. 最適なストップ・ロスト/得益レベルのためのATR期間のパラメータの調整
  3. 理想的なポジションサイズ化のために様々なマネーマネジメントパラメータをテストする

オプティマイゼーションの方向性

戦略は以下の点で改善できる:

  1. 最良のパフォーマンスのために SSL チャネルパラメータを最適化
  2. ATR停止メカニズムの強化または交換
  3. 不必要な取引を避けるためにフィルタリング指標を追加します.
  4. リスク調整回帰を最大化するためにポジションサイズを組み込む
  5. 異なる楽器のための細調整パラメータ
  6. より包括的なテストのための定量的なツールを追加

体系的な最適化によって この戦略は 強力なアルゴリズム取引システムになることができます

結論

この戦略は,トレンドのためのSSLチャネル,リスク制御のためのATR,ポジションサイズのためのマネーマネジメントを組み合わせます.包括的なバックテストは,戦略を自動化された取引システムに評価し,強化することを容易にする.フィルターを追加し,パラメータを最適化し,機能拡大などの改善にも余地があります.全体的に,これはアルゴリズム的な取引戦略を構築するための堅牢な基盤を形成します.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 2h
basePeriod: 15m
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/
// © comiclysm

//@version=4
strategy("SSL Backtester", overlay=false)

//--This strategy will simply test the effectiveness of the SSL using
//--money management and an ATR-derived stop loss

//--USER INPUTS

two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)")
ssl_period = input(16, "SSL Period")
atr_period = input(14, "ATR Period")
atr_stop_factor = input(1.5, "ATR Stop Loss Factor")
atr_target_factor = input(1.0, "ATR Target Factor")
use_mm = input(true, "Check this to use Money Management")
position_size = input(1000, "Position size (for Fixed Risk)")
risk = input(0.01, "Risk % in Decimal Form")

//--INDICATORS------------------------------------------------------------

    //--SSL
    
sma_high = sma(high, ssl_period)
sma_low = sma(low, ssl_period)
ssl_value = 0
ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1]
ssl_low = ssl_value < 0 ? sma_high : sma_low
ssl_high = ssl_value < 0 ? sma_low : sma_high

    //--Average True Range
    
atr = atr(atr_period)

//--TRADE LOGIC----------------------------------------------------------

signal_long = ssl_value > 0 and ssl_value[1] < 0
signal_short = ssl_value < 0 and ssl_value[1] > 0

//--RISK MANAGMENT-------------------------------------------------------
strategy.initial_capital = 50000
balance = strategy.netprofit + strategy.initial_capital
risk_pips = atr*10000*atr_stop_factor
if(two_digit)
    risk_pips := risk_pips / 100
risk_in_value = balance * risk
point_value = syminfo.pointvalue
risk_lots = risk_in_value / point_value / risk_pips
final_risk = use_mm ? risk_lots * 10000 : position_size

//--TRADE EXECUTION-----------------------------------------------------

if (signal_long)
    stop_loss = close - atr * atr_stop_factor
    target = close + atr * atr_target_factor
    strategy.entry("Long", strategy.long, final_risk)
    strategy.exit("X", "Long", stop=stop_loss, limit=target)
if (signal_short)
    stop_loss = close + atr * atr_stop_factor
    target = close - atr * atr_target_factor
    strategy.entry("Short", strategy.short, final_risk)
    strategy.exit("X", "Short", stop=stop_loss, limit=target)
    
//--PLOTTING-----------------------------------------------------------

plot(ssl_low, "SSL", color.red, linewidth=1)
plot(ssl_high, "SSL", color.lime, linewidth=1)


もっと