Il s'agit d'une stratégie de scalping courte typique, utilisant des indicateurs de moyenne mobile et de dynamique pour déterminer les tendances à court terme.
La logique de la stratégie:
Définir la fourchette pré-marché comme étant dans l'heure d'ouverture.
Utilisez l'EMA à 50 périodes pour évaluer la fourchette de prix équitable.
Le croisement SMI à basse fréquence indique une entrée longue.
La fermeture en dessous de la EMA est un signal de stop loss.
Prenez un objectif de profit fixe pour le scalping à court terme.
Les avantages:
La rupture de l'EMA à court terme montre une tendance intraday.
Le SMI confirme les retours en arrière.
Des paramètres de backtest limités rendent le trading en direct simple.
Les risques:
Les ruptures sont sujettes aux pièges pré-marché, méfiez-vous des retours en arrière.
Une seule séance quotidienne Impossible de se défendre contre les lacunes.
Les arrêts serrés sont susceptibles de provoquer une sortie prématurée s'ils sont mal calibrés.
En résumé, il s'agit d'une stratégie de scalping court pré-marché typique utilisant l'EMA/SMI pour survivre à des ruptures à forte volatilité.
/*backtest start: 2022-09-12 00:00:00 end: 2023-09-12 00:00:00 period: 4d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["v_input_7",65]] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Trading_Bites //@version=5 // strategy('Morning Scalp', overlay=false, pyramiding=2, initial_capital=3000, default_qty_value=0, commission_value=0.02, max_labels_count=500) // Initial Inputs StartDate = timestamp('15Aug 2022 14:00 +0000') EndDate = timestamp('15Aug 2022 20:00 +0000') testPeriodStart = input(StartDate, 'Start of trading') testPeriodEnd = input(EndDate, 'End of trading') QuantityOnLong = input(title="Quantity", defval=100, minval=1) QuantityOnClose = QuantityOnLong ////////////////////////////////////////////////////////////////////// //-- Time In Range timeinrange(res, sess) => not na(time(res, sess)) //Market Open// marketopen = '0930-1600' MarketOpen = timeinrange(timeframe.period, marketopen) ////////////////////////////////////////////////////////////////////// //Market Hour// morning = '1000-1210' Morning = timeinrange(timeframe.period, morning) ////////////////////////////////////////////////////////////////////////// //STOCK MOMENTUM INDEX// a = input(5, 'Percent K Length') b = input(3, 'Percent D Length') ovrsld = input.float(40, 'Over Bought') ovrbgt = input(-40, 'Over Sold') //lateleave = input(14, "Number of candles", type=input.integer) // Range Calculation ll = ta.lowest(low, a) hh = ta.highest(high, a) diff = hh - ll rdiff = close - (hh + ll) / 2 // Nested Moving Average for smoother curves avgrel = ta.ema(ta.ema(rdiff, b), b) avgdiff = ta.ema(ta.ema(diff, b), b) // SMI calculations SMI = avgdiff != 0 ? avgrel / (avgdiff / 2) * 100 : 0 SMIsignal = ta.ema(SMI, b) CrossoverIndex = ta.crossover(SMI, SMIsignal) CrossunderIndex = ta.crossunder(SMI, SMIsignal) plot1 = plot(SMI, color=color.new(color.aqua, 0), title='Stochastic Momentum Index', linewidth=1, style=plot.style_line) plot2 = plot(SMIsignal, color=color.new(color.red, 0), title='SMI Signal Line', linewidth=1, style=plot.style_line) hline = plot(ovrsld, color=color.new(color.red, 0), title='Over Bought') lline = plot(ovrbgt, color=color.new(color.green, 0), title='Over Sold') plot(CrossoverIndex ? close : na, color=color.new(color.aqua, 0), style=plot.style_cross, linewidth=2, title='RSICrossover') mycol1 = SMIsignal > -ovrbgt ? color.red : na mycol2 = SMIsignal < -ovrsld ? color.green : na fill(plot1, hline, color=color.new(mycol1, 80)) fill(plot2, lline, color=color.new(mycol2, 80)) ////////////////////////////////////////////////////////////////////// // Input EMA9 and EMA21 EMA50Len = input( 50 ) EMA50 = ta.ema(close, EMA50Len) ////////////////////////////////////////////////////////////////////////// // -------- VWAP ----------// vwapLine = ta.vwap(close) //////////////////////////////////////////////////////////////////////// //PROFIT TARGET// longProfitPer = input(10.0, title='Take Profit %') / 100 TargetPrice = strategy.position_avg_price * (1 + longProfitPer) //plot (strategy.position_size > 0 ? TargetPrice : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Price Target") //BUY STRATEGY CONDITION// condentry = ta.crossover(SMI, SMIsignal) and SMI < 0 profittarget = TargetPrice stoploss = close < EMA50 ///////////////////////////STRATEGY BUILD////////////////////////////////////// if MarketOpen if close > EMA50 if (condentry) and Morning strategy.entry('Long', strategy.long) if profittarget and strategy.position_size > 0 strategy.exit(id="Long", limit=TargetPrice) if stoploss strategy.close('Long' )