ラリー・ウィリアムズの3期間ダイナミック移動平均取引戦略

EMA
作成日: 2024-05-11 17:35:22 最終変更日: 2024-05-11 17:35:22
コピー: 6 クリック数: 1109
1
フォロー
1617
フォロワー

ラリー・ウィリアムズの3期間ダイナミック移動平均取引戦略

概要

この記事では,ラリー・ウィリアムズ三周期動平均線に基づく取引戦略について説明します. この戦略は,価格の傾向を捉えるために,2つの指数移動平均 ((EMA) を利用し,K線の3つの連続した閉盘価格がEMAを破るときに取引信号を生成します. 戦略のパラメータは,異なる市場と周期に適用して調整できます.

戦略原則

  1. 2つのEMAを計算する:閉盤価格の高価格EMAと低価格EMA,周期は調整できる.
  2. 設定した取引区間内にあるかどうかを判断する.
  3. 最近の3つのK線が連続してEMA上 (上向き) または下 (下向き) に収束しているかどうかを判断する.
  4. 3が成立し,ポジションが0であった場合,多ポジションを開く. 3の逆の状況が成立し,多ポジションを保有していた場合,平仓する.
  5. 取引が終了した時点で,取引は平仓となる.

戦略的優位性

  1. パラメータの柔軟性:EMA周期,取引時間帯などのパラメータは,異なる市場に対応して調整できます.
  2. トレンド追跡: EMAと連続したK線の方向を判断し,トレンドの動きを捉えるのに役立ちます.
  3. タイムストップ:逆勢がEMAを突破すると即座に平仓し,コントロール撤回.
  4. 日中の平仓: 終盤に平仓,夜間のリスクを避ける.

戦略リスク

  1. 市場が不安定なリスク: 傾向が不明な時に頻繁に取引することで,損失を招く可能性があります.
  2. パラメータリスク:異なるパラメータは,異なる市場で大きく異なっており,ターゲットに最適化が必要である.
  3. 跳躍の隙間リスク:開盤の跳躍は,戦略の開場価格差につながり,リスクを高めます.

戦略最適化の方向性

  1. トレンドフィルター:ATR,RSIなどの指標を足してトレンドの強さを判断し,振動市場を避ける.
  2. 動的パラメータ最適化:近年の市場特有の動的パラメータの調整により,適応性を向上させる.
  3. ポジション管理:トレンドの強さや資金状況に応じてポジションを調整し,リスクをコントロールする.
  4. ストップ・ストップを追加: 合理的なストップ・ストップ・レベルとストップ・ストップ・目標を設定し,単一取引のリスクを軽減します.

要約する

ラリー・ウィリアムズ三周期動的均等線取引戦略は,双EMAと連続したK線方向に基づくトレンド追跡戦略で,パラメータ最適化により異なる市場に対応できる.しかし,戦略自体は比較的シンプルで,震動市場では不良なパフォーマンスであり,風力管理の対策が欠如しており,さらなる最適化と改善が必要である.戦略の優劣を総合的に考慮すると,戦略は,トレンドが明快な市場で使用するのに適しており,ポジション管理とリスク管理の措置を配合して,全体的なパフォーマンスと安定性を向上させる.

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

//@version=5
strategy("Larry Williams 3 Periodos Editável de MarcosJr", overlay=true, process_orders_on_close=true)

// Parametrização do período do EMA
emaPeriodHighs = input.int(title="Highs Period", defval=3, minval=1, maxval=9999)
emaPeriodLows = input.int(title="Lows Period", defval=3, minval=1, maxval=9999)

// Parametrização da data de início e fim do período a ser coletado
startYear = input.int(title="Start Year", defval=2020)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startDay = input.int(title="Start Day", defval=1, minval=1, maxval=31)

endYear = input.int(title="End Year", defval=2020)
endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12)
endDay = input.int(title="End Day", defval=31, minval=1, maxval=31)

// Convertendo data de início e fim para timestamp
startDate = timestamp(startYear, startMonth, startDay, 00, 00)
endDate = timestamp(endYear, endMonth, endDay, 23, 59)

// EMA
emaH = ta.ema(high, emaPeriodHighs)
emaL = ta.ema(low, emaPeriodLows)

// PLOT:
// Desenha as linhas EMA no gráfico
plot(emaH, color=color.green, linewidth=2)
plot(emaL, color=color.red, linewidth=2)

// Condições
inDateRange = true

// Verifica se houve mais de três candles consecutivos do mesmo sentido
checkThreeConsecutiveCandles = (close[0] > close[1] and close[1] > close[2] and close[2] > close[3]) or (close[0] < close[1] and close[1] < close[2] and close[2] < close[3])

if(close < emaL and inDateRange and checkThreeConsecutiveCandles and barstate.isconfirmed)
    strategy.entry("Long", strategy.long, comment="Long", when=strategy.position_size == 0)
if(close > emaH and inDateRange and checkThreeConsecutiveCandles and barstate.isconfirmed)
    strategy.close("Long", comment="Close Long")

// Fechar a operação no fechamento do pregão
if(strategy.position_size > 0 and na(time_close[0]))
    strategy.close("Long", comment="Close Long")