ウィリアムズ%Rはストッププロフィットとストップロス戦略を動的に調整します

EMA TP SL
作成日: 2024-06-07 15:52:55 最終変更日: 2024-06-07 15:52:55
コピー: 10 クリック数: 783
1
フォロー
1617
フォロワー

ウィリアムズ%Rはストッププロフィットとストップロス戦略を動的に調整します

概要

この戦略は,ウィリアムズ %R指標をベースに,ストップ・ストラップ・レベルを動的に調整することで取引パフォーマンスを最適化します. ウィリアムズ %Rが超売区 (−80) を渡るときに買い信号を生じ,超売区 (−20) を渡るときに売り信号を生じます. 同時に,指数移動平均 (−EMA) を使って,ウィリアムズ %Rの値を平らにして騒音を減らすことができます. この戦略は,指標周期,ストップ・ストラップ (−TP/SL) レベル,取引時間,取引方向の選択を含む柔軟なパラメータ設定を提供し,異なる市場環境とトレーダーの好みに適合します.

戦略原則

  1. 与えられた周期のウィリアムズ %R指数値を計算する.
  2. Williams %Rの指数移動平均を計算する.
  3. ウィリアムズ %Rが下から上へ80のレベルを突破すると,買入シグナルが誘発され,上から下へ20のレベルを突破すると,売出シグナルが誘発される.
  4. 購入後,ストップとストップのレベルを設定し,ストップ/ストップの価格に達するまで,またはウィリアムズ%Rが反転信号を誘発するまで,ポジションを平定する.
  5. 販売後,ストップとストップのレベルを設定し,ストップ/ストップの価格に達するまで,またはウィリアムズ%Rが反転シグナルを誘発するまで,ポジションを平定する.
  6. 指定された時間帯 (例えば9:00-11:00) で取引し,整数点の近く (例えば前X分から後Y分) で取引するかどうかを選択できます.
  7. 選択可能な取引方向は,多額のみ,空白のみまたは双方向取引である.

優位分析

  1. ダイナミックストップローズ:ユーザの設定に応じてダイナミックにストップローズレベルを調整することで,利益をより保護し,リスクをコントロールできます.
  2. フレキシブルなパラメータ:ユーザーは,異なる市場状況に対応するために,指数周期,ストップ・ロスのレベル,取引時間などの様々なパラメータを自分の好みに合わせて設定できます.
  3. 滑らかな指数:EMAの滑らかなウィリアムズ%Rの値を導入することで,指数ノイズを効果的に軽減し,信号信頼性を向上させることができる.
  4. 取引時間を制限する: 特定の時間帯で取引することを選択し,市場の波動が大きい時期を避け,リスクを減らす.
  5. カスタマイズされた取引方向:市場動向と個人の判断に応じて,多額取引,空白取引,双方向取引を選択できます.

リスク分析

  1. パラメータ設定が不適切: ストップ・ストラップ・ロスの設定が過度に緩やかまたは過度に厳格である場合,利益の損失または頻繁なストラップ・ロスを引き起こす可能性があります.
  2. トレンド認識エラー: ウィリアムズ %R 指数は,波動的な市で不十分なパフォーマンスを出し,誤った信号を生じさせる可能性があります.
  3. 時間の制限は効果が限られている. 時間の制限は,戦略が良い取引機会を逃す可能性がある.
  4. 過剰最適化:過剰最適化パラメータにより,戦略が将来の実際の取引で不良な結果をもたらす可能性があります.

最適化の方向

  1. 傾向指標,波動率指標などの他の指標と組み合わせて,信号確認の正確性を向上させる.
  2. 動的パラメータ最適化:市場状況に応じてリアルタイムでパラメータを調整する.例えば,トレンド市場と振動市場で異なるパラメータ設定を使用する.
  3. ストップ・ストップの改善: 利益の保護とリスク管理の改善のために,トラッキング・ストップ,部分ストップなどの方法を採用する.
  4. 資金管理に参加する:口座の余剰とリスクの好みに応じて,各取引のポジションの大きさを動的に調整する.

要約する

Williams %Rダイナミック調整ストップ・ストップ・ストラトジーは,価格の超買超売り状態をシンプルで効果的な方法で捉え,異なる市場環境と取引スタイルに適応する柔軟なパラメータ設定を提供します.この戦略は,リスクをよりよく制御し,利益を保護するためにストップ・ストラトジーのレベルを動的に調整します.しかし,実際のアプリケーションでは,パラメータ設定,シグナル確認,取引時間選択などの要因に注意する必要があります.

ストラテジーソースコード
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Williams %R Strategy defined buy/sell criteria with TP / SL", overlay=true)

// User inputs for TP and SL levels
tp_level = input.int(defval=60, title="Take Profit (ticks)", minval=10, maxval=500, step=10)
sl_level = input.int(defval=60, title="Stop Loss (ticks)", minval=10, maxval=200, step=10)

// Williams %R calculation
length = input.int(defval=21, title="Length", minval=5, maxval=50, step=1)
willy = 100 * (close - ta.highest(length)) / (ta.highest(length) - ta.lowest(length))

// Exponential Moving Average (EMA) of Williams %R
ema_length = input.int(defval=13, title="EMA Length", minval=5, maxval=50, step=1)
ema_willy = ta.ema(willy, ema_length)

// User inputs for Williams %R thresholds
buy_threshold = -80
sell_threshold = -20

// User input to enable/disable specific trading hours
use_specific_hours = input.bool(defval=false, title="Use Specific Trading Hours")
start_hour = input(defval=timestamp("0000-01-01 09:00:00"), title="Start Hour")
end_hour = input(defval=timestamp("0000-01-01 11:00:00"), title="End Hour")

// User input to choose trade direction
trade_direction = input.string(defval="Both", title="Trade Direction", options=["Buy Only", "Sell Only", "Both"])

// User input to enable/disable "Minutes Before" and "Minutes After" options
enable_minutes_before_after = input.bool(defval=true, title="Enable Minutes Before/After Options")
minutes_before = enable_minutes_before_after ? input.int(defval=10, title="Minutes Before the Top of the Hour", minval=0, maxval=59, step=1) : 0
minutes_after = enable_minutes_before_after ? input.int(defval=10, title="Minutes After the Top of the Hour", minval=0, maxval=59, step=1) : 0

// Condition to check if the current minute is within the user-defined time window around the top of the hour
is_top_of_hour_range = (minute(time) >= (60 - minutes_before) and minute(time) <= 59) or (minute(time) >= 0 and minute(time) <= minutes_after)

// Condition to check if the current time is within the user-defined specific trading hours
in_specific_hours = true
if use_specific_hours
    in_specific_hours := (hour(time) * 60 + minute(time)) >= (hour(start_hour) * 60 + minute(start_hour)) and (hour(time) * 60 + minute(time)) <= (hour(end_hour) * 60 + minute(end_hour))

// Buy and Sell conditions with time-based restriction
buy_condition = ta.crossover(willy, buy_threshold) and is_top_of_hour_range and in_specific_hours
sell_condition = ta.crossunder(willy, sell_threshold) and is_top_of_hour_range and in_specific_hours

// Strategy entry and exit with TP and SL
if (trade_direction == "Buy Only" or trade_direction == "Both") and buy_condition
    strategy.entry("Buy", strategy.long)

if (trade_direction == "Sell Only" or trade_direction == "Both") and sell_condition
    strategy.entry("Sell", strategy.short)

// If a buy entry was taken, allow the trade to be closed after reaching TP and SL or if conditions for a sell entry are true
if (strategy.opentrades > 0)
    strategy.exit("TP/SL", profit=tp_level, loss=sl_level)

// Plot Williams %R and thresholds for visualization
hline(-20, "Upper Band", color=color.red)
hline(-80, "Lower Band", color=color.green)
plot(willy, title="%R", color=color.yellow, linewidth=2)
plot(ema_willy, title="EMA", color=color.aqua, linewidth=2)