Strategi ini menggabungkan isyarat beli dan beli dari kedua-dua indikator TMO dan AMA yang dibangunkan oleh LuxAlgo untuk menangkap peluang untuk memulakan trend dalam penyusunan penyingkiran yang bergolak. Ia akan melakukan lebih banyak shorting setelah memenuhi beberapa syarat seperti isyarat beli dan beli TMO, paras tertinggi dan teratas dalam indikator AMA, peningkatan entiti K-baris.
TMO mencerminkan pergerakan harga. Ia adalah jenis indikator goyah, yang boleh menghantar isyarat perdagangan apabila harga berlaku. Indikator AMA adalah rata-rata bergerak rata-rata. Ia menunjukkan satu julat turun naik harga, yang menunjukkan fenomena overbought dan oversold apabila harga mendekati naik turun.
Logik utama strategi ini adalah: TMO menunjukkan kawasan di mana harga mungkin berbalik dan memberi isyarat perdagangan, dan AMA menunjukkan kawasan di mana harga mungkin berbalik, dan K-line entiti diperbesar untuk mengesahkan permulaan trend. Oleh itu, kombinasi mereka dapat meningkatkan kadar kejayaan perdagangan. Secara khusus, strategi ini akan melakukan over atau short dalam keadaan berikut:
Dengan cara ini ia menyelesaikan masalah isyarat palsu yang disebabkan oleh satu petunjuk. Kaedah hentian kerugian memilih harga tertinggi dan terendah dalam N akar K garis paling dekat, yang dapat mengawal risiko dengan lebih baik.
Strategi ini mempunyai beberapa kelebihan:
Kombinasi penunjuk, meningkatkan ketepatan isyarat. Penunjuk TMO dan penunjuk AMA saling mengesahkan, dapat mengurangkan isyarat palsu, sehingga meningkatkan ketepatan isyarat.
Kombinasi pelbagai syarat, menangkap trend bermula. Tanda-tanda penunjuk TMO yang ditetapkan oleh strategi, paras penunjuk AMA dan peningkatan entiti K-line, dan banyak lagi syarat, dapat menangkap masa permulaan trend dengan berkesan, yang merupakan matlamat yang diusahakan oleh strategi Scalping.
Pengendalian risiko K-Line Stop. Menggunakan harga tertinggi dan terendah terkini K-Line sebagai pengendalian kerugian, risiko setiap unit dapat dikawal dengan lebih baik.
Logik perdagangan yang ringkas dan berkesan. Strategi ini hanya menggunakan dua petunjuk untuk mencapai strategi scalping yang lebih lengkap, tidak rumit, logiknya ringkas dan jelas. Dan dari hasil contoh, strategi ini mencapai keuntungan yang baik.
Strategi ini mempunyai risiko utama:
Sering keluar dari risiko masuk. Sebagai strategi Scalping, tempoh pegangan tidak lama, jika kos dagangan tinggi, akan memberi kesan kepada keuntungan.
K-line Stop loss terlalu radikal. Menggunakan harga tertinggi dan terendah terkini sebagai cara stop loss, mungkin lebih radikal dan tidak dapat menyaring bunyi pasaran sepenuhnya, meningkatkan kemungkinan stop loss akan dicetuskan.
Risiko kesukaran pengoptimuman parameter. Strategi melibatkan pelbagai parameter, dan mencari kombinasi parameter yang terbaik mungkin lebih sukar.
Strategi ini juga boleh dioptimumkan dalam beberapa arah:
Menambah lebih banyak penapis seperti jumlah pasaran boleh menapis beberapa isyarat palsu dan meningkatkan lagi kualiti isyarat.
Cuba untuk menambah syarat penapisan pada mod hentian, untuk mengelakkan hentian terlalu radikal. Sebagai contoh, tunggu beberapa garis K untuk disahkan sebelum mencetuskan hentian, kemudian hentikan.
Mengoptimumkan parameter untuk mencari kombinasi parameter indikator terbaik. Ini mungkin dapat menyaring lebih banyak kebisingan dan meningkatkan kemenangan strategi. Pengoptimuman utama adalah parameter seperti panjang indikator TMO, panjang indikator AMA dan kelipatan.
Cuba untuk melakukan pengesanan balik dan cakera keras pada pelbagai jenis dan tempoh masa untuk mencari jenis dan tempoh perdagangan yang paling sesuai dengan logik strategi tersebut.
Strategi ini menggunakan gabungan isyarat perdagangan TMO dan isyarat AMA untuk mencari masa permulaan trend dalam keadaan yang bergolak. Ia mempunyai keunggulan keakuratan isyarat yang tinggi, menangkap trend lebih awal dan mengawal risiko. Dengan pengoptimuman parameter dan peraturan lanjut, strategi ini boleh menjadi strategi scalping dalam sehari dengan nilai pertempuran yang sangat kuat.
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 10m
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/
// © Kaspricci
//@version=5
strategy("TradeIQ - Crazy Scalping Trading Strategy [Kaspricci]", overlay=true, initial_capital = 1000, currency = currency.USD)
headlineTMO = "TMO Settings"
tmoLength = input.int(7, "TMO Length", minval = 1, group = headlineTMO)
tmoSource = input.source(close, "TMO Source", group = headlineTMO)
// calculate values
osc = ta.mom(ta.sma(ta.sma(tmoSource, tmoLength), tmoLength), tmoLength)
// determine color of historgram
oscColor = osc > osc[1] and osc > 0 ? #00c42b : osc < osc[1] and osc > 0 ? #4ee567 : osc < osc[1] and osc < 0 ? #ff441f : osc > osc[1] and osc < 0 ? #c03920 : na
// plot histogram
//plot(osc, "OSC", oscColor, linewidth = 3, style = plot.style_histogram)
// conditon to find highs and lows
up = ta.highest(tmoSource, tmoLength)
dn = ta.lowest(tmoSource, tmoLength)
// define conditions to be used for finding divergence
phosc = ta.crossunder(ta.change(osc), 0)
plosc = ta.crossover (ta.change(osc), 0)
// test for divergence
bear = osc > 0 and phosc and ta.valuewhen(phosc,osc,0) < ta.valuewhen(phosc,osc,1) and ta.valuewhen(phosc,up,0) > ta.valuewhen(phosc,up,1) ? 1 : 0
bull = osc < 0 and plosc and ta.valuewhen(plosc,osc,0) > ta.valuewhen(plosc,osc,1) and ta.valuewhen(plosc,dn,0) < ta.valuewhen(plosc,dn,1) ? 1 : 0
// -------------------------------------------------------------------------------------------------------------
headlineAMA = "AMA Settings"
amaSource = input.source(defval = close, title = "AMA Source", group = headlineAMA)
amaLength = input.int(defval = 50, title = "AMA Length", minval = 2, group = headlineAMA)
amaMulti = input.float(defval = 2.0, title = "Factor", minval = 1)
amaShowCd = input(defval = true , title = "As Smoothed Candles")
amaShowEx = input(defval = true, title = "Show Alternating Extremities")
amaAlpha = input.float(1.0, "Lag", minval=0, step=.1, tooltip='Control the lag of the moving average (higher = more lag)', group= 'AMA Kernel Parameters')
amaBeta = input.float(0.5, "Overshoot", minval=0, step=.1, tooltip='Control the overshoot amplitude of the moving average (higher = overshoots with an higher amplitude)', group='AMA Kernel Parameters')
// -------------------------------------------------------------------------------------------------------------
headlineSL = "Stop Loss Settings"
slLength = input.int(defval = 10, title = "SL Period", minval = 1, group = headlineSL, tooltip = "Number of bars for swing high / low")
// -------------------------------------------------------------------------------------------------------------
var b = array.new_float(0)
var float x = na
if barstate.isfirst
for i = 0 to amaLength - 1
x := i / (amaLength - 1)
w = math.sin(2 * 3.14159 * math.pow(x, amaAlpha)) * (1 - math.pow(x, amaBeta))
array.push(b, w)
// local function to filter the source
filter(series float x) =>
sum = 0.
for i = 0 to amaLength - 1
sum := sum + x[i] * array.get(b,i)
sum / array.sum(b)
// apply filter function on source series
srcFiltered = filter(amaSource)
deviation = ta.sma(math.abs(amaSource - srcFiltered), amaLength) * amaMulti
upper = srcFiltered + deviation
lower = srcFiltered - deviation
//----
crossHigh = ta.cross(high, upper)
crossLow = ta.cross(low, lower)
var os = 0
os := crossHigh ? 1 : crossLow ? 0 : os[1]
ext = os * upper + (1 - os) * lower
//----
os_css = ta.rsi(srcFiltered, amaLength) / 100
extColor = os == 1 ? #30FF85 : #ff1100
plot(srcFiltered, "MA", amaShowCd ? na : color.black, 2, editable = false)
plot(amaShowEx ? ext : na, "Extremities", ta.change(os) ? na : extColor, 2, editable=false)
// handle smoothed candles
var float h = na
var float l = na
var float c = na
var float body = na
if amaShowCd
h := filter(high)
l := filter(low)
c := filter(amaSource)
body := math.abs(math.avg(c[1], c[2]) - c)
ohlc_os = ta.rsi(c, amaLength) / 100
plotcandle(math.avg(c[1], c[2]), h, l, c, "Smooth Candles", #434651, bordercolor = na, editable = false, display = amaShowCd ? display.all : display.none)
// -------------------------------------------------------------------------------------------------------------
plotshape(bull ? ext : na, "Bullish Circle", shape.circle, location.absolute, color = #00c42b, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Circle", shape.circle, location.absolute, color = #ff441f, size=size.tiny)
plotshape(bull ? ext : na, "Bullish Label", shape.labeldown, location.absolute, color = #00c42b, text="Buy", textcolor=color.white, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Label", shape.labelup, location.absolute, color = #ff441f, text="Sell", textcolor=color.white, size=size.tiny)
// -------------------------------------------------------------------------------------------------------------
candleSizeIncreasing = body[2] < body[1] and body[1] < body[0]
longEntryCond = os == 1 and bull
shortEntryCond = os == 0 and bear
longEntry = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(longEntryCond) < ta.barssince(os == 0) and ta.barssince(longEntryCond) < ta.barssince(bear)
shortEntry = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(shortEntryCond) < ta.barssince(os == 1) and ta.barssince(shortEntryCond) < ta.barssince(bull)
longExit = strategy.opentrades > 0 and strategy.position_size > 0 and (bear or os == 0)
shortExit = strategy.opentrades > 0 and strategy.position_size < 0 and (bull or os == 1)
recentSwingHigh = ta.highest(high, slLength) // highest high of last candles
recentSwingLow = ta.lowest(low, slLength) // lowest low of recent candles
bgcolor(longEntry ? color.rgb(76, 175, 79, 90) : na)
bgcolor(shortEntry ? color.rgb(255, 82, 82, 90) : na)
slLong = (close - recentSwingLow) / syminfo.mintick // stop loss in ticks
slShort = (recentSwingHigh - close) / syminfo.mintick // stop loss in ticks
newOrderID = str.tostring(strategy.closedtrades + strategy.opentrades + 1)
curOrderID = str.tostring(strategy.closedtrades + strategy.opentrades)
alertMessageForEntry = "Trade {0} - New {1} Entry at price: {2} with stop loss at: {3}"
if (longEntry)
alertMessage = str.format(alertMessageForEntry, newOrderID, "Long", close, recentSwingLow)
strategy.entry(newOrderID, strategy.long, alert_message = alertMessage)
strategy.exit("Stop Loss Long", newOrderID, loss = slLong, alert_message = "Stop Loss for Trade " + newOrderID)
if(longExit)
strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)
if (shortEntry)
alertMessage = str.format(alertMessageForEntry, newOrderID, "Short", close, recentSwingLow)
strategy.entry(newOrderID, strategy.short, alert_message = alertMessage)
strategy.exit("Stop Loss Short", newOrderID, loss = slShort, alert_message = "Stop Loss for Trade " + newOrderID)
if(shortExit)
strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)