Strategi Quant Osilasi Harga Berkeyakinan Berganda

Penulis:ChaoZhang, Tarikh: 2024-02-18 10:10:16
Tag:

img

Ringkasan

Idea utama strategi ini adalah untuk menggabungkan strategi 123 Reversal dan penunjuk Absolute Price Oscillator untuk mendapatkan isyarat bersepadu. Khususnya, jika kedua-dua sub-strategi mengeluarkan isyarat panjang, isyarat strategi akhir adalah 1 (panjang); jika kedua-dua mengeluarkan isyarat pendek, isyarat akhir adalah -1 (pendek); jika isyarat tidak konsisten, isyarat akhir adalah 0 (tidak ada operasi).

Prinsip-prinsip

Pertama, prinsip strategi 123 Reversal adalah: jika harga penutupan lebih rendah daripada penutupan hari sebelumnya selama dua hari berturut-turut, dan Osilator Stochastic berada di bawah garis overbought, pergi panjang; jika harga penutupan lebih tinggi daripada penutupan hari sebelumnya selama dua hari berturut-turut, dan Osilator Stochastic berada di atas garis oversold, pergi pendek.

Kedua, Osilator Harga Absolut memaparkan perbezaan antara dua purata bergerak eksponensial. Nilai positif menunjukkan trend menaik, sementara nilai negatif menunjukkan trend menurun.

Akhirnya, strategi ini menggabungkan isyarat kedua-dua sub-strategi, iaitu ikuti isyarat jika mereka konsisten; jika tidak, tidak beroperasi.

Analisis Kelebihan

Strategi ini secara komprehensif mempertimbangkan isyarat pembalikan jangka pendek dan isyarat trend jangka sederhana hingga panjang, yang dapat mengenal pasti titik perubahan dengan berkesan.

Di samping itu, strategi ini menggunakan beberapa penunjuk teknikal untuk menilai pasaran secara komprehensif dan bukannya bergantung pada satu sahaja.

Analisis Risiko

Risiko terbesar adalah apabila 123 Reversal dan APO mengeluarkan isyarat yang bertentangan. Dalam kes sedemikian, pengendali perlu menilai berdasarkan pengalaman mana isyarat yang lebih boleh dipercayai. Penghakiman yang salah boleh menyebabkan peluang perdagangan yang hilang atau kerugian.

Selain itu, perubahan pasaran yang drastik boleh membatalkan isyarat dari kedua-dua sub-strategi secara serentak. Pedagang perlu memantau peristiwa yang memberi kesan yang signifikan kepada pasaran, dan menghentikan strategi jika perlu.

Pengoptimuman

Arah pengoptimuman yang mungkin:

  1. Mengoptimumkan parameter sub-strategi untuk isyarat yang lebih boleh dipercayai, contohnya tempoh purata bergerak.

  2. Tambah penunjuk tambahan lain untuk membentuk mekanisme pengundian. Isyarat yang konsisten dari pelbagai penunjuk lebih boleh dipercayai.

  3. Tambah strategi stop loss. Stop loss tepat pada masanya pada pergerakan harga yang buruk mengelakkan kerugian lanjut.

  4. Mengoptimumkan tahap kemasukan dan hentikan kerugian berdasarkan ujian semula sejarah.

Kesimpulan

Strategi ini menggabungkan beberapa penunjuk teknikal untuk menilai pasaran, mengelakkan risiko pergantungan satu penunjuk hingga tahap tertentu dan meningkatkan ketepatan isyarat.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/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 Absolute Price Oscillator displays the difference between two exponential 
// moving averages of a security's price and is expressed as an absolute value.
// How this indicator works
//    APO crossing above zero is considered bullish, while crossing below zero is bearish.
//    A positive indicator value indicates an upward movement, while negative readings 
//      signal a downward trend.
//    Divergences form when a new high or low in price is not confirmed by the Absolute Price 
//      Oscillator (APO). A bullish divergence forms when price make a lower low, but the APO 
//      forms a higher low. This indicates less downward momentum that could foreshadow a bullish 
//      reversal. A bearish divergence forms when price makes a higher high, but the APO forms a 
//      lower high. This shows less upward momentum that could foreshadow a bearish reversal.
//
// 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

AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA) =>
    xPrice = close
    xShortEMA = ema(xPrice, LengthShortEMA)
    xLongEMA = ema(xPrice, LengthLongEMA)
    xAPO = xShortEMA - xLongEMA
    pos = 0.0    
    pos := iff(xAPO > 0, 1,
           iff(xAPO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Absolute Price Oscillator (APO)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthShortEMA = input(10, minval=1)
LengthLongEMA = input(20, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posAbsolutePriceOscillator = AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA)
pos = iff(posReversal123 == 1 and posAbsolutePriceOscillator == 1 , 1,
	   iff(posReversal123 == -1 and posAbsolutePriceOscillator == -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 lanjut