価格ギャップに基づくトレーリングストップロス戦略


作成日: 2023-11-28 13:53:16 最終変更日: 2023-11-28 13:53:16
コピー: 0 クリック数: 655
1
フォロー
1617
フォロワー

価格ギャップに基づくトレーリングストップロス戦略

概要

この戦略は,価格の隙間原理を採用し,低点を破るときに買い,最低価格のストップロスを追跡し,利益を上げるため,ストップロスとストップオフを設定します.

戦略原則

価格が最近N時間の最低値を下回ったときの位置間隔は,設定されたパーセントに従って多進し,同時にストップとストップの指示を設定します.その後,市場状況に応じてストップラインとストップラインを移動します.具体的ロジックは次のとおりです.

  1. N時間間の最低値をバインド価格として計算します.
  2. リアルタイム価格は,固定価格より低い価格で,購入の設定パーセントで追加入場をします.
  3. セットストップは入場価格にセットセールパーセントを掛けます.
  4. ストップを設定します. 入場価格の1分の入場価格の倍数とストップのパーセント.
  5. 多数単位の戦略権益の割合
  6. 最低価格の移動ストップラインを追跡する
  7. ストップ・ストップ・ストップ

戦略的優位分析

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

  1. 価格ギャップの考え方を採用し,低位を突破して入場し,勝利率を上げます.
  2. 自動トラッキングのストップ・ロスは,利益のほとんどを閉じ込めることができます.
  3. 設定可能なストップ・ストップ・損失比率,異なる市場に対応
  4. 明らかに回転特性を有する品種に適用される
  5. 操作が簡単で実行しやすい

戦略的リスク分析

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

  1. ギャップを突破しても成功しないかもしれない.
  2. 停止または停止の設定が不適切である場合,早すぎる停止または停止により大きな損失を招く可能性があります
  3. 市場の変化に対応するためにパラメータを定期的に最適化する必要があります.
  4. 限られた品種で,一部の品種では効果が悪くなる可能性がある
  5. 人工的な介入が必要である

戦略最適化の方向性

この戦略は,以下の点で最適化できます.

  1. 機械学習アルゴリズムを追加し,パラメータの自動最適化を実現する.
  2. 移動式止損,吊り式止損など,より多くの止損方法を追加する
  3. 停止停止の論理を最適化して,よりスマートでスムーズな停止停止を実現
  4. 信号の信頼性を判断する指数と,誤信号をフィルターする指数
  5. より多くの品種を対象に拡大し,戦略の普遍性を向上させる

要約する

この戦略は,全体として,価格ギャップ思想に基づいたシンプルで効果的な追跡ストップ・ロスの戦略である.誤入場の可能性を軽減し,利益を効果的にロックすることができ,パラメータ最適化とフィルタリングの面で大きな最適化の余地があり,さらなる研究と改善に値する.

ストラテジーソースコード
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Squeeze Backtest by Shaqi v1.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0)
strategy.risk.allow_entry_in(strategy.direction.long)

R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"


buyPercent = input( title="Buy, %",         type=input.float,   defval=3,       minval=0.01,                        step=0.01,  inline="Percents",  group="Squeeze Settings") * 0.01
sellPercent = input(title="Sell, %",        type=input.float,   defval=1,       minval=0.01,                        step=0.01,  inline="Percents",  group="Squeeze Settings") * 0.01
stopPercent = input(title="Stop Loss, %",   type=input.float,   defval=1,       minval=0.01,        maxval=100,     step=0.01,  inline="Percents",  group="Squeeze Settings") * 0.01
isMaxBars = input(  title="Max Bars To Sell",               type=input.bool,    defval=true ,                                   inline="MaxBars",   group="Squeeze Settings")
maxBars = input(    title="",       type=input.integer, defval=2,     minval=0,           maxval=1000, step=1,                  inline="MaxBars",   group="Squeeze Settings")
bind = input(       title="Bind",           type=input.source,  defval=close,                                                                       group="Squeeze Settings")
isRange = input(    title="Fixed Range",               type=input.bool,    defval=true,                                         inline="Range",     group="Backtesting Period")
rangeStart = input( title="",                       defval=R4,      options=[R0, R1, R2, R3, R4, R5, R6, R7],                   inline="Range",     group="Backtesting Period")
periodStart = input(title="Backtesting Start", type=input.time,    defval=timestamp("01 Aug 2021 00:00 +0000"),                                     group="Backtesting Period")
periodEnd = input(  title="Backtesting End",   type=input.time,    defval=timestamp("01 Aug 2022 00:00 +0000"),                                     group="Backtesting Period")

int startDate = na
int endDate = na
if isRange
    if rangeStart == R0
        startDate := timenow - 21600000
        endDate := timenow
    else if rangeStart == R1
        startDate := timenow - 43200000
        endDate := timenow
    else if rangeStart == R2
        startDate := timenow - 86400000
        endDate := timenow
    else if rangeStart == R3
        startDate := timenow - 172800000
        endDate := timenow
    else if rangeStart == R4
        startDate := timenow - 604800000
        endDate := timenow
    else if rangeStart == R5
        startDate := timenow - 1209600000
        endDate := timenow
    else if rangeStart == R6
        startDate := timenow - 2592000000
        endDate := timenow
    else if rangeStart == R7
        startDate := time
        endDate := timenow
else 
    startDate := periodStart
    endDate := periodEnd

afterStartDate = (time >= startDate)
beforeEndDate = (time <= endDate)
notInTrade = strategy.position_size == 0
inTrade = strategy.position_size > 0

barsFromEntry = barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
buyLimitPrice = bind - bind * buyPercent
buyLimitFilled = low <= buyLimitPrice
sellLimitPriceEntry = buyLimitPrice * (1 + sellPercent)
sellLimitPrice = strategy.position_avg_price * (1 + sellPercent)

stopLimitPriceEntry = buyLimitPrice - buyLimitPrice * stopPercent
stopLimitPrice = strategy.position_avg_price - strategy.position_avg_price * stopPercent

if afterStartDate and beforeEndDate and notInTrade
    strategy.entry("BUY", true, limit = buyLimitPrice)
    strategy.exit("INSTANT", limit = sellLimitPriceEntry, stop = stopLimitPriceEntry)
strategy.cancel("INSTANT", when = inTrade)
if isMaxBars
    strategy.close("BUY", when = barsFromEntry >= maxBars, comment = "Don't Sell")
strategy.exit("SELL", limit = sellLimitPrice, stop = stopLimitPrice)

showStop = stopPercent <= 0.03

plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", style=plot.style_linebr, color=color.red, linewidth=1)
plot(sellLimitPrice, title="Take Profit Limit Order", style=plot.style_linebr, color=color.purple, linewidth=1)
plot(strategy.position_avg_price, title="Buy Order Filled Price", style=plot.style_linebr, color=color.blue, linewidth=1)
plot(buyLimitPrice, title="Trailing Buy Limit Order", style=plot.style_stepline, color=color.new(color.blue, 30), offset=1)