
Strategi ini menggabungkan dua indikator teknologi utama, Indeks Omaha dan Indeks Apollo, untuk mencapai perdagangan dua jalur multifungsi. Ide dasarnya adalah mencari peluang masuk ke dalam harga garis pendek ketika tren garis panjang tengah dinilai sebagai bullish dan membangun bullish; mencari peluang masuk ke dalam harga garis pendek ketika tren garis panjang tengah dinilai sebagai bullish dan membangun bullish.
Strategi ini menggunakan dua rata-rata bergerak 50 dan 200 hari untuk menilai tren garis panjang tengah, dengan garis 50 di atas garis 200 hari menunjukkan tren multihead, sebaliknya, adalah tren overhead.
Strategi ini kemudian menggunakan indikator Omma untuk menemukan peluang untuk membalikkan harga garis pendek. Indikator Omma terdiri dari garis% K dan garis% D, yang masing-masing merupakan hasil dari indikator RSI yang telah diproses dengan perataan rata-rata bergerak sederhana. Ketika garis% K turun dari zona oversold (di atas 80) dan menerobos garis% D, menunjukkan bahwa harga berubah dari status overbought ke rebound, adalah kesempatan untuk memilih yang kosong. Ketika% K naik dari zona oversold (di bawah 20) dan menerobos garis% D, menunjukkan bahwa harga telah bangkit dari zona oversold, adalah kesempatan untuk memilih yang banyak.
Selain itu, untuk lebih memfilter peluang misreport, strategi ini juga memperkenalkan Apollo indicator. Apollo indicator menampilkan informasi titik titik titik nilai K-line% D. Ketika% K-line membentuk titik rendah baru, berarti bouncing lemah; Ketika membentuk titik tinggi baru, berarti bouncing kuat.
Secara khusus, dalam tren multihead, strategi ini akan memeriksa informasi titik tinggi baru untuk mengkonfirmasi kekuatan bouncing ketika indikator OMA menunjukkan pembentukan peluang tinggi di bawah zona oversold dan memeriksa informasi titik rendah baru untuk mengkonfirmasi kelemahan bouncing.
Melalui proses yang disebutkan di atas, strategi ini memanfaatkan keunggulan penilaian tren garis tengah dan panjang dan indikator pembalikan garis pendek untuk membangun sistem perdagangan dua jalur multi-air yang stabil.
Strategi ini menggabungkan penilaian tren dan indikator reversal, yang menggabungkan keunggulan perdagangan tren dan perdagangan kontra, untuk membentuk kerangka perdagangan campuran yang stabil.
Dengan filter ganda indikator, dapat mengurangi tingkat misreporting dan meningkatkan keandalan sinyal.
Parameter strategi yang sederhana, mudah dipahami dan dioptimalkan, cocok untuk trading kuantitatif.
Strategi ini berjalan dengan baik, dengan rasio kemenangan dan kerugian yang lebih baik.
Dengan menggunakan metode dual track multi-air, peluang perdagangan dapat terus berlanjut dan tidak terbatas pada satu arah.
Sebagai strategi reversal, ketika tren berubah, mungkin akan terjadi serangkaian kerugian beruntun.
Strategi ini membutuhkan kendali emosi yang tinggi dari trader, yang memerlukan rasio penarikan tertentu.
Beberapa parameter seperti siklus rata-rata bergerak memiliki subjektivitas tertentu, perlu ditentukan parameter yang tepat melalui pengoptimalan umpan balik.
Indikator Omicron dan Apollo memiliki sensitivitas terhadap fluktuasi yang tidak biasa, dan dalam situasi ekstrim dapat gagal.
Strategi ini lebih cocok untuk kondisi pasar yang bergejolak, dan efeknya dapat dikurangkan dalam situasi yang jelas.
Anda dapat menghindari risiko dengan memasukkan filter tren dengan menyesuaikan siklus rata-rata bergerak, dan menambahkan strategi stop loss. Anda dapat mempertimbangkan untuk menghentikan strategi Anda ketika pasar memasuki tren yang jelas dan menghindari perdagangan di lingkungan tersebut.
Uji kombinasi parameter yang berbeda untuk mendapatkan pengaturan parameter yang lebih baik. Misalnya, Anda dapat mencoba menggunakan indikator seperti rata-rata bergerak EWMA.
Menambahkan indikator seperti Volume atau BV untuk menilai deviasi, dapat lebih lanjut memverifikasi keandalan sinyal.
Menambahkan indeks panik seperti VIX sebagai indikator pemantauan untuk menurunkan posisi ketika pasar panik.
Optimalkan strategi stop loss, misalnya dengan stop loss dinamis seperti stop loss ATR.
Masukkan algoritma pembelajaran mesin untuk mengoptimalkan parameter pengaturan secara dinamis.
Menambahkan model multi-faktor untuk meningkatkan kualitas sinyal.
Strategi ini secara keseluruhan adalah strategi perdagangan kuantitatif yang stabil dan efisien. Ini menggabungkan penilaian tren dan indikator pembalikan, menggunakan metode verifikasi ganda indikator Omaha dan Apollo, yang dapat secara efektif menemukan peluang pembalikan harga garis pendek. Dibandingkan dengan sistem tren atau sistem pembalikan, bentuk strategi ini lebih kokoh, kontrol penarikan kembali lebih baik, dan merupakan strategi perdagangan kuantitatif yang disarankan.
/*backtest
start: 2023-10-25 00:00:00
end: 2023-10-28 00:00:00
period: 5m
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/
// © PtGambler
//@version=5
strategy("2 EMA + Stoch RSI + ATR [Pt]", shorttitle = "2EMA+Stoch+ATR", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills = false, max_bars_back = 500)
// ********************************** Trade Period / Strategy Setting **************************************
startY = input(title='Start Year', defval=2011, group = "Backtesting window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Backtesting window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Backtesting window")
finishY = input(title='Finish Year', defval=2050, group = "Backtesting window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Backtesting window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Backtesting window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
// ******************************************************************************************
group_ema = "EMA"
group_stoch = "Stochastic RSI"
group_atr = "ATR Stoploss Finder"
// ----------------------------------------- 2 EMA -------------------------------------
ema1_len = input.int(50, "EMA Length 1", group = group_ema)
ema2_len = input.int(200, "EMA Length 2", group = group_ema)
ema1 = ta.ema(close, ema1_len)
ema2 = ta.ema(close, ema2_len)
plot(ema1, "ema1", color.white, linewidth = 2)
plot(ema2, "ema2", color.orange, linewidth = 2)
ema_bull = ema1 > ema2
ema_bear = ema1 < ema2
// -------------------------------------- Stochastic RSI -----------------------------
smoothK = input.int(3, "K", minval=1, group = group_stoch)
smoothD = input.int(3, "D", minval=1, group = group_stoch)
lengthRSI = input.int(14, "RSI Length", minval=1, group = group_stoch)
lengthStoch = input.int(14, "Stochastic Length", minval=1, group = group_stoch)
src = close
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
var trigger_stoch_OB = k > 80
var trigger_stoch_OS = k < 20
stoch_crossdown = ta.crossunder(k, d)
stoch_crossup = ta.crossover(k, d)
P_hi = ta.pivothigh(k,1,1)
P_lo = ta.pivotlow(k,1,1)
previous_high = ta.valuewhen(P_hi, k, 1)
previous_low = ta.valuewhen(P_lo, k, 1)
recent_high = ta.valuewhen(P_hi, k, 0)
recent_low = ta.valuewhen(P_lo, k, 0)
// --------------------------------------- ATR stop loss finder ------------------------
length = input.int(title='Length', defval=14, minval=1, group = group_atr)
smoothing = input.string(title='Smoothing', defval='EMA', options=['RMA', 'SMA', 'EMA', 'WMA'], group = group_atr)
m = input.float(0.7, 'Multiplier', step = 0.1, group = group_atr)
src1 = input(high, "Source for upper band", group = group_atr)
src2 = input(low, "Source for lower band", group = group_atr)
showatr = input.bool(true, 'Show ATR Bands', group = group_atr)
collong = input.color(color.purple, 'Long ATR SL', inline='1', group = group_atr)
colshort = input.color(color.purple, 'Short ATR SL', inline='2', group = group_atr)
ma_function(source, length) =>
if smoothing == 'RMA'
ta.rma(source, length)
else
if smoothing == 'SMA'
ta.sma(source, length)
else
if smoothing == 'EMA'
ta.ema(source, length)
else
ta.wma(source, length)
a = ma_function(ta.tr(true), length) * m
up = ma_function(ta.tr(true), length) * m + src1
down = src2 - ma_function(ta.tr(true), length) * m
p1 = plot(showatr ? up : na, title='ATR Short Stop Loss', color=colshort)
p2 = plot(showatr ? down : na, title='ATR Long Stop Loss', color=collong)
// ******************************* Profit Target / Stop Loss *********************************************
RR = input.float(2.0, "Reward to Risk ratio (X times SL)", step = 0.1, group = "Profit Target")
var L_PT = 0.0
var S_PT = 0.0
var L_SL = 0.0
var S_SL = 0.0
BSLE = ta.barssince(strategy.opentrades.entry_bar_index(0) == bar_index)
if strategy.position_size > 0 and BSLE == 1
L_PT := close + (close-down)*RR
L_SL := L_SL[1]
S_PT := close - (up - close)*RR
S_SL := up
else if strategy.position_size < 0 and BSLE == 1
S_PT := close - (up - close)*RR
S_SL := S_SL[1]
L_PT := close + (close-down)*RR
L_SL := down
else if strategy.position_size != 0
L_PT := L_PT[1]
S_PT := S_PT[1]
else
L_PT := close + (close-down)*RR
L_SL := down
S_PT := close - (up - close)*RR
S_SL := up
entry_line = plot(strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na, "Entry Price", color.white, linewidth = 1, style = plot.style_linebr)
L_PT_line = plot(strategy.position_size > 0 and BSLE > 0 ? L_PT : na, "L PT", color.green, linewidth = 2, style = plot.style_linebr)
S_PT_line = plot(strategy.position_size < 0 and BSLE > 0 ? S_PT : na, "S PT", color.green, linewidth = 2, style = plot.style_linebr)
L_SL_line = plot(strategy.position_size > 0 and BSLE > 0 ? L_SL : na, "L SL", color.red, linewidth = 2, style = plot.style_linebr)
S_SL_line = plot(strategy.position_size < 0 and BSLE > 0 ? S_SL : na, "S SL", color.red, linewidth = 2, style = plot.style_linebr)
fill(L_PT_line, entry_line, color = color.new(color.green,90))
fill(S_PT_line, entry_line, color = color.new(color.green,90))
fill(L_SL_line, entry_line, color = color.new(color.red,90))
fill(S_SL_line, entry_line, color = color.new(color.red,90))
// ---------------------------------- strategy setup ------------------------------------------------------
var L_entry_trigger1 = false
var S_entry_trigger1 = false
L_entry_trigger1 := ema_bull and close < ema1 and k < 20 and strategy.position_size == 0
S_entry_trigger1 := ema_bear and close > ema1 and k > 80 and strategy.position_size == 0
L_entry1 = L_entry_trigger1[1] and stoch_crossup and recent_low > previous_low
S_entry1 = S_entry_trigger1[1] and stoch_crossdown and recent_high < previous_high
//debugging
plot(L_entry_trigger1[1]?1:0, "L Entry Trigger")
plot(stoch_crossup?1:0, "Stoch Cross Up")
plot(recent_low > previous_low?1:0, "Higher low")
plot(S_entry_trigger1[1]?1:0, "S Entry Trigger")
plot(stoch_crossdown?1:0, "Stoch Cross down")
plot(recent_high < previous_high?1:0, "Lower high")
if L_entry1
strategy.entry("Long", strategy.long)
if S_entry1
strategy.entry("Short", strategy.short)
strategy.exit("Exit Long", "Long", limit = L_PT, stop = L_SL, comment_profit = "Exit Long, PT hit", comment_loss = "Exit Long, SL hit")
strategy.exit("Exit Short", "Short", limit = S_PT, stop = S_SL, comment_profit = "Exit Short, PT hit", comment_loss = "Exit Short, SL hit")
//resetting triggers
L_entry_trigger1 := L_entry_trigger1[1] ? L_entry1 or ema_bear or S_entry1 ? false : true : L_entry_trigger1
S_entry_trigger1 := S_entry_trigger1[1] ? S_entry1 or ema_bull or L_entry1 ? false : true : S_entry_trigger1
//Trigger zones
bgcolor(L_entry_trigger1 ? color.new(color.green ,90) : na)
bgcolor(S_entry_trigger1 ? color.new(color.red,90) : na)