MacD Strategi Ramalan Laluan Masa Depan

Penulis:ChaoZhang, Tarikh: 2023-12-13 17:21:44
Tag:

img

Ringkasan

Idea teras strategi ini adalah untuk meramalkan trend harga dengan menganalisis trend masa depan penunjuk MacD. Strategi ini memanfaatkan sepenuhnya isyarat perdagangan yang dihasilkan oleh persilangan purata bergerak cepat dan perlahan yang membentuk penunjuk MacD.

Prinsip Strategi

  1. Mengira perbezaan (nilai sejarah) penunjuk MacD untuk menentukan kenaikan dan penurunan garis MacD dan garis isyarat.
  2. Menggunakan nilai masa depan penunjuk MacD dalam jangka masa 4 jam dengan menetapkan pilihan panggilan untuk menilai trend masa depan penunjuk MacD dan meramalkan trend harga.
  3. Pergi panjang apabila perbezaan penunjuk MacD lebih besar daripada 0 (mewakili pasaran lembu) dan dijangka terus meningkat; pergi pendek apabila perbezaan penunjuk MacD kurang daripada 0 (mewakili pasaran beruang) dan dijangka terus jatuh.
  4. Strategi ini menggabungkan kedua-dua gaya perdagangan trend berikut dan pembalikan trend, menangkap trend sambil juga merebut titik pembalikan trend.

Analisis Kelebihan

  1. Kelebihan menggunakan penunjuk MacD untuk menilai trend pasaran dapat dengan berkesan menapis penyatuan dan menangkap trend jangka panjang.
  2. Dengan bantuan ramalan mengenai trend masa depan penunjuk MacD, titik perubahan harga dapat dikenal pasti lebih awal untuk meningkatkan keupayaan strategi yang menjangkakan masa depan.
  3. Mengintegrasikan kedua-dua gaya perdagangan mengikut trend dan pembalikan trend membolehkan pembalikan kedudukan tepat pada masanya semasa penjejakan trend untuk mendapatkan pulangan yang lebih besar.
  4. Parameter strategi yang boleh diselaraskan membolehkan pengguna mengoptimumkan berdasarkan jangka masa dan persekitaran pasaran yang berbeza untuk meningkatkan kestabilan strategi.

Analisis Risiko

  1. Mengandalkan ramalan mengenai trend masa depan penunjuk MacD boleh menyebabkan perdagangan gagal jika ramalan tidak tepat.
  2. Stop loss harus digunakan untuk mengawal kerugian tunggal. Tetapan julat stop loss yang tidak betul juga akan mempengaruhi prestasi strategi.
  3. Kelewatan penunjuk MacD mungkin kehilangan peluang untuk pembalikan harga yang cepat.
  4. Kesan kos transaksi perlu dipantau.

Arahan pengoptimuman

  1. Menggabungkan penunjuk lain untuk ramalan untuk mengurangkan pergantungan pada satu penunjuk MacD dan meningkatkan ketepatan ramalan, seperti memeriksa perubahan dalam jumlah dagangan.
  2. Tambah algoritma pembelajaran mesin, melatih model untuk meramalkan trend masa depan penunjuk MacD.
  3. Mengoptimumkan tetapan parameter untuk mencari kombinasi parameter terbaik.
  4. Kawasan pasaran yang berbeza sesuai dengan konfigurasi parameter yang berbeza, sistem adaptif boleh ditambahkan untuk mengoptimumkan parameter secara automatik.

Kesimpulan

Walaupun memberikan permainan penuh kepada kelebihan penunjuk MacD untuk menentukan trend, strategi ini juga menggabungkan ramalan mengenai trend masa depan penunjuk. Membina pada menangkap trend, ia juga merebut titik perubahan kritikal. Berbanding dengan hanya mengejar trend, strategi ini mempunyai prospektif dan potensi keuntungan yang lebih besar. Sudah tentu, terdapat juga risiko tertentu yang memerlukan pengoptimuman dan penambahbaikan lanjut. Secara keseluruhan, strategi ini layak penyelidikan dan penerapan yang mendalam.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Lebih lanjut