戦略 に 従っ て 輝く ボルト 傾向

作者: リン・ハーンチャオチャン,日付: 2024-02-02 17:30:09
タグ:

img

概要

この戦略は"Dazzling Bolts"と呼ばれる.これは3つの移動平均値に基づいたトレンドフォロー戦略である.これは価格トレンドを決定するために高速,中等,遅い線のクロスオーバーを使用して,ATR値に基づいて目標とストップを設定する.

戦略の論理

この戦略は以下の3つの移動平均を用いています.

  1. 短期トレンドを測定するための13期間の加重移動平均値
  2. 中期トレンドの55期指数関数移動平均値
  3. 長期トレンドに関する110期間の単純な移動平均値

フーストラインがミディアムラインの上,ミディアムラインがスローライン上を横切ると上昇傾向を示します. フーストラインがミディアムライン下,ミディアムラインがスローライン下を横切ると下落傾向を示します.

騒音の部分をフィルタリングするために,いくつかの補助条件が設定されています.

  1. 過去5本のキャンドルの低価格が均等線以上だった
  2. 最後の2本のキャンドルの低価格が 中間線を下回った
  3. 最後のキャンドルの閉じる価格は,中間線以上でした.

これらの条件を満たすとき,ロングまたはショート信号が起動されます.それは一度に1つのポジションのみを保持し,既存のポジションが閉鎖または停止されるまで再び入らない.

目標とストップは ATR 値の一定倍数に基づいて設定されます

利点分析

この戦略の利点は以下の通りです.

  1. 3つの移動平均を組み合わせることで,単一の指標から誤った判断を避けることができます.
  2. 複数の補助条件は,ノイズをフィルタリングすることによって信号品質を改善するのに役立ちます.
  3. ダイナミックなATRストップ損失は,単一の取引損失を制御するのに役立ちます.

リスク分析

この戦略のリスクには以下も含まれる.

  1. 移動平均の組み合わせは誤った信号を発し,十分なバックテストが必要となる.
  2. ATR マルチプリキュア設定が正しくない場合,ストップが緩すぎたり,締めすぎたりする可能性があります.
  3. 価格変動を突然の出来事から効果的にフィルタリングできない.

リスクを軽減するために,移動平均パラメータを適切に調整し,ATR倍数を最適化し,単一の取引損失を避けるために最大保持期間を設定します.

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

この戦略の可能な最適化:

  1. 異なる長さやタイプの移動平均を試験する.
  2. 補助条件のパラメータを最適化する
  3. 傾向予測のための他の指標を試してください. 例えばMACD,DMIなど.
  4. 信号をフィルタリングするために音量指標を組み込む.

概要

Dazzling Bolts戦略は,一般的に安定したトレンドフォローシステムである.主にトレンド方向を決定するために移動平均クロスオーバーを使用し,一部のノイズをフィルタリングするための補助手段として特定の技術指標の組み合わせを使用する.さらなる最適化のための余地があるものの,全体的なリスクは制御されており,中長期トレンドに沿って投資するのに適している.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 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/
// © greenmask9

//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000

// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)

// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)

emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)

bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce,  title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce,  title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)

target = close + atr*atrm
antitarget = close - (atr*atrm)

//limits and stop do not move, no need to count bars from since

bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)

if (bullbuy)
    strategy.entry("Boltsup", strategy.long, ordersize)
    strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
    strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")

if (bearsell)
    strategy.entry("Boltsdown", strategy.short, ordersize)
    strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
    strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")

// if (bb<5)
//     bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
//     bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
//     bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
//     bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
//     bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
//     bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)


もっと