LazyBear をベースにした波動トレンド・トレーディング・戦略

作者: リン・ハーンチャオチャン開催日:2023年12月19日 12:07:14
タグ:

img

概要

これは,LazyBearの波動傾向指標に基づいた取引戦略です.この戦略は,価格変動の波動傾向を計算することによって市場情勢を特定し,それに応じて長期および短期的決定を下します.

戦略の論理

この戦略の核心は,LazyBearの波動トレンド指標である.まず平均価格 (AP),その後AP (ESA) の指数関数移動平均値,そして絶対価格動き (D) を計算する.ESAとDに基づいて,戦略は波動指数 (CI) を計算し,その後指数関数移動平均値 (WT) に供給して波動トレンドライン (WT) を生成する.WTは単純な移動平均値を使用してWT1とWT2に処理される.WT1がWT2を横切ると,金十字をトリガーし,ロングに行く.WT1がWT2を下回ると,死十字とショートをトリガーする.

利点分析

これは非常にシンプルで実用的な傾向です.主な利点は以下の通りです.

  1. 価格動向と市場情勢を Wave Trend インディケーターに基づいて明確に特定します
  2. WTラインの黄金/死十字に基づいて,ロング/ショートする単純な取引論理
  3. 異なるサイクルに対するWTの感度を調整するための設定可能なパラメータ
  4. 取引時間窓などの追加のフィルターを追加する柔軟性

リスク分析

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

  1. 傾向を伴う戦略として,範囲限定市場では多くの誤った信号を生成することができます.
  2. WT の 遅い 性質 は,回転 を 逃す こと に なり ます.
  3. デフォルトパラメータはすべての製品やサイクルに適合しない可能性があります.
  4. ストップ・ロスのメカニズムがないため,保持期間が非常に長くなります

主な解決策は以下の通りです

  1. WTの感度を調整するパラメータを最適化
  2. 誤った信号を避けるため,確認のための他の指標を追加します.
  3. ストップ・ロスを使って,利益を取ります.
  4. 日々の取引またはポジションを制限する

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

さらに最適化できる余地があります.

  1. より良い感度や安定性のためにWTパラメータを最適化
  2. サイクルに基づいて異なるパラメータセットを使用
  3. 確認のためにボリューム,変動などの指標を追加します
  4. ストップ・ロスを追加し,利益を取ります.
  5. ピラミッドやグリッドの取引のような取引の論理を豊かにします
  6. 機械学習を用いてより良い機能とルールを探索する

概要

概要すると,これは非常にシンプルで実用的な波動トレンドフォロー戦略である.価格変動の波動トレンドをモデル化することで,WTの黄金十字と死十字を使用して取引信号を生成するために過買いと過売市場条件を特定する.この戦略は実行が簡単であるが,敏感性と安定性のためにさらなる最適化が必要である.トレンドフォロー戦略として,誤った信号を避けるために追加のフィルターと論理も必要である.全体的には,これは改善の余地のある有用な戦略テンプレートとして機能する.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//
// @author LazyBear
//
// If you use this code in its original/modified form, do drop me a note. 
//
//@version=4
     
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=3)
plot(osLevel2, color=color.green, style=3)

plot(wt1, color=color.white)
plot(wt2, color=color.fuchsia)
plot(wt1-wt2, color=color.new(color.blue, 80), style=plot.style_area)

//Strategy
strategy(title="T!M - Wave Trend Strategy", overlay = false, precision = 8, max_bars_back = 200, pyramiding = 0, initial_capital = 1000, currency = currency.NONE, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = "percent", commission_value = 0.1, calc_on_every_tick=false, process_orders_on_close=true)
    
longCondition  = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

strategy.entry(id="Long Entry", comment="buy", long=true, when=longCondition and window())
strategy.close("Long Entry", comment="sell", when=shortCondition and window())      

//strategy.entry(id="Short Entry", long=false, when=shortCondition)

もっと