Strategi Penembusan Ke Atas Tersuai


Tarikh penciptaan: 2024-01-08 10:32:25 Akhirnya diubah suai: 2024-01-08 10:32:25
Salin: 0 Bilangan klik: 629
1
fokus pada
1617
Pengikut

Strategi Penembusan Ke Atas Tersuai

Gambaran keseluruhan

Strategi penembusan ke atas adalah strategi perdagangan kuantitatif berdasarkan penilaian pergerakan harga. Strategi ini menilai sama ada pasaran kini berada dalam keadaan kenaikan yang berterusan dengan mengira peratusan garis K ke arah kanan dalam tempoh yang ditetapkan. Apabila peratusan garis K ke arah kanan lebih tinggi daripada had atas yang ditetapkan oleh pengguna, strategi menilai kini berada dalam keadaan kenaikan, dan melakukan lebih banyak; Apabila peratusan garis K ke arah kanan adalah lebih rendah daripada had bawah yang ditetapkan oleh pengguna, strategi menilai kini berada dalam keadaan penurunan, dan melakukan ruang kosong.

Prinsip Strategi

Kaedah ini menunjukkan kenaikan harga dalam kitaran ini. Strategi ini menggunakan kitaran masa lalu yang ditentukan oleh pengguna statistik untuk menentukan peratusan jumlah garis K yang berlawanan dengan garis K. Apabila peratusan itu lebih besar daripada had atas, maka ia akan terus naik, dan apabila peratusan itu lebih kecil daripada had bawah, maka ia akan terus turun.

Contoh: Pengguna menetapkan jumlah kitaran 20, had atas 70, had bawah 30. Strategi mengulangi 20 baris K yang paling baru, jika 16 daripadanya adalah garis K yang lurus, perbandingan 1620 = 80%. Pada masa ini lebih tinggi daripada batas atas 70 yang ditetapkan oleh pengguna, lakukan beberapa operasi. Jika hanya 5 dari 20 baris K yang paling baru, perbandingan 520 = 25%. Di bawah had bawah yang ditetapkan oleh pengguna, 30, lakukan operasi kosong.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Strategi ini mudah difahami dan mudah difahami.
  2. Ia memerlukan hanya satu indikator untuk mengurangkan risiko terlalu optimum.
  3. Pengguna boleh menyesuaikan parameter untuk pelbagai jenis;
  4. Fungsi anti-kerosakan terbina dalam untuk mengelakkan kerosakan besar;
  5. Anda boleh membuat akaun secara terbalik, tanpa menunggu untuk membuka semula, dan dapat mengesan pergerakan dengan lebih cepat.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Ia adalah mudah untuk menghasilkan isyarat yang salah dengan hanya menggunakan satu petunjuk.
  2. Parameter penunjuk mudah dioptimumkan, dan kesannya mungkin berbeza;
  3. Apabila keadaan berubah-ubah, halangan boleh ditembusi dan menyebabkan kerugian;
  4. Ia boleh menyebabkan kerugian yang lebih besar.
  5. Kesan yang berkaitan dengan varieti perlu diuji secara berasingan.

Untuk mengurangkan risiko, anda boleh mengoptimumkan dalam beberapa aspek berikut:

  1. Menambah syarat penapisan untuk mengelakkan isyarat yang salah;
  2. Mengoptimumkan strategi hentikan kerugian dan mengurangkan kerugian tunggal;
  3. menilai dan mengawal jumlah kerugian tunggal;
  4. Hasil ujian dalam pelbagai jenis.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Meningkatkan penunjuk penilaian tambahan seperti harga yang munasabah, mengelakkan isyarat yang salah
  2. Mengoptimumkan cara menghentikan kerugian, boleh mempertimbangkan berhenti bergerak, berhenti bergoyang dan sebagainya
  3. Menambah syarat penapisan, seperti menembusi garis Brin dan masuk semula
  4. Uji kesesuaian parameter K-baris yang berbeza untuk pelbagai jenis
  5. Penilaian pengeluaran maksimum dan kawalan kerugian tunggal

ringkaskan

Strategi penembusan ke atas yang disesuaikan dengan konsep keseluruhan yang jelas dan mudah, menilai kenaikan atau penurunan yang berterusan melalui perbandingan statistik ke arah garis K, menangkap trend dengan menggunakan penunjuk yang mudah. Strategi ini mudah difahami, mesra pengguna, sesuai untuk amalan pemula perdagangan kuantitatif. Tetapi ada beberapa turun naik keuntungan yang bergantung kepada satu-satunya penunjuk dan parameter, strategi ini perlu terus dioptimumkan untuk risiko, supaya ia dapat memperoleh keuntungan yang stabil di lebih banyak pasaran.

Kod 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)