Strategi dagangan spread jangka pendek berdasarkan pecahan sesi


Tarikh penciptaan: 2023-09-20 17:00:16 Akhirnya diubah suai: 2023-09-20 17:00:16
Salin: 1 Bilangan klik: 724
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini digabungkan dengan papan berhenti kosong dalam bingkai masa yang berbilang untuk menangkap penembusan garis pendek untuk perdagangan penyebaran dalam tempoh sesi.

Prinsip Strategi

  1. Berhitung pada hari dan jangka masa pendek multi-orbit udara, membentuk terobosan dalam dua kerangka masa.

  2. Berdagang hanya dalam tempoh perdagangan yang disesuaikan. Perdagangan bermula dengan penembusan dan berakhir dengan penembusan.

  3. Harga dikira EMA masa nyata sebagai harga masuk. Harga melebihi orbit tengah akan menghasilkan isyarat pecah.

  4. Tetapkan garis hentian di luar lubang penembusan. Hentikan apabila penembusan gagal.

  5. Apabila harga kembali ke sekitar orbit tengah, sahkan kegagalan penembusan dan selesaikan kedudukan.

Analisis kelebihan

  1. Dengan menggunakan pelbagai kerangka masa, penapisan penembusan palsu dapat dilakukan dengan berkesan.

  2. “Saya tidak tahu apa-apa tentang apa yang berlaku di Malaysia, saya tidak tahu apa-apa tentang apa yang berlaku di Malaysia.

  3. EMA boleh mengesan harga secara beransur-ansur dan masuk tepat pada masanya.

  4. Menetapkan garis berhenti membantu mengawal risiko.

  5. Untuk mengelakkan risiko bermalam di dalam rumah, anda perlu memaksakan penutupan pada waktu tertentu.

Analisis risiko

  1. Keadaan di mana kemusnahan boleh dicetuskan oleh penembusan garis pendek.

  2. Sebahagian daripada kejayaan ini mungkin tidak akan dapat diperolehi sepenuhnya sebelum tamat tempoh tersebut.

  3. Anda juga boleh terlepas peluang perdagangan jika anda menetapkan masa yang tidak betul.

  4. Tidak ada jaminan bahawa setiap penembusan akan mencapai keuntungan yang diharapkan.

  5. Mungkin ada masalah dengan parameter yang dioptimumkan.

Arah pengoptimuman

  1. Uji pelbagai parameter penembusan untuk mencari kombinasi optimum.

  2. Penilaian penunjuk lain untuk meningkatkan ketepatan kemasukan

  3. Mengoptimumkan masa dagangan, mencari keseimbangan antara keuntungan dan risiko.

  4. Kajian mengenai bagaimana strategi penangguhan tergesa-gesa boleh digunakan untuk mengunci keuntungan.

  5. Uji kebolehan berbeza-beza dalam seting parameter pelbagai jenis.

  6. Parameter pengoptimuman dinamik menggunakan algoritma pembelajaran mesin.

ringkaskan

Strategi ini cuba untuk melakukan perdagangan penyebaran garis pendek melalui penembusan sesi terhad. Dengan pengoptimuman terhadap penembusan palsu dan kawalan risiko, ia boleh diperbaiki menjadi strategi perdagangan garis pendek yang praktikal dan berkesan.

Kod sumber strategi
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Breakout Scalper", overlay=true)

// -------------------------------------------------------------------------------------------------
// INPUTS
// -------------------------------------------------------------------------------------------------
// Period of the "fast" donchian channel
fast_window = input(title="Fast Window",  defval=13, minval=1)
// Used for the volatility (atr) period
slow_window = input(title="Slow Window",  defval=52, minval=1)
// Period of EMA used as the current price
instant_period = input(title="Instant Period",  defval=3, minval=1)
// Minimum ratio of cloud width to ATR in order for trade to be active
cloud_min_percent = input(title="Minimum Cloud ATR Multiplier", type=float, defval=1.0, minval=0)
// Session where we allow trades to be active
trading_sesh = input(title="Trading Session",  defval='1000-1500')
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// SESSION TIMING
// -------------------------------------------------------------------------------------------------
is_newbar(t) =>
    na(t[1]) and not na(t) or t[1] < t

day_time = time("D")
sess_time = time(timeframe.period, trading_sesh)
day_open_bar = is_newbar(day_time)
sess_open_bar = is_newbar(sess_time)
sess_close_bar = na(sess_time) and not na(sess_time[1])
sess_is_open = false
sess_is_open := sess_open_bar ? true : (sess_close_bar ? false : sess_is_open[1])
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// DONCHIANS
// -------------------------------------------------------------------------------------------------
slow_high = na
slow_high := day_open_bar ? high : (high > slow_high[1] ? high : slow_high[1])
slow_low = na
slow_low := day_open_bar ? low : (low < slow_low[1] ? low : slow_low[1])
slow_mid = (slow_high + slow_low) / 2

fast_low = max(slow_low, lowest(fast_window))
fast_high = min(slow_high, highest(fast_window))
fast_mid = (fast_low + fast_high) / 2
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// TREND CLOUD
// -------------------------------------------------------------------------------------------------
cloud_width = fast_mid - slow_mid
slow_atr = atr(slow_window)
cloud_percent = cloud_width / slow_atr
cloud_color = cloud_percent > cloud_min_percent ? green : (cloud_percent < -cloud_min_percent ? red : gray)

fp = plot(fast_mid, title="Fast MidR", color=green)
sp = plot(slow_mid, title="Slow MidR", color=red)
fill(fp, sp, color=cloud_color)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// INSTANT PRICE
// -------------------------------------------------------------------------------------------------
instant_price = ema(close, instant_period)
plot(instant_price, title="Instant Price", color=black, transp=50)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// ENTRY SIGNALS & STOPS
// -------------------------------------------------------------------------------------------------
buy_entry_signal = sess_is_open and (instant_price > fast_mid) and (cloud_percent > cloud_min_percent)
sell_entry_signal = sess_is_open and (instant_price < fast_mid) and (cloud_percent < -cloud_min_percent)
buy_close_signal = sess_close_bar or (cloud_percent < 0)
sell_close_signal = sess_close_bar or (cloud_percent > 0)

entry_buy_stop = slow_high
entry_sell_stop = slow_low
exit_buy_stop = max(slow_low, fast_low)
exit_sell_stop = min(slow_high, fast_high)

entry_buy_stop_color = (strategy.position_size == 0) ? (buy_entry_signal ? green : na) : na
plotshape(entry_buy_stop, location=location.absolute, color=entry_buy_stop_color, style=shape.circle)
entry_sell_stop_color = (strategy.position_size == 0) ? (sell_entry_signal ? red : na) : na
plotshape(entry_sell_stop, location=location.absolute, color=entry_sell_stop_color, style=shape.circle)
exit_buy_stop_color = (strategy.position_size > 0) ? red : na
plotshape(exit_buy_stop, location=location.absolute, color=exit_buy_stop_color, style=shape.xcross)
exit_sell_stop_color = (strategy.position_size < 0) ? green : na
plotshape(exit_sell_stop, location=location.absolute, color=exit_sell_stop_color, style=shape.xcross)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// STRATEGY EXECUTION
// -------------------------------------------------------------------------------------------------
strategy.entry("long", strategy.long, stop=entry_buy_stop, when=buy_entry_signal)
strategy.cancel("long", when=not buy_entry_signal)
strategy.exit("stop", "long", stop=exit_buy_stop)
strategy.entry("short", strategy.short, stop=entry_sell_stop, when=sell_entry_signal)
strategy.cancel("short", when=not sell_entry_signal)
strategy.exit("stop", "short", stop=exit_sell_stop)
strategy.close("long", when=buy_close_signal)
strategy.close("short", when=sell_close_signal)
// -------------------------------------------------------------------------------------------------