Strategi berikut adalah strategi perdagangan kuantitatif yang menjejaki trend pasaran. Strategi ini menghasilkan isyarat perdagangan dengan mengira purata bergerak pantas dan perlahan dan menangkap titik perubahan dalam trend pasaran apabila crossover berlaku.
Prinsip utama strategi ini adalah untuk menilai trend pasaran menggunakan purata bergerak eksponen (EMA) dengan parameter yang berbeza. Strategi ini menentukan EMA cepat dan EMA perlahan. Apabila EMA cepat melintasi di atas EMA perlahan, ia menunjukkan pembalikan trend menaik di pasaran. Apabila EMA cepat melintasi di bawah EMA perlahan, ia menunjukkan pembalikan trend menurun.
Pada laluan ke atas, strategi akan membuka kedudukan panjang. Pada laluan ke bawah, strategi akan membuka kedudukan pendek. Strategi akan memegang kedudukannya sehingga mengambil keuntungan atau menghentikan kerugian dicetuskan, atau persilangan ke arah yang bertentangan berlaku lagi.
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai beberapa risiko:
Untuk mengurangkan risiko, pertimbangkan untuk menggabungkan penunjuk lain untuk menentukan jenis trend, atau menetapkan nisbah stop loss yang lebih luas.
Strategi ini juga boleh dioptimumkan dalam aspek berikut:
Ringkasnya, Strategi Mengikuti Trend Moving Average Crossover adalah strategi perdagangan trend yang mudah dan praktikal. Idea teras strategi jelas dan mudah dilaksanakan, dan juga terdapat ruang untuk pengoptimuman. Dengan menyesuaikan parameter, menambah analisis pelbagai jangka masa, hentian dinamik dll, kestabilan dan keuntungan strategi dapat terus ditingkatkan.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Zhukov trade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=10, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=20, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2030 23:59')) // Set take profit and stop loss percentages take_profit_percent = input(1.0, title ="Take Profit Percent") / 100.0 stop_loss_percent = input(1.0, title ="Stop Loss Percent") / 100.0 // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close, 200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) and inDateRange shortCondition = ta.crossunder(fastEMA, slowEMA) and inDateRange // ORDERS: // Submit entry (or reverse) orders if longCondition and longOK strategy.entry(id='long', direction=strategy.long) if shortCondition and shortOK strategy.entry(id='short', direction=strategy.short) // Exit orders if strategy.position_size > 0 and longOK strategy.exit(id='exit long', from_entry='long', limit=strategy.position_avg_price * (1 + take_profit_percent), stop=strategy.position_avg_price * (1 - stop_loss_percent)) if strategy.position_size < 0 and shortOK strategy.exit(id='exit short', from_entry='short', limit=strategy.position_avg_price * (1 - take_profit_percent), stop=strategy.position_avg_price * (1 + stop_loss_percent))