
Ini adalah strategi perdagangan dalam hari berdasarkan pelbagai petunjuk teknikal, yang digunakan untuk perdagangan menggunakan pelbagai isyarat seperti saluran EMA, RSI overbought dan oversold, pengesahan trend MACD. Strategi ini berjalan pada kitaran 3 minit, menangkap trend pasaran melalui orbit EMA yang tinggi dan rendah yang digabungkan dengan pengesahan silang RSI dan MACD, dan menetapkan stop loss dinamik berdasarkan ATR, dan masa penyelesaian yang tetap.
Strategi menggunakan 20 kitaran EMA untuk mengira harga tertinggi dan terendah secara berasingan untuk membentuk saluran, masuk apabila harga menembusi saluran dan memenuhi syarat berikut:
Strategi ini membina sistem perdagangan yang agak lengkap melalui penggunaan gabungan pelbagai petunjuk teknikal. Kelebihan strategi ini adalah kawalan risiko yang lebih baik, termasuk mekanisme seperti berhenti dinamik, risiko tetap dan penyelesaian. Walaupun terdapat risiko ketinggalan, prestasi strategi dapat ditingkatkan lagi dengan mengoptimumkan parameter dan menambah petunjuk tambahan.
/*backtest
start: 2024-02-21 00:00:00
end: 2024-09-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Intraday 3min EMA HL Strategy v6",
overlay=true,
margin_long=100,
margin_short=100,
initial_capital=100000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.05,
calc_on_every_tick=false,
process_orders_on_close=true,
pyramiding=0)
// Input Parameters
i_emaLength = input.int(20, "EMA Length", minval=5, group="Strategy Parameters")
i_rsiLength = input.int(14, "RSI Length", minval=5, group="Strategy Parameters")
i_atrLength = input.int(14, "ATR Length", minval=5, group="Risk Management")
i_rrRatio = input.float(2.5, "Risk:Reward Ratio", minval=1, maxval=10, step=0.5, group="Risk Management")
i_riskPercent = input.float(1, "Risk % per Trade", minval=0.1, maxval=5, step=0.1, group="Risk Management")
// Time Exit Parameters (IST)
i_exitHour = input.int(15, "Exit Hour (IST)", minval=0, maxval=23, group="Session Rules")
i_exitMinute = input.int(0, "Exit Minute (IST)", minval=0, maxval=59, group="Session Rules")
// Indicator Calculations
emaHigh = ta.ema(high, i_emaLength)
emaLow = ta.ema(low, i_emaLength)
rsi = ta.rsi(close, i_rsiLength)
atr = ta.atr(i_atrLength)
fastMA = ta.ema(close, 12)
slowMA = ta.ema(close, 26)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, 9)
// Time Calculations (UTC to IST Conversion)
istHour = (hour(time) + 5) % 24 // UTC+5
istMinute = minute(time) + 30 // 30 minute offset
istHour += istMinute >= 60 ? 1 : 0
istMinute := istMinute % 60
// Exit Condition
timeExit = istHour > i_exitHour or (istHour == i_exitHour and istMinute >= i_exitMinute)
// Entry Conditions (Multi-line formatting fix)
longCondition = close > emaHigh and
rsi > 50 and
rsi < 70 and
ta.crossover(macdLine, signalLine)
shortCondition = close < emaLow and
rsi < 50 and
rsi > 30 and
ta.crossunder(macdLine, signalLine)
// Risk Calculations
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float posSize = na
// Strategy Logic
if longCondition and not timeExit and strategy.position_size == 0
entryPrice := close
stopLoss := math.min(low, entryPrice - atr)
takeProfit := entryPrice + (entryPrice - stopLoss) * i_rrRatio
posSize := strategy.equity * i_riskPercent / 100 / (entryPrice - stopLoss)
strategy.entry("Long", strategy.long, qty=posSize)
strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
if shortCondition and not timeExit and strategy.position_size == 0
entryPrice := close
stopLoss := math.max(high, entryPrice + atr)
takeProfit := entryPrice - (stopLoss - entryPrice) * i_rrRatio
posSize := strategy.equity * i_riskPercent / 100 / (stopLoss - entryPrice)
strategy.entry("Short", strategy.short, qty=posSize)
strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
// Force Close at Session End
if timeExit
strategy.close_all()
// Visual Components
plot(emaHigh, "EMA High", color=color.rgb(0, 128, 0), linewidth=2)
plot(emaLow, "EMA Low", color=color.rgb(255, 0, 0), linewidth=2)
plotshape(longCondition, "Long Signal", shape.triangleup,
location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown,
location.abovebar, color=color.red, size=size.small)
// Debugging Table
var table infoTable = table.new(position.top_right, 3, 3)
if barstate.islast
table.cell(infoTable, 0, 0, "EMA High: " + str.tostring(emaHigh, "#.00"))
table.cell(infoTable, 0, 1, "EMA Low: " + str.tostring(emaLow, "#.00"))
table.cell(infoTable, 0, 2, "Current RSI: " + str.tostring(rsi, "#.00"))