インディケーターを駆動するストップ・ロスト・アンド・テイク・プロフィート戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月10日11時08分06秒
タグ:

img

概要

この戦略は,移動平均を取引信号として使用し,ユーザー定義のストップ損失と利益率を組み合わせて,完全な指標駆動ストップ損失と利益戦略を実装する. 取引を入力し,ストップ損失を設定し,手動的な干渉なしに自動的に利益を得ることができ,アルゴリズム取引に適しています.

戦略の論理

この戦略の基本的な論理は

  1. 3期間のSMAを取引信号として使用し,SMAが0を超えるとロングで,SMAが0を下回るとショートします.

  2. ストップ・ロスをカスタマイズし 利益率を取ることができます

  3. ユーザーによって設定されたエントリー価格とストップロスの比率に基づいて,自動的にストップロスのラインを設定します.

  4. ユーザーによって設定されたエントリー価格と 収益率に基づいて,自動的に収益ラインを設定します.

  5. 価格がストップ・ロストラインに触ると,自動的にストップアウトします.価格が利益ラインに触ると,自動的に利益を取ります.

  6. ストップ・ロスを自動的にキャンセルして 利益の注文をします

具体的には,この戦略は,sma関数を使用して3期SMAを計算し,それをma変数に代入します.

長いエントリーラインの長さを計算し,これは ma + ma% of lo です. lo は長いエントリーラインのオフセットのためのユーザー調整可能なパラメータです.

maが0を超えると,ロングエントリーをシグナルします.戦略はロングに設定されたエントリー価格で,strategy.entry関数を使用してロングに入ります.

同時期に,ストップ・ロストとテイク・プロフィート価格が設定されます.ストップ・ロスト価格はエントリー価格マイナスエントリー価格% of sl. slはユーザー調整可能なストップ・ロスト比パラメータです.テイク・プロフィート価格はエントリー価格プラスエントリー価格% of tpです. tpはユーザー調整可能なテイク・プロフィート比パラメータです.

ストラテジー.エントリー機能は,ストップ・ロストとプロフィート・オーダーを別々に設定します.価格がストップ・ロストラインに触ると,自動的に停止します.価格がプロフィートラインに触ると,自動的にプロフィートを取ります.

ポジションを閉じる後,ストップ・ロースとテイク・プロフィートオーダーは,自動で strategy.cancel 機能を使用してキャンセルされます.

利点

この戦略の利点は

  1. 高度な自動化,手動的な干渉は必要ない アルゴリズム取引に適した

  2. リスクをコントロールするために ストップ・ロストと 収益率を調整できます

  3. トレーディング・シグナルはインジケーターから来ます 偽のブレイクを避けます

  4. 視覚化ストップ・ロストと 利益の引き上げ 直感的に

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

リスク と 解決策

この戦略にはいくつかのリスクもあります:

  1. インディケーターからの誤った信号の危険性. 解決策は,信頼性の高いインディケーターを確保するためにパラメータを最適化することです.

  2. 間違ったストップ・ロストと 利潤比率設定は 余りにも緩やかか 攻撃的すぎるかもしれません 解決策は 異なる市場に対する比率を調整することです

  3. 突破入口は罠にかかったりします 解決策は,トレンド,ボリュームなどで入口信号をフィルタリングすることです

  4. 潜在的に大きな引き下げです 解決策はポジションサイズを下げるか 遅れのストップロスを使用することです

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

戦略を最適化するためのいくつかの方向性:

  1. 移動平均のパラメータを最適化して信頼性を確保する

  2. 誤ったブレイクアウトを防ぐために 入力条件を最適化し 音量確認を追加する

  3. ストップ・ロスを最適化し,利益を得,ダイナミック・ストップ・ロスを利用する.

  4. リスク管理を最適化し ポジションのサイズを調整し 単一の取引リスクを下げる

  5. トレンド,サポート/レジスタンスなどと組み合わせてエントリータイミングを最適化します

  6. ピラミッド構造を加えることで 複合利益が得られます

  7. 特定の製品に対するパラメータ最適化

結論

この戦略は,自動化やリスク管理などの利点を持つ指標駆動ストップ損失と利益を引き出すためのシンプルで信頼できる技術的枠組みを提供します. アルゴリズム取引に適しています. インディケーターパラメータ,エントリーフィルター,ストップ損失/利益を引き出す戦略,リスク管理など,改善および最適化できる多くの側面があります. さらに拡張および最適化により,さらに強力な取引戦略になることができます.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])




もっと