Chiến lược này nhắm vào thị trường SPY, sử dụng biến động giá hàng giờ để đánh giá xu hướng thị trường, thực hiện giao dịch đảo ngược ngắn.
Sử dụng các đường trung bình di chuyển 5 ngày và 13 ngày để xác định mức giá theo giờ.
Khi chỉ số RSI cao hơn 50, di chuyển chu kỳ trung bình sẽ tạo ra tín hiệu mua.
13 đường trung bình dưới đường trung bình 5 ngày, MACD phân cách giá trị dưới đường tín hiệu tạo ra tín hiệu bán.
Thiết lập các đường dừng lỗ và ngăn chặn, và thanh toán một phần khi đạt mục tiêu lợi nhuận gấp đôi.
Có thể chọn giao dịch bằng không, sau khi hoàn thành vòng giao dịch này, quyết định xem có vào vòng giao dịch bằng không tiếp theo hay không.
Các tham số đầu vào có thể được tùy chỉnh như đường trung bình, tỷ lệ dừng lỗ, v.v.
Tận dụng các biến động giá hàng giờ để nắm bắt các cơ hội giao dịch ngắn hạn.
Xác minh kết hợp nhiều chỉ số giúp tăng độ chính xác tín hiệu.
Thiết lập chiến lược dừng lỗ có thể giúp kiểm soát rủi ro.
Một phần của lệnh cấm có thể khóa lợi nhuận.
Các tham số đầu vào có thể được tùy chỉnh để phù hợp với các nhà giao dịch đường ngắn.
Những biến động giá hàng giờ có thể dẫn đến tín hiệu sai dẫn đến tổn thất.
Tỷ lệ Stop Loss được thiết lập không đúng, có thể dừng quá sớm hoặc giữ quá lâu.
Một số tham số giống cần điều chỉnh tối ưu hóa để đạt được hiệu quả phản hồi tốt.
Có thể có nguy cơ quá phù hợp khi tối ưu hóa.
Các giao dịch thường xuyên sẽ làm tăng chi phí giao dịch.
Kiểm tra các tổ hợp tham số khác nhau để tìm ra tham số tốt nhất.
Đánh giá các chỉ số khác hỗ trợ xác nhận tín hiệu giao dịch.
Tối ưu hóa chiến lược dừng lỗ, cân bằng rủi ro và lợi nhuận.
Thêm bộ lọc xu hướng để tránh giao dịch ngược.
Một số điều kiện dừng lại được nới lỏng một cách thích hợp, kéo dài thời gian thu lợi nhuận.
Đánh giá các giống khác phù hợp với chiến lược này.
Chiến lược này cố gắng nắm bắt cơ hội giao dịch ngắn hàng giờ của SPY. Có thể tăng độ tin cậy bằng cách tối ưu hóa tham số, lọc tín hiệu, v.v. để tạo ra một chiến lược giao dịch ngắn hiệu quả.
//@version=5
strategy(title="SPY 1 Hour Swing Trader", initial_capital=300000, default_qty_type=strategy.percent_of_equity, default_qty_value=15, pyramiding=0, commission_type=strategy.commission.cash_per_order, commission_value=0, overlay=true, calc_on_every_tick=false, process_orders_on_close=true, max_labels_count=500)
//The purpose of this script is to spot 1 hour pivots that indicate ~5 to 6 trading day swings.
//Results indicate that swings are held approximately 5 to 6 trading days on average, over the last 6 years.
//This indicator spots a go long opportunity when the 5 ema crosses the 13 ema on the 1 hour along with the RSI > 50.
//It also spots uses a couple different means to determine when to exit the trade. Sell condition is
//primarily when the 13 ema crosses the 5 ema and the MACD line crosses below the signal line and
//the smoothed Stoichastic appears oversold (greater than 60). Stop Losses and Take Profits are configurable
//in Inputs along with ability to include short trades plus other MACD and Stoichastic settings.
//If a stop loss is encountered the trade will close. Also once twice the expected move is encountered
//partial profits will taken and stop losses and take profits will be re-established based on most recent close
//Once long trades are exited, short trades will be initiated if recent conditions appeared oversold and
//input option for short trading is enabled. If trying to use this for something other than SPXL it is best
//to update stop losses and take profit percentages and check backtest results to ensure proper levels have
//been selected and the script gives satisfactory results.
// Initialize variables
var float long_entry_price = na
var float short_entry_price = na
var float stop_loss = na
var float take_profit = na
var float twoxtake_profit = na
var float short_stop_loss = na
var float short_take_profit = na
var float short_twoxtake_profit = na
var int startshort = 0
// Inputs
short = input.bool(true, "Include Short Trades!")
option_SL_P = input.float(0.02, "Input Stop Loss Percentage (0.02 = 2%)")
option_TP_P = input.float(0.03, "Input Take Profit Percentage (0.03 = 3%)")
pp = input.int(50, "Partial Profit Percentage in whole numbers (50 is 50%)")
ema5 = input.int(5, "Fast EMA Period", minval=1)
ema13 = input.int(13, "Slow EMA Period", minval=1)
rsi_length = input.int(14, "RSI Length", minval=1)
macd_fast_length = input.int(8, "MACD Fast Length", minval=1)
macd_slow_length = input.int(21, "MACD Slow Length", minval=1)
macd_signal_length = input.int(5, "MACD Signal Length", minval=1)
len = input.int(14, title="ADX Length", minval=1)
length = input.int(14, "Stochastic Length")
smoothK = input.int(3, "Stoicastic Smooth K")
src = input(close, "Stoicastic Source")
// Calculating EMA
ema_13 = ta.ema(close, ema13)
ema_5 = ta.ema(close, ema5)
// Calculate RSI
rsi = ta.rsi(close, rsi_length)
smooth_rsi = ta.ema(rsi, 5)
// Calculate MACD
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
// Calculate the True Range
tr = ta.tr(true)
// Calculate slope of MACD line
rsiSlope = (smooth_rsi - smooth_rsi[3]) / (bar_index - bar_index[3])
// Calculate the Directional Movement
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
// Calculate the Smoothed Directional Movement
plusDI = 100 * ta.ema(plusDM, len) / ta.ema(tr, len)
minusDI = 100 * ta.ema(minusDM, len) / ta.ema(tr, len)
// Calculate the Directional Index (DX)
DX = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
// Calculate the ADX
adx = ta.ema(DX, len)
//Stochastic Calculation
highestHigh = ta.highest(src, length)
lowestLow = ta.lowest(src, length)
k = 100 * ((src - lowestLow) / (highestHigh - lowestLow))
d = ta.sma(k, smoothK)
// Determine current VIX
vixClose = request.security("VIX", timeframe.period, close[3])
//plot(vixClose, title="VIX Close", color=color.red)
// Buy and Sell Conditions
buy_condition = ta.crossover(ema_5 , ema_13) and rsi > 50
sell_condition = ema_13 > ema_5 and macd_line < signal_line and (d > 60)
// Plotting indicators
plot(ema_13, color=color.orange, title="Slow EMA Period")
plot(ema_5, color=color.blue, title="Fast EMA Period")
// Executing trades
if buy_condition and strategy.position_size == 0 and barstate.isconfirmed
strategy.entry("Pivot Up", strategy.long, alert_message = "Pivoting Up")
long_entry_price := close
stop_loss := long_entry_price - (option_SL_P * close)
take_profit := long_entry_price + (option_TP_P * close)
twoxtake_profit := long_entry_price + (2 * option_TP_P * close)
if strategy.position_size > 0 and barstate.isconfirmed
if close < stop_loss and barstate.isconfirmed
strategy.close("Pivot Up", "Exit Longs Stopped")
if short == 1
startshort := 1
else if sell_condition and barstate.isconfirmed
if short == 1
startshort := 1
strategy.close("Pivot Up", "Exit Longs Sell Condition Met")
else if close >= twoxtake_profit and barstate.isconfirmed
stop_loss := close - (.5*option_TP_P*close)
take_profit := close + (.5*option_TP_P*close)
strategy.exit("Exit Partial Longs", "Pivot Up", stop=stop_loss, limit = take_profit, qty_percent = pp)
if startshort == 1
if (d[6] > 80) and barstate.isconfirmed
strategy.entry("Pivot Down", strategy.short, alert_message = "Pivoting Down")
short_entry_price := close
short_stop_loss := short_entry_price + (option_SL_P * close)
short_take_profit := short_entry_price - (option_TP_P * close)
short_twoxtake_profit := short_entry_price - (2 * option_TP_P * close)
startshort := 0
else
startshort := 0
if strategy.position_size < 0 and barstate.isconfirmed
if close > short_stop_loss and barstate.isconfirmed
strategy.close("Pivot Down", "Exit Shorts Stopped")
else if close <= short_twoxtake_profit and barstate.isconfirmed
short_stop_loss := close + (.5*option_TP_P*close)
short_take_profit := close - (.5*option_TP_P*close)
strategy.exit("Exit Partial Shorts", "Pivot Down", stop=short_stop_loss, limit = short_take_profit, qty_percent = pp)