Squeeze Backtest Transformers v2.0


Tarikh penciptaan: 2024-04-28 14:09:26 Akhirnya diubah suai: 2024-04-28 14:09:26
Salin: 0 Bilangan klik: 536
1
fokus pada
1617
Pengikut

Squeeze Backtest Transformers v2.0

Gambaran keseluruhan

Scalping Retracement Transform Gold v2.0 adalah sistem perdagangan kuantitatif berdasarkan strategi jenis tekanan. Ia melakukan pengesanan balik terhadap strategi dalam jangka masa tertentu dengan menetapkan parameter seperti masuk, stop loss dan stop loss peratusan, dan masa memegang kedudukan maksimum.

Prinsip Strategi

  1. Mula-mula, anda perlu menentukan masa permulaan dan akhir pengukuran berdasarkan parameter tempoh pengukuran yang ditetapkan oleh pengguna.
  2. Dalam tempoh pengkajian semula, jika tidak ada kedudukan yang dipegang pada masa ini dan harga menyentuh harga masuk ((berdasarkan peratusan pembukaan kedudukan), maka kedudukan dibuka dan harga berhenti dan berhenti ditetapkan pada masa yang sama ((berdasarkan peratusan berhenti dan berhenti).
  3. Jika sudah memegang kedudukan, membatalkan perintah hentian dan kerugian yang terdahulu, dan menetapkan semula harga hentian dan kerugian yang baru ((dihitung berdasarkan harga purata kedudukan semasa)
  4. Jika anda telah menetapkan tempoh maksimum untuk memegang kedudukan, maka anda akan dipaksa untuk melonggarkan kedudukan apabila tempoh memegang kedudukan mencapai nilai maksimum.
  5. Strategi ini menyokong kedua-dua arah dagangan, baik dalam bentuk dagangan berganda mahupun dagangan kosong.

Kelebihan Strategik

  1. Tetapan parameter fleksibel, boleh disesuaikan dengan keadaan pasaran yang berbeza dan keperluan perdagangan.
  2. Ia menyokong perdagangan pelbagai arah, yang boleh memperoleh keuntungan dalam keadaan pasaran yang berbeza.
  3. Terdapat banyak pilihan tetapan tempoh pengesanan semula yang membolehkan pengesanan semula dan analisis data sejarah dengan mudah.
  4. Pengaturan hentikan dan hentikan kerugian dapat mengawal risiko dengan berkesan dan meningkatkan kecekapan penggunaan dana.
  5. Tetapan masa pegangan maksimum dapat mengelakkan risiko pasaran dari pegangan yang terlalu lama.

Risiko Strategik

  1. Tetapan harga masuk, harga henti rugi dan harga henti terhalang mempunyai kesan besar terhadap keuntungan strategi, dan tetapan parameter yang tidak betul boleh menyebabkan kerugian.
  2. Apabila pasaran berubah-ubah dengan ketara, mungkin berlaku keadaan yang mencetuskan hentian kerugian segera selepas membuka kedudukan, yang menyebabkan kerugian.
  3. Jika anda mencetuskan kedudukan maksimum semasa memegang posisi, anda mungkin akan kehilangan peluang untuk mendapatkan keuntungan.
  4. Strategi ini mungkin tidak berfungsi dengan baik dalam keadaan tertentu (seperti pasaran yang bergolak).

Arah pengoptimuman strategi

  1. Anda boleh mempertimbangkan untuk memperkenalkan lebih banyak penunjuk teknikal atau penunjuk sentimen pasaran, mengoptimumkan syarat masuk, hentikan dan berhenti, meningkatkan kestabilan dan keuntungan strategi.
  2. Untuk tetapan masa pegangan maksimum, ia boleh disesuaikan secara dinamik mengikut turun naik pasaran dan kehilangan pegangan, untuk mengelakkan kos peluang yang mungkin dibawa oleh pegangan waktu tetap.
  3. Untuk ciri-ciri pasaran yang bergolak, logik seperti penembusan dalam zon golak atau pengesahan perubahan trend boleh dimasukkan, untuk mengurangkan kos yang disebabkan oleh perdagangan yang kerap.
  4. Pertimbangkan untuk memasukkan strategi pengurusan kedudukan dan pengurusan wang, mengawal risiko perdagangan tunggal, meningkatkan kecekapan penggunaan dana dan kestabilan.

ringkaskan

V2.0 adalah sistem perdagangan kuantitatif berdasarkan strategi jenis tekanan, yang boleh diperdagangkan dalam pelbagai keadaan pasaran melalui tetapan parameter yang fleksibel dan sokongan perdagangan pelbagai arah. Pada masa yang sama, pilihan tetapan tempoh pengujian yang kaya dan tetapan stop-loss boleh membantu pengguna dalam analisis data sejarah dan kawalan risiko. Namun, prestasi strategi dipengaruhi oleh tetapan parameter yang lebih besar, yang memerlukan pengoptimuman dan penambahbaikan untuk meningkatkan kestabilan dan keuntungan strategi mengikut ciri-ciri pasaran dan keperluan perdagangan.

Kod sumber strategi
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title="Squeeze Backtest by Shaqi v2.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)
R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"

BL = "low"
BH = "high"
BO = "open"
BC = "close"
BHL= "mid (hl)"
BOC = "mid (oc)"

LONG = "LONG"
SHORT = "SHORT"

direction = input.string(title="Direction", defval=LONG, options=[LONG, SHORT], group="Squeeze Settings")
strategy.risk.allow_entry_in(direction == LONG ? strategy.direction.long : strategy.direction.short)
openPercent = input.float(1.4, "Open, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
closePercent = input.float(0.6, "Close, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
stopPercent = input.float(0.8, "Stop Loss, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
isMaxBars = input.bool(true, "Max Bars To Sell", inline="MaxBars", group="Squeeze Settings")
maxBars = input.int(10, title="", minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings")
bind = input.string(BC, "Bind", options=[BL, BH, BO, BC, BHL, BOC], group="Squeeze Settings")
isRange = input.bool(true, "Fixed Range", inline="Range", group="Backtesting Period")
rangeStart = input.string(R2, "", options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period")
periodStart = input(timestamp("12 Apr 2024 00:00 +0000"), "Backtesting Start", group="Backtesting Period")
periodEnd = input(timestamp("20 Apr 2024 00:00 +0000"), "Backtesting End", 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
    
float bindOption = na
if bind == BL
    bindOption := low
else if bind == BH
    bindOption := high
else if bind == BO
    bindOption := open
else if bind == BC
    bindOption := close
else if bind == BHL
    bindOption := hl2
else
    bindOption := ohlc4

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

barsFromEntry = ta.barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
openLimitPrice = direction == LONG ? (bindOption - bindOption * openPercent) : (bindOption + bindOption * openPercent)

closeLimitPriceEntry = openLimitPrice * (direction == LONG ? 1 + closePercent : 1 - closePercent)
closeLimitPrice = strategy.position_avg_price * (direction == LONG ? 1 + closePercent : 1 - closePercent)

stopLimitPriceEntry = direction == LONG ? openLimitPrice - openLimitPrice * stopPercent : openLimitPrice + openLimitPrice * stopPercent
stopLimitPrice = direction == LONG ? strategy.position_avg_price - strategy.position_avg_price * stopPercent : strategy.position_avg_price + strategy.position_avg_price * stopPercent

if periodCondition and notInTrade
    strategy.entry(direction == LONG ? "BUY" : "SELL", direction == LONG ? strategy.long : strategy.short, limit = openLimitPrice, stop = stopLimitPriceEntry)
    strategy.exit("INSTANT", limit = closeLimitPriceEntry, stop = stopLimitPriceEntry, comment_profit = direction == LONG ? 'INSTANT SELL' : 'INSTANT BUY', comment_loss = 'INSTANT STOP')
if inTrade 
    strategy.cancel("INSTANT")
    strategy.exit(direction == LONG ? "SELL" : "BUY", limit = closeLimitPrice, stop = stopLimitPrice, comment_profit = direction == LONG ? "SELL" : "BUY", comment_loss = "STOP")
if isMaxBars and barsFromEntry == maxBars
    strategy.close_all(comment = "TIMEOUT STOP", immediately = true)



showStop = stopPercent <= 0.20

// plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=1)
// plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=1)
// plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=1)
plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=0)
plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=0)
plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=0)

plot(openLimitPrice, title="Trailing Open Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.blue : color.red, 30), offset=1)
plot(closeLimitPriceEntry, title="Trailing Close Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.red : color.blue, 80), offset=1)
plot(stopLimitPriceEntry, title="Trailing Stop Position Limit Order", style=plot.style_stepline, color=color.new(#c50202, 80), offset=1)