これは,SSLチャネル指標に基づいたバックテスト戦略で,SSLチャネル戦略のより包括的なテストを促進するために,ATRストップ損失,ATR取利益,マネーマネジメントなどの機能と統合されています.
SSLチャネルインジケーターは,チャネルミッドラインとチャネルバンドから構成される.チャネルミッドラインには,通常,バックバック期間の高値と低値の単純な移動平均である上線トラックと下線トラックが含まれています.チャネルバンドは,上線トラックと下線トラックの間に形成されます.
価格が上部帯に近づくと,過剰購入状態を示し,価格が下部帯に近づくと,過剰販売状態を示します.チャネル帯のブレイクはトレンド逆転を意味します.
SSLチャネルパラメータは,ssl_period=16
この戦略で
平均値 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,ポジションサイズのためのマネーマネジメントを組み合わせます.包括的なバックテストは,戦略を自動化された取引システムに評価し,強化することを容易にする.フィルターを追加し,パラメータを最適化し,機能拡大などの改善にも余地があります.全体的に,これはアルゴリズム的な取引戦略を構築するための堅牢な基盤を形成します.
/*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)