価格に基づくストップ・ロストとテイク・プロフィート戦略

作者: リン・ハーンチャオチャン開催日:2023年11月23日15時36分
タグ:

img

概要

この戦略の主なアイデアは,インプットストップ・ロストと取利益額を使用して,合理的なストップ・ロストと取利益レベルを設定し,各取引のリスクと報酬を管理することです.

戦略の論理

戦略はまずランダムな入力信号を設定し,SMA14がSMA28を横切ったときにロングになり,SMA14がSMA28を横切ったときにショートします.

入力後,戦略は,ストップ損失ドル金額入力に基づいてストップ損失ティックレベルを計算するために moneyToSLPoints関数を使用します.同様に,利益の取付のティックレベルも計算します.これはドル金額に基づいてストップ損失と利益の取付を実装します.

例えば,ロングで100契約を10ドルで,ストップ・ロスは100ドルと設定すると,ストップ・ロスの値が100/10/100=0.1トークで計算されます.

やっとstrategy.exitストップ・ロストとテイク・プロフィート出口ポイントを設定するために使用されます.ストップ・ロストとテイク・プロフィートラインもデバッグ目的でプロットされています.

利点分析

この価格ベースのストップ・ロスト・アンド・テイク・プロフィート戦略の最大の利点は,パラメータが直感的であることです.パラメータ選択を導くためにリスクと報酬の関係が明確に見られます.

また,ドル額ストップは,市場の変動が変化するときに固定ティックストップと比較して,実際のリスク露出をよりよく制御することができます.

リスク分析

このストップ・ロストと 収益戦略にはいくつかのリスクがあります.

  1. ストップ・ロスは幅が大きすぎると,逆転に巻き込まれやすい.ストップ距離が大きすぎると,短期的な逆転が起こり,トレードに巻き込まれる.

  2. 利息の引き上げがあまりにも近い場合,それを達成するのは難しいかもしれません.利息の引き上げ距離が非常に小さい場合,通常の一方的なトレンドがそれを達成することは困難で,利益は不可能になります.

  3. 適切な契約を選択する必要があります. 原油のような高値の契約が使用されている場合,同じドルストップ損失は非常に少ないチケットに変換されます.

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

この戦略を改善するいくつかの方法:

  1. トレンド,波動性,季節性等を時間エントリにより良く組み合わせることでエントリー信号を強化することができます.

  2. 適切なストップ/利益率は,異なる製品に基づいて選択できます.高い不安定性のある商品では,より大きなストップが使用できます.

  3. ストップは変動に適応し 変動が上昇すると拡大し 変動が下がると引き締めます

  4. 異なる取引セッションでは異なるストップ/プロフィートアプローチを使用できます.米国セッションでは,ストップを絞り込み,ストップを絞り込み,ストップを絞り込みます.

結論

この戦略は,ドル金額に基づいて直感的なストップ・ロスを実施し,利益を上げます.その利点は直感的なパラメータと資本制御です.欠点は逆転や損失の利得に捕まるのが簡単です.エントリを強化し,ストップ/ターゲットを最適化し,より良い製品を選択し,より安定させることで改善することができます.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 10m
basePeriod: 1m
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/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

もっと