Strategi Breakout Ke Atas yang Kustom


Tanggal Pembuatan: 2024-01-08 10:32:25 Akhirnya memodifikasi: 2024-01-08 10:32:25
menyalin: 0 Jumlah klik: 629
1
fokus pada
1617
Pengikut

Strategi Breakout Ke Atas yang Kustom

Ringkasan

Sebuah strategi yang didasarkan pada penilaian tren harga. Strategi ini digunakan untuk menentukan apakah pasar saat ini berada dalam keadaan terus meningkat dengan menghitung proporsi garis K yang positif dalam periode tertentu. Strategi ini digunakan untuk menilai apakah pasar saat ini berada dalam kondisi naik saat proporsi garis K yang positif berada di atas batas atas yang ditetapkan oleh pengguna.

Prinsip Strategi

Strategi ini merupakan bagian dari strategi ini. Strategi ini menunjukkan bahwa harga naik dalam satu periode. Strategi ini menggunakan periode yang ditentukan oleh pengguna statistik, jumlah garis K yang mengarah ke arah K untuk semua garis K. Jika lebih besar dari batas atas, maka penilaian sedang dalam kondisi terus naik, dan melakukan plus. Jika lebih kecil dari batas bawah, maka penilaian sedang dalam kondisi terus turun, dan melakukan minus.

Contoh: pengguna mengatur siklus 20, batas atas 70 dan batas bawah 30. Strategi memutar kembali 20 garis K terbaru, jika 16 dari mereka adalah garis K yang lurus, perbandingan 1620 = 80%. Saat ini lebih tinggi dari batas atas 70 yang ditetapkan pengguna, melakukan beberapa operasi. Jika hanya 5 dari 20 garis K terbaru adalah garis K yang lurus, perbandingan 520 = 25%. Di bawah batas bawah yang ditetapkan pengguna, 30 melakukan operasi kosong.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Strategi ini sederhana, intuitif, dan mudah dipahami.
  2. Hanya membutuhkan satu indikator, mengurangi risiko over-optimisasi;
  3. Pengguna dapat menyesuaikan parameternya dengan varietas yang berbeda.
  4. Fungsi anti-kerusakan built-in untuk mencegah kerugian besar;
  5. Anda dapat melakukan transaksi langsung dengan cara terbalik, tidak perlu menunggu posisi kosong dibuka lagi, dan Anda dapat melacak pergerakan lebih cepat.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Ini adalah salah satu indikator yang paling sering digunakan di Indonesia, dan salah satu indikator yang paling sering digunakan di Indonesia.
  2. Parameter indikator mudah dioptimalkan, dan efek disk dapat bervariasi;
  3. Stop loss dapat ditembus dan menyebabkan kerugian pada saat situasi sangat bergejolak;
  4. Fitur Reverse Opening dapat meningkatkan kerugian;
  5. Efeknya sangat relevan dengan varietas dan perlu diuji secara terpisah.

Untuk mengurangi risiko, ada beberapa hal yang dapat dioptimalkan:

  1. Menambahkan kondisi penyaringan untuk menghindari sinyal yang salah;
  2. Optimalkan strategi stop loss untuk mengurangi kerugian tunggal.
  3. Mengevaluasi dan mengontrol jumlah kerugian tunggal;
  4. Hasil tes pada varietas yang berbeda.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Meningkatkan indikator penilaian tambahan seperti harga yang wajar, menghindari sinyal yang salah
  2. Mengoptimalkan cara stop loss, dapat mempertimbangkan stop loss bergerak, stop loss bergoyang, dan lain-lain
  3. Menambahkan kondisi penyaringan untuk membuka posisi, seperti menembus garis Brin dan masuk kembali
  4. Uji kesesuaian berbagai parameter K-linear positif untuk berbagai varietas
  5. Evaluasi maksimum penarikan dan pengendalian kerugian tunggal

Meringkaskan

Strategi custom break-up upstream secara keseluruhan adalah ide yang jelas dan sederhana. Strategi ini mudah dimengerti, ramah pengguna, dan cocok untuk praktik pemula dalam perdagangan kuantitatif. Namun, ada beberapa volatilitas keuntungan yang hanya bergantung pada satu indikator dan parameter.

Kode Sumber Strategi
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-04 00:00:00
period: 1m
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/
// © ZenAndTheArtOfTrading 
// © TweakerID

// Based on the calculations by ZenAndTheArtOfTrading, I added stop loss, take profit and reverse line codes.
// The Positive Bars % calculates the number of green (positive) bars, relative to a lookback period, defined 
// by the user. If the percentage is low, it means that there was a bigger number of red candles in the 
// lookback period. The strategy goes long when the percentage is high and short when it's low, although
// this logic can be reversed with positive results on different time frames.

//@version=4
strategy("Positive Bars % Strat", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

lookback = input(title="Lookback", type=input.integer, defval=13)
upperLimit = input(title="Upper Limit", type=input.integer, defval=70)
lowerLimit = input(title="Lower Limit", type=input.integer, defval=30)

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(10, step=.1, title="ATR Multiple")
i_TPRRR = input(1.6, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR

// Strategy Stop
float LongStop = na
float ShortStop = na
float StratTP = na
float StratSTP = na

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

//Calculations
positiveBars = 0
for i = (lookback - 1) to 0
    if close[i] > open[i]
        positiveBars := positiveBars + 1
positiveBarsPercent = (positiveBars / lookback) * 100

BUY=positiveBarsPercent >= upperLimit
SELL=positiveBarsPercent <= lowerLimit

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)