Esta estratégia visa SPY para negociar flutuações horárias para reversões de curto prazo.
Os crossovers de MA de 5 e 13 dias determinam as inversões de preços por hora.
Requer RSI acima de 50 para sinais de compra cruzados de MA.
O cruzamento da MA de 13 dias abaixo da MA de 5 dias e o cruzamento da linha MACD abaixo da linha de sinal geram sinais de venda.
As linhas de stop loss e take profit são definidas, com a tomada parcial de lucro na meta de 2x.
Opção para negociar em curto prazo após a conclusão da rodada em curso.
Parâmetros personalizáveis, como períodos de MA, rácios stop/profit, etc.
Captura as transacções de curto prazo a partir de variações de preços por hora.
A combinação multi-indicador melhora a precisão do sinal.
As configurações de paragem e lucro ajudam na gestão de riscos.
Os lucros parciais ajudam a garantir ganhos.
Os parâmetros personalizáveis são adequados para os traders de curto prazo.
As flutuações horárias podem causar falsos sinais e perdas.
Relações stop/profit inadequadas levam a uma saída prematura ou a uma liquidação.
Os parâmetros precisam de otimização para alguns símbolos.
A otimização corre o risco de ser excessivamente adequada.
A alta frequência de negociação aumenta os custos de transacção.
Teste combinações de parâmetros para encontrar o ideal.
Avaliar indicadores adicionais para confirmar sinais.
Otimizar as paradas e os objetivos para o equilíbrio risco-retorno.
Adicionar um filtro de tendência para evitar transações contra-tendência.
Relaxar as condições de lucro parcial para ganhos estendidos.
Avaliar outros símbolos adequados para a estratégia.
Esta estratégia visa capturar as oportunidades horárias de curto prazo do SPY. Refinando-o através de otimização, filtragem etc. pode aumentar a confiabilidade em um sistema eficaz de curto prazo.
//@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)