インディケーター統合に基づいたモメント追跡戦略

作者: リン・ハーンチャオチャン開催日:2023年10月17日 15:26:49
タグ:

img

概要

この戦略は,価格と移動平均間の距離を合計して価格傾向方向を決定するカスタムインジケータインテグレーターに基づいており,したがってトレンドを追跡します.

戦略の論理

この戦略は,価格と移動平均の距離を統合するためのカスタムインジケーターを使用し,次のように実装されます.

  1. 価格と200期間の単純な移動平均間の距離を計算する k=close-sma ((close,200)

  2. 積分期 s=29 を定義し,最後の s 期間のk の和を積む: sum = 0, for i = 0 to s, sum := sum + k[i]

  3. sum>0で長信号が生成され, sum<0で短信号が生成されます.

  4. ロングポジションを開くとき,sum<0の場合,ロングポジションを閉じる.ショートポジションを開くとき,sum>0の場合,ショートポジションを閉じる.

この戦略は,価格と移動平均の間の距離の累積合計が正または負であるかどうかを追跡することによって,全体的なトレンド方向を判断する.積分が正である場合,上向きの傾向を示し,ロングポジションを保持すべきである.積分が負である場合,下向きの傾向を示し,ショートポジションを保持すべきである.

利点

  1. カスタムインジケータインテグレーターは,価格傾向の方向性を効果的に決定することができます.

  2. 統合概念は,価格とMAの距離を蓄積し,トレンド決定の精度を向上させます.

  3. 比較的シンプルな論理で 分かりやすく最適化できます

  4. 感度を最適化するために統合期間を柔軟に調整する.

  5. バックテストの結果は良好で 利益も安定しています

リスク

  1. 不適切なインテグレーション期間設定は,不敏感な反応を引き起こし,トレンドターニングポイントを逃す可能性があります.

  2. MA長さの設定が正しくない場合,トレンドを誤って判断する可能性があります.

  3. 突然の大事な出来事が 間違った信号を引き起こすかもしれません

  4. シンボルの選択が不適切で,非常に不安定なシンボルは有効性を低下させる可能性があります.

対応する解法:

  1. 統合期間を最適化してよりよい感度を得る.

  2. トレンド決定に最適なMA長さをテストする.

  3. 大規模な物価変動による誤りを避けるために 大規模な物価変動前に戦略を締めくくります

  4. 低変動のシンボルを選択して,よりよいパフォーマンスを発揮する.

改善 の 方向

  1. 総合的な決定のために RSI のような他の指標を追加することを検討します.

  2. 異なる種類のMAを用いた研究統合の結果

  3. 異なるシンボルのための自動最適化積分期を試してください.

  4. 大幅な価格変動の際にエラーを避けるために,ボリューム指標を追加します.

  5. 機械学習を使って パーマータを自動最適化します

結論

この戦略は,価格とMA間の距離を蓄積することによってカスタムインジケータインテグレータを使用してトレンド方向を判断する.論理はシンプルで明確で,バックテスト結果は良好である.より信頼性の高い実用的な適用のために統合パラメータを調整し,補助指標を追加し,自動最適化などにより改善することができる.全体的には適用可能な定量的なトレンド追跡戦略である.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=100, overlay=true)

l = input(defval=170,title="Length for indicator")
s = input(title="Length of summation",defval=29)
a= sma(close,l)
r=roc(close,l)
k=close-a
sum = 0
for i = 0 to s
    sum := sum + k[i]
plot(a,color=yellow,linewidth=2,transp=0)
//bc =  iff( sum > 0, white, teal)
//plot(sum,color=bc, transp=20, linewidth=3,style=columns)
//plot(sma(sum,3),color=white)
//hline(0)

inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na


longCondition = sum>0
exitlong = sum<0

shortCondition = sum<0
exitshort = sum>0

strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = exitlong)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong)

strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = exitshort)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)

もっと