
Strategi ini menggabungkan EMA, TTS, dan STC untuk membentuk strategi yang lebih kuat untuk mengikuti trend garis pendek. Secara khusus, strategi ini akan menilai sama ada isyarat kosong ketiga-tiga indikator adalah selaras, dan jika ia selaras, ia akan menghasilkan isyarat perdagangan; jika ia tidak selaras, ia tidak akan dijual. Ini dapat menyaring beberapa isyarat palsu, menjadikan strategi lebih dipercayai.
Strategi ini terdiri daripada tiga bahagian utama: indikator EMA smoothing, strategi trend track TTS dan indikator kitaran trend STC Shuffle.
Pertama, mengira purata bergerak indeks EMA selama 200 kitaran untuk menentukan sama ada harga berada di bawah atau di atas garis EMA, jika harga berada di bawah garis itu, indikator EMA memberikan isyarat kepala kosong;-1; jika harga berada di atas garis itu, indikator EMA memberikan isyarat kepala banyak: 1
Kedua, mengira parameter yang berkaitan dengan strategi pengesanan trend TTS, menilai arah trend pasaran berdasarkan harga yang pecah ke atas dan ke bawah. Jika harga pecah ke atas, menghasilkan isyarat multihead 1; Jika harga pecah ke bawah, menghasilkan isyarat kosong-1.
Akhirnya, hitung STC kitaran trend Shuffle, yang mencerminkan trend perubahan pusat harga. Jika STC naik, menghasilkan isyarat multihead 1; jika STC turun, menghasilkan isyarat kosong -1.
Setelah mendapat tiga isyarat penghakiman indikator, strategi akan menilai sama ada mereka sesuai. Hanya apabila tiga isyarat penghakiman indikator semuanya sesuai, isyarat perdagangan sebenar akan dihasilkan. Ini dapat menyaring beberapa isyarat palsu dengan berkesan, menjadikan strategi lebih dipercayai.
Jika ia dipastikan menghasilkan isyarat dagangan, anda boleh membuat pesanan untuk melakukan over atau short dan menetapkan titik stop loss.
Strategi ini menggunakan tiga jenis indikator yang berbeza untuk menentukan arah trend pasaran.
Menggunakan kesesuaian tiga isyarat penghakiman indikator untuk menyaring isyarat palsu, anda boleh mengurangkan perdagangan yang tidak perlu dan menjadikan strategi lebih dipercayai.
Menetapkan titik henti rugi yang munasabah untuk mengunci keuntungan dan mengelakkan kerugian daripada berkembang.
Parameter yang dipilih telah dioptimumkan untuk digunakan dalam kebanyakan saham dan jenis mata wang asing.
Logik transaksi jelas dan ringkas, mudah difahami dan diubah suai.
Dimers akan muncul apabila ketiga-tiga penunjuk penilaian tidak selaras, mudah untuk kehilangan peluang perdagangan. Pertimbangan untuk mengoptimumkan peraturan penilaian boleh diambil.
Penunjuk STC mempunyai sensitiviti yang lebih tinggi terhadap parameter, yang memerlukan penyesuaian parameter untuk pelbagai jenis.
Dalam keadaan kemelesetan, halangan boleh ditembusi dan menyebabkan kerugian yang lebih besar. Anda boleh mempertimbangkan untuk mengoptimumkan halangan dalam masa nyata.
Tidak dapat menilai secara berkesan keadaan yang berlaku, kemasukan dalam ruang boleh menyebabkan penangkapan.
Anda boleh menguji kombinasi lebih banyak indikator untuk mencari peraturan penghakiman yang lebih kuat.
Mengoptimumkan parameter penunjuk STC untuk menjadikannya lebih sesuai untuk pelbagai jenis. Modul pengoptimuman parameter penyesuaian disertakan.
Tambahan modul penangguhan yang boleh disesuaikan, yang membolehkan anda mengoptimumkan titik penangguhan dalam masa nyata mengikut keadaan.
Mempertingkatkan modul kedudukan rata untuk menentukan sama ada masuk ke dalam penyusunan berhadapan, dan mengelakkan penjara.
Pengoptimuman algoritma untuk transaksi frekuensi tinggi, mengurangkan kelambatan sistem, meningkatkan kadar kejayaan penugasan.
Strategi ini menggunakan tiga petunjuk untuk menentukan arah trend pasaran, EMA, TTS dan STC, dan menghasilkan isyarat perdagangan apabila ketiga-tiganya diselaraskan dengan peraturan penghakiman. Dengan cara ini, isyarat palsu dapat disaring dengan berkesan. Strategi ini masih mempunyai ruang yang luas untuk pengoptimuman, dengan menguji lebih banyak kombinasi indikator, menambahkan algoritma penyesuaian diri, dan mengoptimumkan modul perdagangan frekuensi tinggi.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-04-14 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/
// © ajahanbin1374
//@version=5
strategy(title = "EMA + TTS + STC", shorttitle = "EMA + TTS + STC", overlay = true, calc_on_order_fills=false, calc_on_every_tick = false, initial_capital = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01)
////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
profit = input.float(defval = 0.1, minval = 0.0, title="Profit %", step=0.01, group = "Strategy") * 0.01
////////////////////////////////////////////////////////////
// Emponential Moving Average
////////////////////////////////////////////////////////////
ema = ta.ema(close, 200)
posEma = close < ema ? -1 : 1
////////////////////////////////////////////////////////////
// Trend Trader Strategy
////////////////////////////////////////////////////////////
Length = input.int(21, minval=1, group="Trend Trader Strategy")
Multiplier = input.float(3, minval=0.000001, group="Trend Trader Strategy")
avgTR = ta.wma(ta.atr(1), Length)
highestC = ta.highest(Length)
lowestC = ta.lowest(Length)
hiLimit = highestC[1] - avgTR[1] * Multiplier
loLimit = lowestC[1] + avgTR[1] * Multiplier
ret = 0.0
posTts = 0.0
ret:= close > hiLimit and close > loLimit ? hiLimit :
close < loLimit and close < hiLimit ? loLimit : nz(ret[1], close)
posTts:= close > ret ? 1 :close < ret ? -1 : nz(posTts[1], 0)
////////////////////////////////////////////////////////////
// Schaff Trend Cycle (STC)
////////////////////////////////////////////////////////////
EEEEEE = input.int(12, 'Length', group ="Schaff Trend Cycle")
BBBB = input.int(26, 'FastLength', group ="Schaff Trend Cycle")
BBBBB = input.int(50, 'SlowLength', group ="Schaff Trend Cycle")
AAAA(BBB, BBBB, BBBBB) =>
fastMA = ta.ema(BBB, BBBB)
slowMA = ta.ema(BBB, BBBBB)
AAAA = fastMA - slowMA
AAAA
AAAAA(EEEEEE, BBBB, BBBBB) =>
AAA = input.float(0.5, group ="Schaff Trend Cycle")
var CCCCC = 0.0
var DDD = 0.0
var DDDDDD = 0.0
var EEEEE = 0.0
BBBBBB = AAAA(close, BBBB, BBBBB)
CCC = ta.lowest(BBBBBB, EEEEEE)
CCCC = ta.highest(BBBBBB, EEEEEE) - CCC
CCCCC := CCCC > 0 ? (BBBBBB - CCC) / CCCC * 100 : nz(CCCCC[1])
DDD := na(DDD[1]) ? CCCCC : DDD[1] + AAA * (CCCCC - DDD[1])
DDDD = ta.lowest(DDD, EEEEEE)
DDDDD = ta.highest(DDD, EEEEEE) - DDDD
DDDDDD := DDDDD > 0 ? (DDD - DDDD) / DDDDD * 100 : nz(DDDDDD[1])
EEEEE := na(EEEEE[1]) ? DDDDDD : EEEEE[1] + AAA * (DDDDDD - EEEEE[1])
EEEEE
mAAAAA = AAAAA(EEEEEE, BBBB, BBBBB)
mColor = mAAAAA > mAAAAA[1] ? color.new(color.green, 20) : color.new(color.red, 20)
posStc = mAAAAA > mAAAAA[1] ? 1 : -1
////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
pos = posEma == 1 and posTts == 1 and posStc == 1 ? 1 : posEma == -1 and posTts == -1 and posStc == -1 ? -1 : 0
currentPostition = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
noOpenPosition = strategy.position_size == 0
signal = pos != pos[1] and pos == 1 and noOpenPosition ? 1 : pos != pos[1] and pos == -1 and noOpenPosition ? -1 : 0
stopPriceForLong = math.min(close * (1 - profit), low[1] * 0.9998, low[2] * 0.9998)
limitPriceForLong = close + (close - stopPriceForLong)
stopPriceForShort = math.max(close * (1 + profit), high[1] * 1.0002, high[2] * 1.0002)
limitPriceForShort = close - (stopPriceForShort - close)
if signal == 1
strategy.entry(id="L", direction=strategy.long)
strategy.exit(id='EL', from_entry='L', limit=limitPriceForLong, stop=stopPriceForLong)
if signal == -1
strategy.entry(id="S", direction=strategy.short)
strategy.exit(id='ES', from_entry='S', limit=limitPriceForShort, stop=stopPriceForShort)
////////////////////////////////////////////////////////////
// Plots - Debuger
////////////////////////////////////////////////////////////
plotchar(signal, title='singal', char = '')
plotchar(posEma, title='posEma', char = '')
plotchar(posTts, title='posTts', char = '')
plotchar(pos, title='pos', char = '')
plotchar(currentPostition, title = 'currentPostition', char='')
plotchar(stopPriceForLong, title = "stopPriceForLong", char ='')
plotchar(limitPriceForLong, title = 'limitPriceForLong', char='')
plotchar(stopPriceForShort, title = "stopPriceForShort", char ='')
plotchar(limitPriceForShort, title = 'limitPriceForShort', char='')
////////////////////////////////////////////////////////////
// Plots
////////////////////////////////////////////////////////////
plot(ret, color=color.new(color.black, 0), title='Trend Trader Strategy')
plotchar(mAAAAA, color=mColor, title='STC', location = location.bottom, char='-', size=size.normal)
plot(series = ema, title = "ema")