
Strategi ini adalah strategi perdagangan berdasarkan Indeks Mackey Non-Dynamic Average. Indeks Mackey Non-Dynamic Average adalah penambahbaikan Indeks Moving Average, yang lebih baik menangkap perubahan trend pasaran. Strategi ini menggunakan isyarat Indeks Mackey Non-Dynamic Average, yang digabungkan dengan isyarat harga yang menembusi garis rata-rata, untuk membuat peraturan membeli dan menjual untuk mencapai keuntungan.
Strategi ini menggunakan dua garis rata-rata, iaitu Indeks Pergerakan 21 Hari dan Indeks Pergerakan 42 Hari. Apabila garis rata-rata jangka pendek melintasi garis rata-rata jangka panjang, ia dianggap sebagai isyarat membeli; apabila garis rata-rata jangka pendek melintasi garis rata-rata jangka panjang, ia dianggap sebagai isyarat menjual.
Selain itu, strategi ini juga memerlukan syarat untuk memenuhi harga yang lebih tinggi daripada purata bergerak non-McKinsey, harga yang melampaui purata jangka pendek, untuk menghasilkan isyarat beli. Isyarat menjual juga memerlukan syarat untuk memenuhi harga yang lebih rendah daripada purata non-McKinsey, harga yang jatuh di bawah purata jangka pendek.
Khususnya, syarat pemicu isyarat beli adalah: melintasi garis purata panjang pada garis purata pendek, harga penutupan lebih tinggi daripada garis non-rata McKin, harga penutupan melintasi garis purata pendek ke bawah. Syarat pemicu isyarat jual adalah: melintasi garis purata panjang di bawah garis purata pendek, harga penutupan di bawah garis non-rata McKin, harga penutupan melintasi garis purata pendek ke atas.
Rumus pengiraan rata-rata non-bergerak McKin ialah: MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Period * (Close / MDIt-1) ^ 4, 1) ◦ di mana, MDIt menunjukkan nilai semasa, MDIt-1 menunjukkan nilai hari sebelumnya, Close menunjukkan harga penutupan hari itu, k menunjukkan senantiasa kelancaran, Period menunjukkan pengiraan. Rumus ini membolehkan rata-rata untuk mengesan perubahan harga dalam masa nyata.
Indeks garis purata McKinsey memperbaiki keterbelakangan garis purata tradisional untuk menangkap perubahan trend harga lebih cepat.
Gabungan dua garis rata membentuk isyarat dagangan, yang dapat menyaring penembusan palsu dengan berkesan.
Tambah harga di atas/di bawah garis purata McKinsey untuk mengelakkan dagangan yang kerap berlaku di kawasan yang bergolak.
Indeks bergerak rata-rata digunakan untuk menjadikan rata-rata lebih sensitif terhadap perubahan harga terkini.
Dalam pasaran yang bergolak, isyarat palsu mungkin dihasilkan, yang menyebabkan kerugian. Anda boleh menyesuaikan parameter dengan betul, memfilter isyarat.
Penembusan besar-besaran boleh menyebabkan tidak dapat membina gudang dalam masa yang tepat, dengan syarat kemasukan yang sesuai.
Tetapan parameter yang tidak betul juga boleh menjejaskan kesan strategi, parameter harus diuji dengan baik.
Risiko sistemik yang perlu diperhatikan dalam pemegang jangka panjang boleh ditetapkan sebagai titik henti.
Anda boleh menguji parameter garis purata dengan panjang yang berbeza untuk mencari kombinasi yang lebih sesuai.
Anda boleh menambah petunjuk teknikal lain, seperti KD, MACD, dan lain-lain, untuk mengoptimumkan pilihan tempat membeli dan menjual.
Nilai parameter k boleh disesuaikan mengikut varieti dan pasaran yang berbeza, untuk mengoptimumkan pengiraan garis non-rata McKinsey.
Ia boleh digabungkan dengan penunjuk kadar turun naik untuk mencapai saiz kedudukan dinamik, mengawal risiko tunggal.
Anda boleh menetapkan titik berhenti untuk mengawal risiko kerugian, atau anda boleh mencuba bergerak berhenti untuk mengunci keuntungan.
Strategi ini menggunakan keupayaan pengesanan yang cepat daripada penunjuk McKeen non-rata, bersama-sama dengan isyarat perdagangan yang terbentuk harga memecah rata-rata, boleh mengesan trend dengan berkesan, dalam masa yang tepat beralih kedudukan apabila trend bertukar. Berbanding dengan strategi garis rata-rata ganda tradisional, strategi ini dapat menangkap perubahan trend harga lebih cepat.
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © LucasZancheta
//@version=4
strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true)
//Médias móveis
MA1Period=input(21, title="MA1")
MA2Period=input(42, title="MA2")
MA1 = ema(close, MA1Period)
MA2 = ema(close, MA2Period)
aboveAverage = MA1 >= MA2
hunderAverage = MA2 >= MA1
//Período do backtest
startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100)
endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100)
//Verifica se o candle está dentro do período do backtest
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
//Número de periodos da média móvel
period = input(title="Períodos", type=input.integer, defval=20)
//Constante K (0.6)
k = input(title="Constante K", type=input.float, defval=0.6)
//Preço de fechamento
closePrice = input(title="Preço", type=input.source, defval=close)
mdi = 0.0
//Fórmula de McGinley
mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1)
//Regra de coloração
mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black
//Inserindo as informações no gráfico
plot(MA1, color=color.blue, linewidth=2)
plot(MA2, color=color.purple, linewidth=2)
barcolor(mdiColor)
//Estratégia
buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1
buyLoss = closePrice < mdi and close < MA1 and close < MA2
if (inDateRange)
strategy.entry("Compra", strategy.long, qty=1, when= buySignal)
strategy.exit("Gain da compra", "Compra", qty=1, profit=20)
strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação")
sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1
sellLoss = closePrice > mdi and close > MA1 and close > MA2
if (inDateRange)
strategy.entry("Venda", strategy.short, qty=1, when= sellSignal)
strategy.exit("Gain da venda", "Venda", qty=1, profit=20)
strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação")
if (not inDateRange)
strategy.close_all()