Strategi dagangan jangka pendek mengikut trend


Tarikh penciptaan: 2024-01-04 17:52:21 Akhirnya diubah suai: 2024-01-04 17:52:21
Salin: 0 Bilangan klik: 588
1
fokus pada
1621
Pengikut

Strategi dagangan jangka pendek mengikut trend

Gambaran keseluruhan

Strategi ini didasarkan pada indikator trend penilaian ADX rata-rata indeks trend dan kombinasi garis rata, untuk membuat keputusan dan menjejaki trend. Apabila keputusan muncul trend berbalik, gunakan operasi pecah, melakukan perdagangan garis pendek.

Prinsip Strategi

  1. Menggunakan ADX rata-rata indeks trend untuk menentukan arah trend. Apabila ADX lebih besar daripada 20, ia menunjukkan bahawa ia kini berada dalam keadaan trend.
  2. EMA digunakan sebagai penunjuk trend, EMA Gold Fork menunjukkan trend menaik, dan Fork Mati menunjukkan trend menurun.
  3. VWAP sebagai harga rujukan penting, harga di atas VWAP adalah pasaran bertopeng, di bawahnya adalah pasaran kosong.
  4. Berdasarkan pelbagai petunjuk di atas untuk menilai trend dan pembalikan pasaran, melakukan operasi pecah, mengikuti trend untuk melakukan perdagangan pendek.

Analisis kelebihan

  1. Menggabungkan pelbagai petunjuk untuk menentukan arah trend, keputusan mengenai trend besar adalah tepat.
  2. VWAP sebagai harga rujukan penting untuk mengelakkan perdagangan di zon tidak sah.
  3. ADX menilai bahawa terdapat trend dan bertindak untuk mengurangkan perdagangan yang tidak sah.
  4. Operasi penembusan berjaya dengan kadar yang lebih tinggi, mengikut trend operasi.

Analisis risiko

  1. Kemungkinan kegagalan penembusan menyebabkan kemusnahan. Risiko boleh dikurangkan dengan mengoptimumkan kedudukan kemusnahan.
  2. Lebih banyak kali dagangan, satu dagangan mungkin mengalami kerugian. Anda boleh menyesuaikan jumlah kedudukan dengan sewajarnya, mengurangkan peratusan kerugian tunggal.
  3. Pilihan masa perdagangan dan jenis perdagangan juga mempengaruhi prestasi strategi. Anda boleh menguji masa perdagangan yang berbeza dan jenis perdagangan yang berbeza.

Arah pengoptimuman

  1. Mengoptimumkan parameter ADX untuk mencari trend yang lebih baik dan nilai ADX yang disusun.
  2. Mengoptimumkan kombinasi parameter garis rata untuk mencari kombinasi garis rata yang lebih baik yang mewakili trend.
  3. Mengoptimumkan kedudukan hentian. Melepaskan julat hentian yang sesuai untuk mengelakkan kos hentian yang terlalu tinggi.
  4. Mengoptimumkan saiz kedudukan. Mengurangkan risiko perdagangan tunggal.

ringkaskan

Strategi ini menggunakan indikator garis rata, indikator penghakiman trend dan harga rujukan penting untuk membuat penghakiman yang tepat mengenai trend besar; dan apabila trend berubah, gunakan operasi pemecahan untuk menjejaki trend dan melakukan perdagangan garis pendek. Dengan pengoptimuman parameter, anda dapat meningkatkan prestasi strategi.

Kod sumber strategi
/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
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/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)