Strategi indikator panjang dan pendek


Tanggal Pembuatan: 2023-09-25 17:34:46 Akhirnya memodifikasi: 2023-09-25 17:34:46
menyalin: 5 Jumlah klik: 909
1
fokus pada
1617
Pengikut

Ringkasan

Gagasan inti dari strategi ini adalah menggabungkan indikator multiscale dengan rata-rata bergerak dasar, untuk mencapai trend tracking dan trend reversal trading. Ketika harga dan indikator selaras, gunakan trend tracking; Ketika harga dan indikator berlawanan, gunakan reversal trading.

Prinsip Strategi

Strategi ini didasarkan pada tiga indikator khusus:

  1. Indikator overhead ((Trend): menghitung hubungan antara harga dan saluran overbought overbought, menilai tren overhead dan overhead, mengembalikan tiga keadaan 1, 0, -1.

  2. Overbought and oversold channel (Tsl): Referensi ATR dihitung atas dan bawah rel, harga yang menembus rel atas dianggap sebagai overbought, dan yang menembus rel bawah dianggap sebagai oversold.

  3. Baseline Moving Average ((MA): Perhitungan harga close-out selama 20 periode Simple Moving Average (SMVA).

Secara khusus, strategi berdasarkan nilai indikator kosong menilai harga berada dalam kondisi overhead, bergoyang atau kosong. Ketika indikator kosong adalah 1, mewakili berada dalam kondisi overhead; Ketika indikator kosong adalah -1, mewakili kondisi kosong. Saat ini jika harga sesuai dengan arah indikator, maka mengambil strategi pelacakan tren, melakukan lebih banyak shorting pada titik yang sesuai.

Selain itu, harga menembus Moving Average juga berfungsi sebagai sinyal tambahan untuk mengarahkan arah perdagangan. Harga naik saat melewati rata-rata dan turun saat melewati rata-rata.

Strategi transaksi multi-head secara spesifik adalah sebagai berikut:

  1. Indikator overhead > 0, harga naik menerobos jalur, termasuk dalam kondisi trend tracking, lakukan lebih lanjut.

  2. Indikator overhead < 0, harga turun menembus downtrend, termasuk dalam keadaan reversal tren, overhead.

  3. Harga penutupan > Harga pembukaan > Titik pusat, dianggap sebagai peluang untuk melakukan lebih banyak, melakukan lebih banyak untuk menembus pusat.

  4. Harga penutupan menembus jalur, dan harga penutupan > rata-rata bergerak, lakukan lebih banyak.

Strategi trading tanpa modal adalah sebagai berikut:

  1. Indikator multi-kaca < 0, harga turun menembus downtrend, termasuk dalam kondisi trend tracking, melakukan shorting.

  2. Indikator overhead > 0, kenaikan harga menerobos jalur, termasuk dalam keadaan pembalikan tren, lakukan lebih banyak.

  3. Opening price > Closing price < titik pusat, dianggap sebagai peluang untuk melakukan shorting di titik pusat, melakukan shorting

  4. Penutupan harga terjatuh ke bawah, dan harga penutupan < Moving Average, berkurang.

Strategi yang lebih sederhana adalah dengan menghentikan kerugian melalui penembusan harga kembali ke saluran overbought dan oversold.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Indikator multispace dapat digunakan untuk menilai pergerakan pasar secara akurat dan merupakan indikator utama strategi.

  2. Overbought dan oversold channel, jika digabungkan dengan indikator, dapat mendeteksi potensi peluang untuk reversal.

  3. Rata-rata bergerak dasar dapat digunakan sebagai sinyal penyaringan tambahan untuk menghindari terobosan palsu.

  4. Titik pusat menggabungkan indikator polygonal untuk membentuk titik perdagangan probabilitas tinggi.

  5. Dengan kemampuan untuk melacak tren dan membalikkan perdagangan, peluang untuk mendapatkan keuntungan lebih banyak.

  6. Overbought dan oversold channel stop loss jelas dan ringkas, membantu dalam pengendalian risiko.

Analisis risiko

Strategi ini juga memiliki risiko sebagai berikut:

  1. Indikator multispace dapat memberikan sinyal yang salah dan perlu difilter dengan kombinasi indikator lainnya.

  2. Penembusan perdagangan mudah ditiru dan membutuhkan stop loss yang ketat.

  3. Periode rata-rata bergerak tidak diatur dengan benar, dan mungkin akan kehilangan tren atau menghasilkan sinyal palsu.

  4. Titik pusat memerlukan pengujian ulang untuk memverifikasi keandalan probabilitas.

  5. Saluran overbuy oversell membutuhkan parameter yang dioptimalkan untuk menyesuaikan dengan varietas yang berbeda.

  6. Parameter indikator tidak cocok, yang dapat menyebabkan perdagangan yang sering.

Untuk mengatasi risiko tersebut, langkah-langkah berikut dapat diambil:

  1. Dalam kombinasi dengan indikator lain seperti K-line, verifikasi kuantitas transaksi sinyal indikator polygon.

  2. Berpegang teguh pada strategi stop loss overbought and oversold channel, stop loss cepat.

  3. Uji berbagai parameter rata-rata bergerak untuk menemukan parameter terbaik.

  4. Mengukur kembali probabilitas verifikasi strategi titik pusat.

  5. Optimalkan parameter saluran untuk menemukan kombinasi parameter terbaik untuk setiap varietas.

  6. Menyesuaikan parameter indikator agar sistem secara keseluruhan dapat berjalan stabil.

Arah optimasi

Strategi ini juga dapat dioptimalkan dalam beberapa hal:

  1. Menambahkan algoritma pembelajaran mesin, menggunakan data besar untuk melatih indikator polygonal. Dapat meningkatkan akurasi indikator dan mengurangi sinyal yang salah.

  2. Menambahkan saluran adaptif, menyesuaikan parameter saluran secara otomatis sesuai dengan fluktuasi pasar. Dapat meningkatkan akurasi terobosan.

  3. Menggunakan pembelajaran mendalam untuk mengekstrak lebih banyak metrik perubahan, membentuk set metrik untuk mengoptimalkan strategi entry dan exit.

  4. Menambahkan algoritma stop loss yang lebih canggih untuk melacak trend stop loss. Menghindari terbaliknya stop loss.

  5. Optimalisasi parameter dan pengujian kombinasi untuk meningkatkan stabilitas strategi secara keseluruhan.

  6. Menambahkan modul pengelolaan dana untuk membuat kontrol risiko lebih ilmiah.

Meringkaskan

Strategi ini menggunakan indikator multifungsi untuk menilai struktur pasar, dan saluran, untuk menghasilkan sinyal perdagangan rata-rata bergerak, untuk mencapai kombinasi organik dari pelacakan tren dan pembalikan tren. Ini memiliki efek indikator yang baik, peluang perdagangan yang kaya, dan kerugian yang jelas.

Kode Sumber Strategi
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-24 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/
// © amysojexson

//@version=3
strategy(title="Pivots strategy", overlay=true)

// Input settings
// Create a pull-down menu for the pivot type
pivotType = input(title="Pivot Type",
     options=["Daily", "Intraday", "Weekly"], defval="Daily")

// Make toggles for pivot level options
plotPP   = input(title="Plot PP", type=bool, defval=true)
plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true)
plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true)
plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true)
plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true)
// Configure session options
sessRange = input(title="Trading Session",  defval="0800-1600")
showSess  = input(title="Highlight Session?", type=bool, defval=false)

// Enable or disable pivot labels
showLabels = input(title="Show Labels?", type=bool, defval=false)

// Step 2. Calculate indicator values
// Create a function to fetch daily and weekly data
GetData(res, data) =>
    security(syminfo.tickerid, res, data[1],
         lookahead=barmerge.lookahead_on)

// Fetch daily and weekly price data
dailyHigh  = GetData("D", high)
dailyLow   = GetData("D", low)
dailyClose = GetData("D", close)

weeklyHigh  = GetData("W", high)
weeklyLow   = GetData("W", low)
weeklyClose = GetData("W", close)

// Determine session pivot data
// First see how the price bar relates to
// the session time range
inSession = not na(time(timeframe.period, sessRange)[1])
sessStart = inSession and not inSession[1]
sessEnd   = not inSession and inSession[1]

// Determine session price data
sessHigh  = 0.0
sessLow   = 0.0
sessClose = 0.0

sessHigh := sessStart ? high :
     inSession ? max(high, sessHigh[1]) : na
sessLow := sessStart ? low :
     inSession ? min(low, sessLow[1]) : na
sessClose := sessEnd ? close[1] : na

// Compute high, low, close from previous intra-day session
highPrevSess  = 0.0
lowPrevSess   = 0.0
closePrevSess = 0.0

highPrevSess  := sessEnd ? fixnan(sessHigh) : highPrevSess[1]
lowPrevSess   := sessEnd ? fixnan(sessLow) : lowPrevSess[1]
closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1]

// Now figure out which kind of price data
// to use for the pivot calculation
theHigh = if (pivotType == "Daily")
    dailyHigh
else
    if (pivotType == "Intraday")
        highPrevSess
    else
        weeklyHigh

theLow = if (pivotType == "Daily")
    dailyLow
else
    if (pivotType == "Intraday")
        lowPrevSess
    else
        weeklyLow

theClose = if (pivotType == "Daily")
    dailyClose
else
    if (pivotType == "Intraday")
        closePrevSess
    else
        weeklyClose

// Finally calculate the pivot levels
pp = (theHigh + theLow + theClose) / 3
bc= (theHigh + theLow)/2
tc= (pp-bc)+pp

r1 = pp+(.382*(theHigh-theLow))
s1 = pp-(.382*(theHigh-theLow))
r2 = pp +(.618*(theHigh-theLow))
s2 = pp -(.618*(theHigh-theLow))
r3 = pp +(1*(theHigh-theLow))
s3 = pp -(1*(theHigh-theLow))

// Step 3. Output indicator data
// Plot the various pivot levels
plot(series=plotS3R3 ? r3 : na, title="R3",
     style=circles, linewidth=1, color=#0023FF)
plot(series=plotS2R2 ? r2 : na, title="R2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS1R1 ? r1 : na, title="R1",
     style=circles, linewidth=1, color=#09E0F3)

plot(series=plotTCBC ? tc : na, title="TC",
     style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotPP ? pp : na, title="PP",
     style=circles, linewidth=1, color=#000000)
plot(series=plotTCBC ? bc : na, title="BC",
     style=circles, linewidth=.75, color=#FF00D1)

plot(series=plotS1R1 ? s1 : na, title="S1",
     style=circles, linewidth=1, color=#09E0F3)
plot(series=plotS2R2 ? s2 : na, title="S2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS3R3 ? s3 : na, title="S3",
     style=circles, linewidth=1, color=#0023FF)

// Display the pivot names on the chart, if applicable
newPivots = (showLabels == false) ? false :
     (pivotType == "Intraday") ? sessEnd :
     (pivotType == "Daily") ? dayofmonth != dayofmonth[1] :
     dayofweek == monday and dayofmonth != dayofmonth[1]

plotchar(series=newPivots and plotS3R3 ? r3 : na,
     char='', text="R3", offset=1,
     location=location.absolute,
     color=#0023FF, title="R3 label")

plotchar(series=newPivots and plotS2R2 ? r2 : na,
     char='', text="R2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="R2 label")

plotchar(series=newPivots and plotS1R1 ? r1 : na,
     char='', text="R1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="R1 label")

plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="TC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="TC label")
     
plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="BC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="BC label")

plotchar(series=newPivots and plotS1R1 ? s1 : na,
     char='', text="S1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="S1 label")

plotchar(series=newPivots and plotS2R2 ? s2 : na,
     char='', text="S2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="S2 label")

plotchar(series=newPivots and plotS3R3 ? s3 : na,
     char='', text="S3", offset=1,
     location=location.absolute,
     color=#0023FF, title="S3 label")

// Highlight the intra-day price data session on the chart
bgcolor(color=showSess and inSession and (pivotType == "Intraday") ?
     orange : na, transp=95)

// Step 4. Create indicator alerts
alertcondition(condition=cross(close, s3),
     title="Pivot S3 Cross",
     message="Prices crossed Pivot S3 level")

alertcondition(condition=cross(close, s2),
     title="Pivot S2 Cross",
     message="Prices crossed Pivot S2 level")

alertcondition(condition=cross(close, s1),
     title="Pivot S1 Cross",
     message="Prices crossed Pivot S1 level")
     
alertcondition(condition=cross(close, tc),
     title="Pivot TC Cross",
     message="Prices crossed Pivot TC level")

alertcondition(condition=cross(close, pp),
     title="Pivot PP Cross",
     message="Prices crossed the main Pivot Point level")
     
alertcondition(condition=cross(close, bc),
     title="Pivot BC Cross",
     message="Prices crossed Pivot BC level")

alertcondition(condition=cross(close, r1),
     title="Pivot R1 Cross",
     message="Prices crossed Pivot R1 level")

alertcondition(condition=cross(close, r2),
     title="Pivot R2 Cross",
     message="Prices crossed Pivot R2 level")

alertcondition(condition=cross(close, r3),
     title="Pivot R3 Cross",
     message="Prices crossed Pivot R3 level")
    
MA = sma(close, 20)
plot(MA, color=red)

Factor				= input(2, type=float)
Pd					= input(10, minval=1,maxval = 100)
Up					= hl2-(Factor*atr(Pd))
Dn					= hl2+(Factor*atr(Pd))
TrendUp				= 0.0
TrendUp				:= close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown			= 0.0
TrendDown			:= close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend				= 0.0
Trend 				:= close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl 				= Trend==1? TrendUp: TrendDown

plot(Tsl, color=blue)

if close>open
    if open<pp
        if close>pp
            if close>MA
                strategy.entry("long", true) 
if close<open
    if open>pp
        if close<pp
            if close<MA
                strategy.entry("short", false) 
                
strategy.close("long", when = open<Tsl)
strategy.close("short", when = open>Tsl)