価格ベースのストップロスとテイクプロフィット戦略


作成日: 2023-11-23 15:36:00 最終変更日: 2023-11-23 15:36:00
コピー: 0 クリック数: 675
1
フォロー
1621
フォロワー

価格ベースのストップロスとテイクプロフィット戦略

概要

この戦略の核心思想は,入力のストップ・ロスの額を利用して,合理的なストップ・ロスのポイントを設定し,各取引に対するリスクと利益の管理である.

戦略原則

この戦略は,まずランダムな入場信号を設定し,SMA14の上からSMA28を通るときは多,SMA14下からSMA28を通るときは空にする.

入場後,策略はmoneyToSLPoints関数を使用して,入力された金額に基づいて,対応するストップポイントを計算し,同様にストップポイントを計算する.このようにして,ドル金額に基づくストップポイントの設定を実現する.

例えば,入場が100本以上で,1ポイントが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)