ストップ・ロストとテイク・プロフィートのトレンドフォロー戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-21 14:55:41
タグ:

img

概要

この戦略の主な考え方は,週間の価格動向に基づいて,ロングとショートの方向性を決定することです. 上向きの傾向では,上昇したキャンドルスティックパターンがあるときにロングになります. 価格が既定の利益レベルに上昇すると利益を得,既定のストップ損失レベルに落ちると損失を止めます.

戦略の論理

戦略はまず,週間の傾向を判断するための条件を定義します.

isUptrend = close > close[1]
isDowntrend = close < close[1] 

現在の閉店率が前回の閉店値より高くなった場合,上向きだと判断されます.そうでなければ,下向きです.

次に,日中取引信号を定義します.

buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend

つまり,前回の閉店は前回の開店 (バリーッシュキャンドル) より高く,前回の開店は前日の閉店 (ギャップアップ) より高く,上昇傾向にあります.これらの基準はロングエントリー条件を満たします.

ポジションに入ると,ストップロスは前日の実質値の1.382倍をマイナス1倍に設定します.

stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())

利益を取ることは,前回の閉店と前回の閉店とストップ損失の2倍の差額に設定されます.

takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)

ストップ・ロストと利益の戦略が実現します

利点分析

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

  1. トレンドに沿った取引は,反トレンドのショート取引のリスクを回避する
  2. エントリーシグナルは,早急なロングエントリーを避けるために,上昇するキャンドルとギャップを組み合わせます.
  3. ストップ・ロスのポジションは,単一の損失を制御するために合理的です.
  4. 利益の範囲は大きいし,利益の可能性も高い

リスク分析

リスクもあります:

  1. トレンドの逆転点を特定できず,ターニング機会を見逃す可能性があります
  2. ストップ・ロスは近づいてしまい 閉じ込められる可能性が高くなります
  3. コスト管理は考慮しない 高い取引頻度で利益は減少する

これらのリスクを制御するために,いくつかの最適化を検討することができます:

  1. ストップ・ロスの近くにトレーラーを設定してストップ・ロスを追跡する
  2. 注文頻度を制限するコスト制御モジュールを追加する
  3. サポート/抵抗の判断を加える

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

また,戦略は以下の方法で最適化できます.

  1. MAの方向,ボリュームの変化など,より多くの要因に基づいて傾向を決定します.
  2. より多くのキャンドルスタイクパターンでエントリー信号を最適化
  3. 価格変動に応じて,ストップ損失を動的に追跡し,利益を取ります.
  4. 制御位置サイズに定量モジュールを追加する
  5. 高水準の傾向に基づいてフィルタリングする複数のタイムフレームの組み合わせ

概要

一般的に,これは非常に実践的な戦略であり,リスクを制御しながらトレンドに沿って取引を強調する.これは基本的な日中取引戦略として機能し,多様な取引ポートフォリオを作成するために異なる市場や製品にモジュール的に最適化することができます.実際の使用では,コストを制御し,罠を避けることは依然として重要です.したがって適切なメンタリティを維持することは重要です.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trend Following Strategy with Stop Loss and Take Profit", overlay=true)

// Function to get previous day's close and open
getPrevDayClose() =>
    request.security(syminfo.tickerid, "D", close[1])

getPrevDayOpen() =>
    request.security(syminfo.tickerid, "D", open[1])

// Determine weekly trend
isUptrend = close > close[1]
isDowntrend = close < close[1]

// Determine daily conditions for buy
buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend

// Calculate stop loss and take profit
stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())
takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)

// Strategy logic
if (isUptrend)
    strategy.entry("Buy", strategy.long, when = buyCondition)
    strategy.exit("Take Profit/Stop Loss", from_entry="Buy", loss=stopLoss, profit=takeProfit)
    
if (isDowntrend)
    strategy.entry("Sell", strategy.short)

// Plotting the trend on the chart
plotshape(series=isUptrend, title="Uptrend", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=isDowntrend, title="Downtrend", color=color.red, style=shape.triangledown, location=location.belowbar)

// Plotting stop loss and take profit levels on the chart
plot(stopLoss, color=color.red, title="Stop Loss", linewidth=2, style=plot.style_cross)
plot(takeProfit, color=color.green, title="Take Profit", linewidth=2, style=plot.style_cross)


もっと