Strategi ini menggunakan model purata bergerak untuk menentukan arah trend pasaran. Apabila trend menaik dikenal pasti, ia akan secara berkala membuka kedudukan panjang dengan jumlah tetap untuk mengesan trend kenaikan golden cross di pasaran.
Strategi ini terutamanya berdasarkan prinsip teknikal berikut:
Gunakan garis EMA untuk menentukan arah trend pasaran. Apabila garis EMA yang cepat melintasi garis EMA yang perlahan, ia dinilai sebagai trend menaik dan bersedia untuk memasuki kedudukan panjang.
Menggabungkan penunjuk MACD untuk menentukan masa kemasukan. Apabila MACD berubah dari positif kepada negatif, ia menunjukkan bahawa daya beli mula melemah, jadi sudah tiba masanya untuk memasuki kedudukan panjang.
Batasan untuk hanya masuk sekali sebulan untuk mengelakkan mengejar tinggi.
Membolehkan menetapkan tarikh permulaan dan tarikh akhir untuk mengehadkan tempoh backtest. Apabila backtest berakhir, strategi akan menutup semua kedudukan.
Secara khusus, strategi ini pertama kali mengira garis EMA cepat dan garis EMA perlahan, dan mengesan silang emas di antara mereka untuk menentukan trend pasaran. Pada masa yang sama, ia mengira penunjuk MACD untuk menentukan titik kemasukan tertentu. Apabila kedua-dua kriteria dipenuhi, isyarat panjang dihasilkan. Menurut peraturan hanya memasuki sekali sebulan, pesanan kemasukan sebenar ditentukan. Jumlah modal untuk setiap kemasukan boleh ditetapkan terlebih dahulu. Apabila ujian belakang berakhir, strategi akan secara aktif menutup semua kedudukan.
Ini adalah trend yang mudah dan langsung mengikut strategi dengan kelebihan berikut:
Menggunakan garis EMA untuk menentukan trend utama adalah mudah dan praktikal.
Indikator MACD dapat mengenal pasti titik perubahan apabila daya beli mula melemah dengan agak tepat, menjadikan entri lebih selamat.
Mengehadkan diri untuk hanya mengejar trend menaik sekali sebulan boleh mengelakkan mengejar tinggi dan membunuh trend menaik dalam pasaran lembu.
Membolehkan penyesuaian jumlah kemasukan setiap bulan memberikan fleksibiliti dalam saiz kedudukan.
Backtest boleh digunakan untuk menilai prestasi strategi dengan menetapkan tarikh permulaan dan tarikh akhir.
Ia akan menutup semua kedudukan secara automatik apabila backtest berakhir, mengelakkan kedudukan yang tidak selesa.
Terdapat beberapa potensi risiko strategi ini:
Penentuan trend melalui purata bergerak mungkin terlepas peluang semasa penurunan sementara atau bertindak balas perlahan pada pembalikan trend.
Hanya masuk sekali sebulan mungkin kehilangan peluang masuk yang lebih baik. Pertimbangkan untuk melonggarkan kekerapan atau menambah entri lain apabila memecahkan tertinggi baru-baru ini.
Terdapat risiko pemasangan lengkung. Lebih banyak ruang penyesuaian parameter harus dibenarkan dan ketahanan harus diuji di pasaran dan tempoh masa.
Terdapat risiko mengejar momentum dan overbuy. Jumlah kemasukan bulanan harus dikawal untuk mengelakkan kedudukan yang terlalu besar.
Trend pelaburan berkala ini mengikut strategi boleh diperluaskan dan ditingkatkan dari aspek berikut:
Tambah logik stop loss untuk memotong kerugian secara aktif apabila corak pembalikan menurun muncul.
Pertimbangkan untuk menambah pembelian lain apabila histogram MACD menunjukkan divergensi menaik untuk mendapatkan lebih banyak pendedahan kepada trend menaik.
Memperkenalkan perbandingan bulan ini
Tambah logik saiz kedudukan. Jumlah kemasukan bulanan boleh dibuat adaptif berdasarkan peratusan dan bukannya nilai tetap.
Menilai kesan gabungan MA yang berbeza dan parameter MACD. Cari set parameter optimum.
Tambahkan stop loss yang mengikuti harga pada jarak tertentu selepas mencapai paras tertinggi baru, membolehkan keuntungan berjalan.
Strategi ini mewakili pendekatan trend yang mudah dan bersih menggunakan pelaburan berkala dan purata bergerak. Ia mudah difahami dan dilaksanakan, berfungsi sebagai titik permulaan yang baik untuk belajar perdagangan algoritma. Tetapi dalam perdagangan langsung, saiz kedudukan perlu dikawal dengan teliti. Strategi harus ditingkatkan lagi untuk menyesuaikan diri dengan keadaan pasaran yang kompleks.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-30 00:00:00 period: 1d basePeriod: 1h 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/ // © runescapeyttanic //@version=4 // strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0) //INPUTS################################################################################################################## maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000) emalength = input(title="EMA Length", type=input.integer,defval=200) // Make input options that configure backtest date range startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=12, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=02, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021, minval=1800, maxval=2100) endDate1=endDate-1 //starttag //startmonat //MACD######################################################################################################################## fast_length=12 slow_length=26 src=close col_macd=#0094ff fast_ma = ema(src, fast_length) slow_ma = ema(src, slow_length) macd = fast_ma - slow_ma //EMA Distance CALC######################################################################################################## ma1 =ema(close,emalength) distFromMean = close - ma1 inDateRange = true longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange) longnow=false if(longCondition and strategy.position_size == 0) strategy.entry("My Long Entry Id", strategy.long) longnow:=true if(longCondition and strategy.position_size > 0) longnow:=true if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange) strategy.entry("My Long Entry Id", strategy.long) plotchar(minute, "Minuten", "", location = location.top) plotchar(hour, "Stunden", "", location = location.top) plotchar(dayofmonth, "Tage", "", location = location.top) plotchar(month, "Monat", "", location = location.top) plotchar(year, "Jahr", "", location = location.top) plotchar(strategy.position_size, "Positionen", "", location = location.top) plotchar(longCondition, "Long Condition", "", location = location.top) if true strategy.close_all() //######################################################################################################################### plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0) 1 else 0 plotarrow(series=plotArrow)