
Strategi ini adalah pelaksanaan strategi perdagangan rata-rata bergerak tiga indeks yang tipikal. Ia menghasilkan isyarat perdagangan melalui persilangan antara EMA 5 hari yang lebih cepat, EMA 20 hari yang sederhana, dan EMA 50 hari yang perlahan.
Apabila 5 hari EMA melintasi 20 hari EMA, dan tiga EMA semuanya beratur berturut-turut ((5 hari EMA > 20 hari EMA > 50 hari EMA), dan harga penutupan K semasa naik melebihi ticks tertentu pada hari penutupan hari sebelumnya, lakukan lebih banyak; apabila 5 hari EMA melintasi 20 hari EMA, dan tiga EMA semuanya beratur kosong ((5 hari EMA < 20 hari EMA < 50 hari EMA), dan harga penutupan K semasa turun melebihi ticks tertentu pada hari penutupan hari sebelumnya, lakukan kosong.
Selepas masuk, jika harga berjalan melebihi ticks tertentu, mulakan mekanisme pengesanan henti, terus menyesuaikan garis henti mengikut pergerakan harga, untuk mengunci lebih banyak mata wang.
Penggunaan EMA tiga membentuk isyarat perdagangan, yang dapat menyaring bunyi pasaran dengan berkesan, mengenal pasti trend. EMA pantas mencerminkan perubahan terkini, EMA pantas menentukan arah trend, EMA perlahan menyaring gegaran.
Menambah perbandingan harga penutupan K Line semasa dengan harga penutupan hari sebelumnya dapat menyaring lebih jauh isyarat palsu dan mengurangkan perdagangan yang tidak perlu.
Menggunakan mekanisme pengesanan kerugian, anda boleh secara dinamik menyesuaikan garis berhenti anda mengikut pergerakan pasaran, untuk memaksimumkan keuntungan.
Tetapan parameter strategi ini fleksibel dan boleh dioptimumkan mengikut pelbagai jenis dan kitaran, dari garis hari hingga garis minit.
Dalam keadaan yang bergolak, EMA sering bercampur dengan isyarat, mudah menghasilkan terlalu banyak transaksi yang meningkatkan yuran transaksi dan kos slip.
Tracking stop loss mungkin terhenti terlalu awal dalam kejutan besar dan tidak dapat memegang trend keseluruhan.
EMA mempunyai ciri kelewatan yang mungkin terlepas titik perubahan trend dan menyebabkan kerugian.
Parameter yang perlu dioptimumkan seperti panjang kitaran EMA, mengesan ticks berhenti, dan lain-lain. Kesan berbeza antara varieti dan kitaran.
Ia boleh digabungkan dengan penunjuk lain seperti MACD, KD dan lain-lain untuk membantu penapisan isyarat perdagangan.
Ia boleh diuji dan dioptimumkan mengikut varieti dan parameter kitaran tertentu untuk mencari kombinasi parameter terbaik.
Parameter boleh disesuaikan secara dinamik melalui campur tangan manusia atau pembelajaran mesin.
Anda boleh mempertimbangkan untuk menutup penghentian pengesanan dan memegang keseluruhan kedudukan dalam keadaan tertentu.
Ia boleh digabungkan dengan hentian automatik untuk menggantikan hentian pengesanan yang mudah.
Strategi ini menggabungkan tiga kaedah analisis teknikal yang biasa digunakan untuk EMA crossing, harga breakout dan pengesanan stop loss, membentuk sistem perdagangan trend yang lebih komprehensif dan boleh dipercayai. Dengan pengoptimuman parameter, ia boleh disesuaikan dengan pelbagai jenis dan kitaran, dan berfungsi dengan baik di pasaran yang jelas dalam trend. Tetapi strategi ini juga mempunyai beberapa kelemahan strategi analisis teknikal yang tipikal, yang memerlukan pengoptimuman lebih lanjut untuk menangani lebih banyak keadaan pasaran.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4
/////////////////////////////////////////////////////// Initial Parameters ///////////////////////////////////////////////////////
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true
strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax,
default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent,
commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500,
max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false)
///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////
DateFilter = input(false, "═════ Data Filtering ═════")
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000)
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000)
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000)
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000)
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000)
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000)
//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////
var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1])
OrderQty = 1
Buffer = InitBuffer / (Multiplier * 100)
/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////
EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)
//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer)
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer)
/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////
if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))
StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Long Stoploss", "Long")
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier)))))
StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////
if (longCondition)
StartPrice := close
StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier))
strategy.entry("Long", strategy.long, qty=OrderQty)
strategy.exit("Long Stoploss", "Long")
if (shortCondition)
StartPrice := close
StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier))
strategy.entry("Short", strategy.short, qty=OrderQty)
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)