Trend Saluran Purata Bergerak Berbilang Tempoh Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-02-20 13:45:42
Tag:

img

Ringkasan

Ini adalah strategi ayunan yang direka untuk pasaran trend seperti crypto dan saham, menggunakan jangka masa yang besar seperti 8 jam. Strategi ini menggunakan pelbagai purata bergerak termasuk SMA, EMA, VWMA, ALMA, SMMA, LSMA dan VWMA yang digunakan secara berasingan untuk tinggi dan rendah untuk membentuk dua garis purata sebagai saluran.

Pergi panjang apabila dekat di atas garis purata yang digunakan untuk tinggi. Pergi pendek apabila dekat di bawah garis purata yang digunakan untuk rendah.

Logika Strategi

Strategi ini menggunakan 7 jenis purata bergerak yang berbeza termasuk SMA, EMA, VWMA, ALMA, SMMA, LSMA dan VWMA. MA ini digunakan secara berasingan pada harga tertinggi dan terendah lilin untuk menghasilkan dua garis purata.

Garis purata yang digunakan untuk harga tinggi dipanggil avg_high. yang digunakan untuk harga rendah dipanggil avg_low. kedua-dua garis ini membentuk saluran.

Pergi panjang apabila dekat di atas avg_high. Pergi pendek apabila dekat di bawah avg_low.

Stop loss untuk panjang adalah avg_low. Ambil keuntungan adalah harga kemasukan * ((1 + tp_long). Singkatnya, stop loss adalah avg_high, ambil keuntungan adalah harga kemasukan * ((1 - tp_short).

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah menggunakan pelbagai purata bergerak untuk meningkatkan keuntungan. Pemasok yang berbeza mempunyai kelajuan tindak balas yang berbeza terhadap perubahan harga.

Satu lagi kelebihan adalah pendekatan saluran. Saluran membatasi julat stop loss dan mengurangkan risiko yang sesuai untuk perdagangan ayunan.

Analisis Risiko

Strategi ini mempunyai dua risiko utama:

  1. Gabungan pelbagai MAs menjadikan penyesuaian parameter kompleks yang memerlukan banyak ujian dan pengoptimuman untuk mencari yang terbaik.

  2. Dalam pasaran sampingan atau bukan trend, strategi cenderung menghasilkan kerugian dan whipsaws.

Untuk mengurangkan risiko, pilih produk dengan trend yang jelas, dan lakukan ujian belakang dan pengoptimuman yang luas untuk mencari parameter yang sesuai dengan keadaan pasaran semasa.

Arahan pengoptimuman

Kawasan untuk pengoptimuman lanjut:

  1. Uji lebih banyak jenis MA untuk mencari kombinasi yang lebih baik, seperti SMA, EMA, KAMA, TEMA dan lain-lain.

  2. Mengoptimumkan panjang MA dan lebar saluran untuk menentukan parameter optimum.

  3. Uji mekanisme mengambil keuntungan dan menghentikan kerugian yang berbeza seperti hentian atau hentian dinamik.

  4. Menggabungkan metrik trend seperti ADX, ATR untuk mengelakkan whipsaws semasa pasaran bergolak.

  5. Mengoptimumkan logik masuk dan keluar dengan penapis tambahan untuk mengurangkan perdagangan yang tidak sah.

Ringkasan

Strategi trend swing berikut ini meningkatkan keuntungan menggunakan pelbagai MA dan mengurangkan risiko melalui saluran. Ia berfungsi dengan baik untuk produk trend selepas pengoptimuman parameter. Tetapi boleh mengalami kerugian besar pada pembalikan trend. Pengoptimuman lanjut diperlukan untuk mengurangkan risiko penurunan.


/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
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/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))



Lebih lanjut