波追従戦略の改善


作成日: 2024-01-31 15:35:41 最終変更日: 2024-01-31 15:35:41
コピー: 0 クリック数: 669
1
フォロー
1617
フォロワー

波追従戦略の改善

概要:これは,波動指標を用いたトレンド追跡戦略である.平均価格の指数移動平均と絶対価格差の移動平均を計算することで,波動線が得られる.波動線と超買い超売り領域の交差を監視することで,取引信号を生成する戦略である.同時,均等線フィルタリングと取引量フィルタリングを組み合わせて,誤った信号を避ける.

戦略の原則:

  1. 平均価格 ap= (最高価格+最低価格+閉店価格) を計算する.

  2. n1周期でapのEMAを計算すると,esaが得られます.

  3. ap とesa の絶対差値の n1 周期EMA を計算して,d を得る

  4. 波線を計算する:ci=(ap-esa) /(0.015*d)

  5. n2周期ciのEMAを計算すると,最終波線tci,すなわちwt1が得られる.

  6. wt1の4周期SMAを計算すると,wt2が得られます.

  7. 超買区と超売り区を obLevel1/2と osLevel1/2の水平線で描く

  8. wt1上のobLevel2線を穿過すると買取信号が生じ,wt1下のosLevel2線を穿過すると売出信号が生じ

  9. 平均線emaFilterと取引量volumeFilterをフィルター条件として追加して,誤った信号を避ける

  10. 入場後,ストップ・ストップ・損失比率を設定し,ポジションを退出する

優位分析:

  1. 波線は多空変換をうまく処理し,トレンドを効果的に捉えます.

  2. 均線と取引量の二重フィルタリングを組み合わせ,信頼性が高い

  3. 単一の指標の制限を回避する複数のパラメータの計算

  4. ストップ・ストップ・損失を設定し,利益の一部をロックし,リスクを効果的に制御する

リスクと欠陥:

  1. パラメータの選択は,いくつかの状況で,不良な性能または過度に適合する可能性があります

  2. 試行錯誤が必要で,最適なパラメータの選択に関する明確な指針はありません.

  3. より広範な市場条件が信号に含まれていない

  4. 制限された範囲または変動する市場での使用の場合,火薬効果のリスクがあります.

  5. 利益/損失以外の退出ルールの欠如

改善する方向:

  1. 異なる時間枠と資産でパラメータセットをテストし,最適値を見つける

  2. 波動性指標と組み合わせて,低波動期間の信号を避ける

  3. 信号の正確性を高めるためにRSIのような補足指標を追加

  4. 特定の資産に対して最適なパラメータを見つけるための機械学習モデルを構築する

  5. 追跡ストップまたは突然の波動的な拡大イベントに基づく退出を追加して退出を強化する

結論から言うと

これは,波線と補助指標の設計を組み合わせた戦略である。波線を有効にトレンド変換を識別する特性を利用し,平均線と取引量フィルタリングを補助して誤った信号を回避し,中長線トレンドのほとんどを取得することができる。同時に,ストップストロスを採用してリスクを制御する。最適化の余地が広く,パラメータの組み合わせを調整し,より多くの指標を組み合わせ,機械学習などの方法を継続的に改善することで,戦略をより多くの品種と周期でより良いパフォーマンスを得ることができる。

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

//@version=5
strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false)

// Paramètres
n1 = input(10, title="Channel Length")
n2 = input(21, title="Average Length")
obLevel1 = input(60, title="Over Bought Level 1")
obLevel2 = input(53, title="Over Bought Level 2")
osLevel1 = input(-65, title="Over Sold Level 1")
osLevel2 = input(-60, title="Over Sold Level 2")
takeProfitPercentage = input(1, title="Take Profit (%)")
stopLossPercentage = input(0.50, title="Stop Loss (%)")

// Calculs
ap = hlc3 
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

// Tracé des lignes
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)

plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)

// Tracé de la différence entre wt1 et wt2 en bleu
hline(0, "Zero Line", color=color.gray)

// Conditions d'entrée long et court
longCondition = ta.crossover(wt1, obLevel2)
shortCondition = ta.crossunder(wt1, osLevel2)

// Tracé des signaux d'achat et de vente
plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")

// Conditions d'entrée et de sortie
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Niveaux de prise de profit pour les positions longues et courtes
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100)

// Vérification si les niveaux de prise de profit sont atteints
longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel
shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel

// Tracé des formes de prise de profit
plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long")
plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short")

// Niveaux de stop loss pour les positions longues et courtes
longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100)
shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100)

// Vérification si les niveaux de stop loss sont atteints
longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel
shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel

// Tracé des formes de stop loss
plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long")
plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short")

// Fermeture des positions en cas de prise de profit ou de stop loss
strategy.close("Long", when=longTakeProfitReached or longStopLossReached)
strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)