トレンドフォロー戦略とストップロスの追跡

作者: リン・ハーンチャオチャン, 日付: 2023年10月30日 15:21:54
タグ:

img

概要

この戦略は,トレンドフォローとトライリングストップ損失を組み合わせ,利益のトレンドを継続的に走る利潤論理を採用する. 価格がMAラインを突破したとき,トレンド方向を決定し,取引信号を生成するために移動平均を使用する. ロングポジションに入ると,戦略はATR値に基づいてストップ損失を設定し,トレンドをフォローするためにトライリングストップ損失論理で調整する. 価格が一定のレベルに上昇すると,一部の利益をロックするために部分的な利益が必要になる.

戦略の論理

  1. バックテスト開始と停止タイムスタンプを ユーザ入力に基づいて設定します

  2. ストップ価格と%を初期化します

  3. 価格がMA線を超えるとロングに入ります.

  4. ATRでストップ損失距離を計算し,ストップ損失価格を設定します.

  5. 価格が上昇し続けると 利益が増えるように ストップ損失を上げます

  6. 価格が利益の限界に達すると 部分的な利益を得ます

  7. 価格がMA線を下回るとショートに入ります.

  8. ATRでストップ損失距離を計算し,ストップ損失価格を設定します.

  9. 価格が下がるにつれて 損失を減らし より多くの利益を得ます

  10. 価格が利益の限界に達すると 部分的な利益を得ます

利点

  • ストップロスはトレンドをフォローし 利益を守っている間に 利益を増やすことができます

  • 動的ATRストップ損失は固定ストップ損失よりも市場の変動に反応する.

  • 部分的な利益は 利益の一部を固定し 引き上げリスクを軽減します

  • シンプルで明快な論理で 分かりやすく実行できます

リスク

  • 急なトレンド逆転は,大きなストップ・ロスト距離で大きな損失を引き起こす可能性があります.

  • ATR によるストップ損失は過度に敏感で 早期に停止される可能性があります

  • 誤った部分的取利益比は,傾向を見逃したり損失を増やす可能性があります.

  • ATR期間のように多くのパラメータを最適化する必要があります 遅れの割合 利益率

  • 戦略はMAとATRだけに依存する 間違った信号が起こる可能性があります

最適化

  • MACD,KDなどの他の指標を追加して取引信号をフィルターし,間違ったMA信号を避ける.

  • 動的利益率を考えてみましょう トレンド強度に基づいて

  • 最適な安定性のために異なるATR期間をテストするか,ストップ損失のために他の指標を使用してください.

  • マシン学習を導入して パラメータを自動最適化し 動的に調整します

  • ディープラーニングモデルを使って 傾向を検出し 自動的に信号を生成します

概要

この戦略は,トレンドをフォローし,引き下げを制御するために,トライリングストップロスト,ダイナミックATRストップロスト,および部分的なテイク・プロフィートを統合している.しかし,単純なトレンド検出や難しいパラメータ最適化などのいくつかの制限がある.これは,安定性と収益性を高めるためにより多くの技術と指標を使用して戦略をさらに改善するための良い方向性を提供します.全体として,ライブ取引のためのストップロストとテイク・プロフィートメカニズムを設計するための良い参照を提供します.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
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/
// © felipefs

//@version=4
strategy("Meu Script", overlay=true)
plot(ohlc4)

//Funçao de Datas
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(6, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false

//Funções de Trailing Stop
long_stop_price = 0.0
short_stop_price = 0.0
long_trail_perc = 0
short_trail_perc = 0

long_stop_price := if (strategy.position_size > 0)
    stopValue = close * (1 - long_trail_perc)
    max(stopValue, long_stop_price[1])
else
    0

short_stop_price := if (strategy.position_size < 0)
    stopValue = close * (1 + short_trail_perc)
    min(stopValue, short_stop_price[1])
else
    999999

//Função de Debug
debug(value) =>
    x = bar_index
    y = close
    label.new(x, y, tostring(value))
    
//Take Profit
profit = close * (1 + 0.12)
strategy.entry("Long", true)
strategy.exit("Take Profit 1 Long", from_entry="Long", limit=profit, qty_percent=50.0)
 
//ATR Stop
 
// xATRTrailingStopLong = 0.0
// xATR = atr(nATRPeriod)
// nLossLong = nATRMultipLong * xATR

// if (strategy.position_size > 0)
//     xATRTrailingStopLong := max(nz(xATRTrailingStopLong[1]), close - nLossLong)

もっと