Tren momentum mengikuti strategi osilasi

Penulis:ChaoZhang, Tanggal: 2023-11-16 16:46:51
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator rata-rata bergerak, harga volume dan osilasi untuk membentuk filter tiga, yang bertujuan untuk menangkap tren jangka menengah dan mencapai pengembalian yang baik selama tren pasar.

Prinsip-prinsip

Strategi ini terdiri dari tiga komponen utama:

  1. Indikator Rata-rata Bergerak

Gunakan EMA 20 hari dan EMA 60 hari untuk membangun filter tren. Sinyal beli dihasilkan ketika MA jangka pendek melintasi di atas MA jangka panjang. Sinyal jual dihasilkan ketika MA jangka pendek melintasi di bawah MA jangka panjang.

  1. Indikator Volume-Harga

Menggunakan volume atas omset untuk menghitung indikator VP, menilai arah aliran modal. VP yang meningkat menunjukkan masuk bersih sementara VP yang menurun menunjukkan keluar bersih. Pembalikan VP dapat menandakan pergeseran tren.

  1. Bollinger Bands

Gunakan lebar saluran Donchian 20 hari untuk menghitung Bollinger Bands Parameter, membentuk band atas dan bawah. Harga yang mendekati band atas mungkin menghadapi tekanan mundur, sementara harga yang mendekati band bawah mungkin bangkit kembali.

Menggabungkan tiga komponen membangun strategi trend-mengikuti. Ini menghasilkan sinyal beli ketika MA pendek melintasi di atas MA panjang, VP berada dalam tren naik dan harga baru saja meninggalkan band atas. Sinyal jual dihasilkan ketika MA pendek melintasi di bawah MA panjang, VP berada dalam tren menurun dan harga baru saja meninggalkan band bawah.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Filter indikator tiga membantu menghindari pemutusan palsu.

  2. Mempertimbangkan tren, arus modal dan overbought/oversold meningkatkan keandalan sinyal.

  3. Parameter yang dioptimalkan yang cocok untuk periode dan produk yang berbeda.

  4. Pengeluaran yang terkontrol dan pengembalian yang stabil.

  5. Logika yang jelas dan pengaturan parameter yang fleksibel.

Risiko

Ada juga beberapa risiko:

  1. Perubahan tren dapat menyebabkan stop loss.

  2. VP tertinggal dari perubahan harga dan mungkin melewatkan titik masuk atau keluar.

  3. Parameter yang sulit disetel. Parameter perlu disesuaikan untuk produk yang berbeda dan kerangka waktu.

  4. Pengendalian penurunan perlu ditingkatkan. Lebih lanjut dioptimalkan dengan berhenti dinamis atau ukuran posisi.

Arah Peningkatan

Strategi ini dapat ditingkatkan dalam hal berikut:

  1. Tambahkan metode stop loss seperti trailing stop untuk pengendalian penarikan lebih lanjut.

  2. Tambahkan modul pengukuran posisi untuk menyesuaikan ukuran secara dinamis berdasarkan volatilitas.

  3. Mengoptimalkan parameter untuk menemukan set terbaik untuk produk dan periode yang berbeda.

  4. Meningkatkan model pembelajaran mesin untuk meningkatkan akurasi sinyal.

  5. Sertakan analisis sentimen dan berita untuk menilai peristiwa mendadak.

Kesimpulan

Strategi ini menggabungkan indikator MA, VP dan Bollinger Band untuk berkinerja baik dalam menangkap tren jangka menengah. Perbaikan lebih lanjut dalam stop loss, ukuran posisi dan penyesuaian parameter dapat mencapai hasil yang lebih baik. Logika jelas dan parameter fleksibel untuk kustomisasi.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Secon strategy
// The Average Directional Movement Index Rating (ADXR) measures the strength 
// of the Average Directional Movement Index (ADX). It's calculated by taking 
// the average of the current ADX and the ADX from one time period before 
// (time periods can vary, but the most typical period used is 14 days).
// Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening 
// and weakening trends. However, because it represents an average of ADX, values 
// don't fluctuate as dramatically and some analysts believe the indicator helps 
// better display trends in volatile markets.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

ADXR(LengthADX, LengthADXR, Signal1, Signal2) =>
    xADX = fADX(LengthADX)
    xADXR = (xADX + xADX[LengthADXR]) / 2
    pos = 0.0
    pos := iff(xADXR < Signal1, 1,
           iff(xADXR > Signal2, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Average Directional Movement Index Rating", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthADX = input(title="Length ADX", defval=14)
LengthADXR = input(title="Length ADXR", defval=14)
Signal1 = input(13, step=0.01)
Signal2 = input(45, step=0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posADXR = ADXR(LengthADX, LengthADXR, Signal1, Signal2 )
pos = iff(posReversal123 == 1 and posADXR == 1 , 1,
	   iff(posReversal123 == -1 and posADXR == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 

Lebih banyak