ダイナミックスロープトレンドライン取引戦略


作成日: 2024-02-06 11:51:14 最終変更日: 2024-02-06 11:51:14
コピー: 10 クリック数: 754
1
フォロー
1617
フォロワー

ダイナミックスロープトレンドライン取引戦略

概要

この戦略の核心思想は,動的斜率を使用して価格の傾向方向を判断し,突破判断と組み合わせて取引シグナルを生成することである.具体的には,それは価格の新しい高点と新しい低点をリアルタイムで追跡し,異なる時間帯における価格変化に基づいて動的斜率を計算し,次に価格がトレンドラインに突破した状況を組み合わせて判断する多空信号である.

戦略原則

この戦略は以下のステップで構成されています.

  1. 最高値と最低値の判断: 周期的な最高値と最低値を追跡し,創新高か新低かを判断する

  2. 動的斜率を計算する:革新的高値や新低値のK線番号を記録し,革新的高値から一定の周期 (例えば9根のK線) 以降の高値と低値の動的斜率を計算する

  3. トレンドラインの描画: 動的斜率による上昇と減少のトレンドラインの描画

  4. トレンドラインの延長と更新:価格がトレンドラインを突破すると,トレンドラインの延長と更新

  5. 取引シグナル:価格がトレンドラインを突破し,多額の判断と短縮シグナルを組み合わせる

戦略的優位性

この戦略は以下の利点があります.

  1. 動的にトレンドの方向性を判断し,市場の変化に柔軟に対応する

  2. ストップ・ロスを合理的に制御し,

  3. 突破取引のシグナルが明確で,実行が簡単

  4. パーテムをカスタマイズし,適応性がある

  5. コード構造は明確で,理解し易く,二次開発が可能です.

リスクと解決策

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

  1. トレンドが揺れ動くと,フィルタリング条件を追加することをお勧めします.

  2. 突破偽信号が多く,パラメータを適切に調整するか,フィルタ条件を追加する

  3. 状況が急激に変化する際のストップ・リスクは,ストップ・損失の幅を高めることができます.

  4. ショートライン取引に適した,最適化スペースが限られ,収益性が制限されています.

最適化の方向

この戦略の改善点には以下の項目があります.

  1. フィルタリング信号の判断に 追加された技術指標

  2. パラメータの組み合わせを最適化し,最適なパラメータを探します.

  3. リスクの低減を図るための ストップ・ローズ戦略の改善

  4. 自動で入場幅を調整する機能が追加されました.

  5. 戦略の組み合わせを試みて,より多くの機会を掘り起こします.

要約する

この戦略は,全体として,動的斜率をベースにトレンドを判断し,取引を突破する高効率のショートライン戦略である.これは,市場内のショートラインの機会を捉えるのに適した,リスクが制御可能な,正確な判断である.パラメータをさらに最適化し,フィルター条件を追加することにより,戦略の勝利率と収益レベルを向上させることができます.

ストラテジーソースコード
/*backtest
start: 2024-01-06 00:00:00
end: 2024-01-19 00:00:00
period: 2h
basePeriod: 15m
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/
// © pune3tghai

//Originally posted by matsu_bitmex

//tried adding alerts on plots and cleared the chart for a cleaner view.
//Publishing the script in hope of getting it improved by someone else.

//Added strategy code for easier calculations

//Needs work on TP and SL part.

//P.S - THE ORIGINAL CODE IS MUCH BETTER BUT I have tried to be more usable and understandable.

//@version=4
strategy("TrendLines with Alerts", overlay=true)     //study("TrendLines with Alerts", overlay=true)
//update

length1 = input(20)
check = input(9)
//length2 = input(200)


u=0.0
u := u[1]

l=0.0
l := l[1]

y=0.0
y := y[1]

yl=0.0
yl := yl[1]

angle = 0.0
angle := angle[1]

anglel = 0.0
anglel := anglel[1]

if (highest(length1) == high[check] and highest(length1) == highest(length1)[check] and barssince(barstate.isfirst) > check)
    u := high[check]

    
if (lowest(length1) == low[check] and lowest(length1) == lowest(length1)[check] and barssince(barstate.isfirst) > check)
    l := low[check]
    

    
p = round(barssince(u == high[check]))

pl = round(barssince(l == low[check]))

if p == 0 and barssince(barstate.isfirst) > check
    y := high[abs(p[1]+1+check)]
    
if pl == 0 and barssince(barstate.isfirst) > check
    yl := low[abs(pl[1]+1+check)]    
    

if p == 0
    angle := (u-y)/p[1]

if pl == 0
    anglel := (l-yl)/pl[1]

uppertrend = u+ (p * angle)

lowertrend = l+ (pl * anglel)

extendup = if barssince(barstate.isfirst) > check
    uppertrend[check] + angle[check] * check*2

extenddown = if barssince(barstate.isfirst) > check
    lowertrend[check] + anglel[check] * check*2




//plot(l[offset]-u,color=red)
//plot(u[offset]-l,color = green )
plot(lowertrend, color = color.green, transp=30,offset = -check)
plot(extenddown, color = color.green, transp=100)
plot(uppertrend, color = color.red, transp=30, offset = -check)
plot(extendup, color = color.red, transp=100)
//plot(l[offset], color = red)

l1 = lowertrend
l2 = extenddown
u1 = uppertrend
u2 = extendup



l2sell = crossunder(high, l2)
u2buy = crossover(low, u2)
buy1 = (low<=lowertrend) and open>lowertrend and high>lowertrend and close>lowertrend
buy2 = (low<=extenddown) and open>extenddown and high>extenddown and close>extenddown
buy = buy1 or buy2 or u2buy
plotshape(series=buy, title="Buy", style=shape.triangleup, size=size.tiny, color=color.lime, location=location.belowbar)
sell1 = (high>=uppertrend) and open<uppertrend and low<uppertrend and close<uppertrend
sell2 = (high>=extendup) and open<extendup and low<extendup and close<extendup
sell = sell1 or sell2 or l2sell
plotshape(series=sell, title="Sell", style=shape.triangledown, size=size.tiny, color=color.red, location=location.abovebar)

longCond = buy
shortCond = sell

tp = input(0.2, title="Take Profit")

tpbuyval = valuewhen(buy, close, 1) + (tp/100)*(valuewhen(buy, close, 1))
tpsellval = valuewhen(sell, close, 1) - (tp/100)*(valuewhen(sell, close, 1))


sl = input(0.2, title="Stop Loss")
slbuyval = valuewhen(buy, close, 0) - (sl/100)*(valuewhen(buy, close, 0))
slsellval = valuewhen(sell, close, 0) + (sl/100)*(valuewhen(sell, close, 0))
// === STRATEGY ===
tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

// stop loss
slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0)
tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0)

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//

testStartYear = input(2019, "Backtest Start Year", minval=1980)
testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12)
testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31)
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year", minval=1980)
testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12)
testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na

// Make sure we are within the bar range, Set up entries and exit conditions
if testPeriod() and tradeType != "NONE"
    strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT")
    strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG")
    strategy.close("long", when=shortCond == true and tradeType == "LONG")
    strategy.close("short", when=longCond == true and tradeType == "SHORT")
    strategy.exit("XL", from_entry="long", profit=tpbuyval, loss=slbuyval)
    strategy.exit("XS", from_entry="short", profit=tpsellval, loss=slsellval)

// === /STRATEGY ===
//EOF


////ALERT SYNTEX
//alertcondition(longCond, title="Long", message="Killer Market")
//alertcondition(shortCond, title="Short", message="Poopy Market")