
Strategi ini menggunakan indikator EMA, strategi pelacakan tren TTS, dan tiga indikator STC siklus tren Shuffle untuk membentuk strategi yang lebih kuat untuk melacak tren garis pendek. Secara khusus, strategi ini akan menilai apakah sinyal kosong dari ketiga indikator tersebut konsisten, dan jika konsisten, akan menghasilkan sinyal perdagangan; jika tidak konsisten, tidak ada penjualan. Ini dapat memfilter beberapa sinyal palsu, membuat strategi lebih dapat diandalkan.
Strategi ini terdiri dari tiga bagian utama: indikator EMA smoothing, strategi pelacakan tren TTS, dan indikator siklus tren STC Shufter.
Pertama, menghitung 200 siklus EMA indeks moving average, menilai apakah harga di bawah atau di atas garis EMA, jika harga di bawah garis, EMA indikator memberikan sinyal kepala kosong;-1; jika harga di atas garis, EMA indikator memberikan sinyal kepala ganda: 1
Kedua, menghitung parameter yang relevan dengan strategi pelacakan tren TTS, menilai arah tren berdasarkan harga yang menerobos ke bawah. Jika harga menerobos ke atas, menghasilkan sinyal multihead 1; Jika harga menerobos ke bawah, menghasilkan sinyal kosong -1.
Akhirnya, perhitungkan indikator STC siklus tren Shuffle, yang mencerminkan tren perubahan pusat harga. Jika indikator STC naik, menghasilkan sinyal multihead 1; jika indikator STC turun, menghasilkan sinyal kosong -1.
Setelah mendapatkan tiga sinyal penilaian indikator, strategi akan menilai apakah mereka sesuai. Hanya jika tiga sinyal penilaian indikator semuanya sesuai, sinyal perdagangan yang sebenarnya akan dihasilkan. Ini dapat secara efektif memfilter beberapa sinyal palsu, sehingga strategi lebih dapat diandalkan.
Jika sinyal perdagangan telah terdeteksi, maka melakukan komisi over atau under dan mengatur titik stop loss.
Strategi ini menggabungkan tiga jenis indikator yang berbeda untuk menentukan arah tren pasar secara efektif.
Dengan menggunakan tiga indikator penilaian keseragaman sinyal untuk memfilter sinyal palsu, dapat mengurangi transaksi yang tidak perlu dan membuat strategi lebih dapat diandalkan.
Tetapkan Stop Loss yang masuk akal untuk mengunci keuntungan dan menghindari kerugian yang lebih besar.
Parameter yang dipilih telah dioptimalkan untuk sebagian besar saham dan varietas valuta asing.
Logika transaksi jelas dan ringkas, mudah dipahami dan dimodifikasi.
Dimers muncul ketika ada ketidaksesuaian antara tiga indikator judgment, sehingga mudah untuk melewatkan peluang trading. Pertimbangan untuk mengoptimalkan aturan judgment dapat dilakukan.
Indikator STC memiliki sensitivitas yang lebih tinggi terhadap parameter, yang perlu disesuaikan dengan varietas yang berbeda.
Dalam situasi resesi, stop loss dapat ditembus dan menyebabkan kerugian yang lebih besar. Anda dapat mempertimbangkan untuk mengoptimalkan stop loss secara real-time.
Tidak dapat menilai secara efektif apa yang terjadi, dan apa yang terjadi di ruang masuk dapat menyebabkan penjara.
Anda dapat menguji kombinasi dari lebih banyak indikator, mencari aturan penilaian yang lebih kuat. Misalnya, menambahkan indikator RSI dan sebagainya.
Optimalkan parameter indikator STC agar lebih sesuai dengan varietas yang berbeda. Tambahkan modul optimalisasi parameter adaptif.
Tambahkan modul Stop Loss Adaptive, yang dapat mengoptimalkan pengaturan Stop Loss secara real-time sesuai dengan situasi.
Meningkatkan Modul Peninggalan, Mengetahui Apakah Anda Memilih Peninggalan, Menghindari Penjara.
Optimalisasi algoritma untuk transaksi frekuensi tinggi, mengurangi latensi sistem, meningkatkan tingkat keberhasilan penugasan.
Strategi ini menggunakan tiga indikator EMA, TTS, dan STC untuk menentukan arah tren pasar, dan aturan penilaian yang disetel untuk menghasilkan sinyal perdagangan ketika ketiganya konsisten, sehingga dapat memfilter sinyal palsu secara efektif. Ada banyak ruang untuk mengoptimalkan strategi, dengan menguji lebih banyak kombinasi indikator, menambahkan algoritma yang dapat disesuaikan, dan mengoptimalkan 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")