Strategi scalping intraday gila dengan kombinasi indikator ganda


Tanggal Pembuatan: 2023-12-01 14:47:57 Akhirnya memodifikasi: 2023-12-01 14:47:57
menyalin: 0 Jumlah klik: 515
1
fokus pada
1212
Pengikut

Strategi scalping intraday gila dengan kombinasi indikator ganda

Ringkasan

Strategi ini menggabungkan sinyal beli dan beli dari kedua indikator TMO dan AMA yang dikembangkan oleh LuxAlgo, untuk menangkap peluang untuk memulai tren dalam pengurutan guncangan. Ini akan melakukan lebih banyak shorting setelah memenuhi beberapa kondisi seperti sinyal beli dan beli dari indikator TMO, titik teratas dari indikator AMA, entitas K-line yang semakin besar.

Prinsip Strategi

Indikator TMO mencerminkan pergerakan harga. Ini adalah jenis indikator goyangan, yang dapat mengirimkan sinyal perdagangan ketika harga menyimpang. Indikator AMA adalah indikator rata-rata bergerak yang halus.

Logika utama dari strategi ini adalah bahwa TMO dapat mencerminkan pergerakan harga dari arah yang berbeda untuk memberikan sinyal perdagangan, dan AMA dapat menunjukkan area di mana harga mungkin akan berbalik, dan digabungkan dengan entitas K-line yang diperbesar untuk mengkonfirmasi bahwa tren telah dimulai. Oleh karena itu, kombinasi mereka dapat meningkatkan tingkat keberhasilan perdagangan. Secara khusus, strategi ini akan melakukan over atau short dalam situasi berikut:

  1. Indikator TMO muncul sebagai sinyal ganda, yaitu harga menyimpang ke atas dan indikator AMA muncul sebagai nilai maksimum ganda
  2. Indikator TMO menunjukkan sinyal shorting, yaitu harga menyimpang ke bawah AND indikator AMA menunjukkan minimal shorting
  3. Pada saat yang sama, jumlah entitas yang diminta untuk 3 garis K terbaru semakin besar.

Dengan cara ini, ia mengatasi masalah sinyal palsu yang disebabkan oleh satu indikator. Metode stop loss memilih harga tertinggi dan terendah dalam garis N-root K yang paling dekat, sehingga lebih baik mengendalikan risiko.

Keunggulan Strategis

Strategi ini memiliki beberapa keuntungan:

  1. Kombinasi indikator meningkatkan akurasi sinyal. TMO dan AMA saling memverifikasi satu sama lain, mengurangi sinyal palsu dan meningkatkan akurasi sinyal.

  2. Kombinasi beberapa kondisi, menangkap tren mulai. Strategi yang ditetapkan TMO sinyal indikator, AMA indikator maksimum dan K-line entitas amplifikasi beberapa kondisi, dapat secara efektif menangkap waktu mulai tren, yang merupakan tujuan dari strategi Scalping mengejar.

  3. Pengendalian risiko dengan K-Line Stop. Menggunakan harga tertinggi dan terendah terbaru dari K-Line sebagai pengendalian risiko, Anda dapat mengontrol risiko setiap saham dengan lebih baik.

  4. Strategi ini hanya menggunakan dua indikator untuk mencapai strategi scalping yang lebih lengkap, tidak rumit, logikanya sederhana dan jelas. Dan dari hasil contoh, strategi ini menghasilkan keuntungan yang bagus.

Risiko Strategis

Strategi ini memiliki risiko utama sebagai berikut:

  1. Sering keluar dari risiko masuk. Sebagai strategi Scalping, jangka waktu kepemilikannya tidak lama, jika biaya perdagangan tinggi, akan berdampak pada keuntungan.

  2. Stop loss K-line terlalu radikal. Menggunakan harga tertinggi dan terendah terbaru sebagai metode stop loss, mungkin lebih radikal dan tidak dapat sepenuhnya menyaring kebisingan pasar, meningkatkan probabilitas stop loss yang dipicu.

  3. Risiko kesulitan pengoptimalan parameter. Strategi melibatkan beberapa parameter, dan mencari kombinasi parameter yang optimal mungkin lebih sulit.

Arah optimasi

Strategi ini juga dapat dioptimalkan dari beberapa arah:

  1. Menambahkan lebih banyak indikator penyaringan, seperti volume transaksi pasar, dapat menyaring beberapa sinyal palsu dan meningkatkan kualitas sinyal lebih lanjut.

  2. Cobalah untuk menambahkan kondisi filter pada metode stop loss, dan hindari stop loss yang terlalu radikal. Misalnya menunggu beberapa root K line konfirmasi sebelum memicu stop loss, dan kemudian stop loss.

  3. Optimalkan parameter untuk menemukan kombinasi optimal dari parameter indikator. Hal ini dapat menyaring lebih banyak kebisingan dan meningkatkan strategi kemenangan. Optimalkan parameter utama seperti panjang indikator TMO, panjang indikator AMA dan kelipatan.

  4. Cobalah untuk melakukan retrospeksi dan real-time pada berbagai varietas dan periode waktu untuk menemukan varietas dan periode perdagangan yang paling sesuai dengan logika strategi tersebut.

Meringkaskan

Strategi ini menggunakan kombinasi sinyal perdagangan dari indikator TMO dan indikator AMA untuk melakukan Scalping pada saat tren dimulai dalam situasi yang bergolak. Ini memiliki keunggulan akurasi sinyal yang tinggi, menangkap tren lebih awal dan mengendalikan risiko. Setelah melakukan optimasi parameter dan aturan lebih lanjut, strategi ini dapat menjadi strategi Scalping intraday dengan nilai pertempuran yang sangat kuat.

Kode 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)