
Ini adalah strategi perdagangan intraday yang didasarkan pada rata-rata bergerak berbobot volume transaksi (VWMA) yang memungkinkan operasi dua arah multi-halangan melalui portofolio opsi sintetis. Inti dari strategi ini adalah indikator VWMA yang dihitung ulang setiap hari perdagangan, menghasilkan sinyal perdagangan berdasarkan posisi harga relatif terhadap VWMA, dan secara otomatis melunasi posisi sebelum penutupan. Strategi ini memiliki mekanisme kontrol risiko yang baik, termasuk manajemen posisi dan pembatasan frekuensi perdagangan.
Logika inti dari strategi ini didasarkan pada poin-poin berikut:
Ini adalah strategi perdagangan intraday yang terstruktur dan logis. Strategi ini menangkap tren jangka pendek melalui indikator VWMA, berdagang dalam kombinasi dengan portofolio opsi sintetis, dan memiliki mekanisme pengendalian risiko yang baik. Ruang pengoptimalan strategi ini terutama terletak pada pengurangan sinyal palsu, peningkatan efisiensi pelaksanaan, dan peningkatan sistem manajemen risiko.
/*backtest
start: 2025-02-16 00:00:00
end: 2025-02-23 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Session VWMA Synthetic Options Strategy", overlay=true, initial_capital=100000,
default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=10, calc_on_every_tick=true)
//──────────────────────────────
// Session VWMA Inputs
//──────────────────────────────
vwmaLen = input.int(55, title="VWMA Length", inline="VWMA", group="Session VWMA")
vwmaColor = input.color(color.orange, title="VWMA Color", inline="VWMA", group="Session VWMA", tooltip="VWMA resets at the start of each session (at the opening of the day).")
//──────────────────────────────
// Session VWMA Calculation Function
//──────────────────────────────
day_vwma(_start, s, l) =>
bs_nd = ta.barssince(_start)
v_len = math.max(1, bs_nd < l ? bs_nd : l)
ta.vwma(s, v_len)
//──────────────────────────────
// Determine Session Start
//──────────────────────────────
// newSession becomes true on the first bar of a new day.
newSession = ta.change(time("D")) != 0
//──────────────────────────────
// Compute Session VWMA
//──────────────────────────────
vwmaValue = day_vwma(newSession, close, vwmaLen)
plot(vwmaValue, color=vwmaColor, title="Session VWMA")
//──────────────────────────────
// Define Signal Conditions (only on transition)
//──────────────────────────────
bullCond = low > vwmaValue // Bullish: candle low above VWMA
bearCond = high < vwmaValue // Bearish: candle high below VWMA
// Trigger signal only on the bar where the condition first becomes true
bullSignal = bullCond and not bullCond[1]
bearSignal = bearCond and not bearCond[1]
//──────────────────────────────
// **Exit Condition at 15:29 IST**
//──────────────────────────────
sessionEnd = hour == 15 and minute == 29
// Exit all positions at 15:29 IST
if sessionEnd
strategy.close_all(comment="Closing all positions at session end")
//──────────────────────────────
// **Trade Control Logic**
//──────────────────────────────
var bool hasExited = true // Track if an exit has occurred since last entry
// Reset exit flag when a position is exited
if strategy.position_size == 0
hasExited := true
//──────────────────────────────
// **Position Management: Entry & Exit**
//──────────────────────────────
if newSession
hasExited := true // Allow first trade of the day
// On a bullish signal:
// • If currently short, close the short position and then enter long
// • Otherwise, add to any existing long position **only if an exit happened before**
if bullSignal and (hasExited or newSession)
if strategy.position_size < 0
strategy.close("Short", comment="Exit Short on Bull Signal")
strategy.entry("Long", strategy.long, comment="Enter Long: Buy Call & Sell Put at ATM")
else
strategy.entry("Long", strategy.long, comment="Add Long: Buy Call & Sell Put at ATM")
hasExited := false // Reset exit flag
// On a bearish signal:
// • If currently long, close the long position and then enter short
// • Otherwise, add to any existing short position **only if an exit happened before**
if bearSignal and (hasExited or newSession)
if strategy.position_size > 0
strategy.close("Long", comment="Exit Long on Bear Signal")
strategy.entry("Short", strategy.short, comment="Enter Short: Buy Put & Sell Call at ATM")
else
strategy.entry("Short", strategy.short, comment="Add Short: Buy Put & Sell Call at ATM")
hasExited := false // Reset exit flag
//──────────────────────────────
// **Updated Alert Conditions**
//──────────────────────────────
// Alerts for valid trade entries
alertcondition(bullSignal and (hasExited or newSession),
title="Long Entry Alert",
message="Bullish signal: BUY CALL & SELL PUT at ATM. Entry allowed.")
alertcondition(bearSignal and (hasExited or newSession),
title="Short Entry Alert",
message="Bearish signal: BUY PUT & SELL CALL at ATM. Entry allowed.")