インジケーター主導のストップロスとテイクプロフィット戦略


作成日: 2023-11-10 11:28:06 最終変更日: 2023-11-10 11:28:06
コピー: 1 クリック数: 728
1
フォロー
1617
フォロワー

インジケーター主導のストップロスとテイクプロフィット戦略

概要

この戦略は,移動平均を取引信号として使用し,ユーザーにカスタマイズされたストップ・ストップ比率と組み合わせて,完全な指標駆動型のストップ・ストップ戦略を実現します. この戦略は,自動的に入場,ストップ・ストップ,人工介入を必要とせず,自動取引に適しています.

戦略原則

この戦略の核となる論理は

  1. 3サイクルSMAを取引シグナルとして使用し,SMA上の0を突破すると多し,SMAの下の0を突破すると空し;

  2. ユーザは,入場後,ストップ・ロスの比率とストップ・ストップの比率をカスタマイズすることができます.

  3. 入場価格とユーザー設定の割合に応じて,自動でストップラインを設定する.

  4. 入場料とユーザの設定による停止線を自動的に設定する.

  5. 価格がストップラインに触れたときの自動ストップ; 価格がストップラインに触れたときの自動ストップ;

  6. ストップ・ストップ・オーダーは,平仓後に自動的に取り消されます.

具体的には,戦略はsma関数を使って3周期の移動平均を計算し,その値をma変数に代入する.

次に,多頭入場線longを計算し,その値は,ma+maの百分数loである. loは,ユーザが調整できるパラメータで,多時入場線偏移量を表現する.

ma が 0 に乗ると,入札を開始し,strategy.entry 関数で入札し,入札価格は long になります.

また,ストップとストップの価格を設定します. ストップの価格は入場価格のsl%を引いた入場価格です. slはユーザが調整できるパラメータで,ストップの割合を表します. ストップの価格は入場価格のtp%を足した入場価格です.

strategy.entry関数を使用して,ストップ・ロードとストップ・ロードをそれぞれ設定します. 価格がストップ・ロードラインに触れたら,自動的にストップされます. 価格がストップ・ロードラインに触れたら,自動的にストップされます.

ストップ・ロスト・オーダーを 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])