Strategi scalping intraday yang gila dengan kombinasi dwi penunjuk


Tarikh penciptaan: 2023-12-01 14:47:57 Akhirnya diubah suai: 2023-12-01 14:47:57
Salin: 0 Bilangan klik: 517
1
fokus pada
1212
Pengikut

Strategi scalping intraday yang gila dengan kombinasi dwi penunjuk

Gambaran keseluruhan

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.

Prinsip Strategi

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:

  1. TMO muncul sebagai tanda plurality, iaitu harga berpatah balik ke atas AND AMA muncul sebagai nilai plurality
  2. Indeks TMO menunjukkan isyarat shorting, iaitu harga berpatah balik ke bawah AND Indeks AMA menunjukkan minimum shorting
  3. Pada masa yang sama, jumlah entiti yang diminta untuk 3 baris K yang terakhir semakin besar.

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.

Kelebihan Strategik

Strategi ini mempunyai beberapa kelebihan:

  1. Kombinasi penunjuk, meningkatkan ketepatan isyarat. Penunjuk TMO dan penunjuk AMA saling mengesahkan, dapat mengurangkan isyarat palsu, sehingga meningkatkan ketepatan isyarat.

  2. 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.

  3. Pengendalian risiko K-Line Stop. Menggunakan harga tertinggi dan terendah terkini K-Line sebagai pengendalian kerugian, risiko setiap unit dapat dikawal dengan lebih baik.

  4. 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.

Risiko Strategik

Strategi ini mempunyai risiko utama:

  1. Sering keluar dari risiko masuk. Sebagai strategi Scalping, tempoh pegangan tidak lama, jika kos dagangan tinggi, akan memberi kesan kepada keuntungan.

  2. 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.

  3. Risiko kesukaran pengoptimuman parameter. Strategi melibatkan pelbagai parameter, dan mencari kombinasi parameter yang terbaik mungkin lebih sukar.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa arah:

  1. Menambah lebih banyak penapis seperti jumlah pasaran boleh menapis beberapa isyarat palsu dan meningkatkan lagi kualiti isyarat.

  2. 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.

  3. 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.

  4. 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.

ringkaskan

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.

Kod sumber strategi
/*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)