Cette stratégie utilise 7 indicateurs RSI avec des délais différents pour déterminer les tendances du marché et établir des positions de grille pour une négociation efficace de la grille lorsque les indicateurs RSI fluctuent.
La stratégie utilise 7 indicateurs RSI avec des délais différents (1 minute, 5 minutes, 15 minutes, 30 minutes, 1 heure, 2 heures et 1 jour). Lorsque les 7 indicateurs RSI sont simultanément inférieurs à la ligne de surachat, un signal d'achat est généré. Lorsque les 7 indicateurs RSI sont simultanément supérieurs à la ligne de survente, un signal de vente est généré.
En fonction des signaux d'achat et de vente, 20 ordres avec des intervalles de prix en pourcentage fixes sont placés autour du prix actuel. Par exemple, si le prix d'entrée est de 100 $ et l'intervalle entre les ordres est de 2%, les prix des ordres seraient de 98 $, 96 $... jusqu'à 60 $.
Lorsque le prix atteint l'un des prix de l'ordre, un ordre est exécuté et une position établie.
L'utilisation de multiples indicateurs permet d'éviter une mauvaise interprétation de l'évolution du marché.
L'indicateur RSI identifie de manière fiable les niveaux de surachat et de survente, en évitant les hauts d'achat et les bas de vente.
Les commandes en réseau entrent efficacement dans les positions, évitant de courir après les hausses et les baisses.
Les paramètres de prise de profit et de stop loss aident à gérer les risques et réduisent l'exposition aux pertes lors de mouvements extrêmes.
Des mouvements de prix brusques pourraient pénétrer la grille, ce qui peut être résolu en établissant des intervalles raisonnables et en augmentant les marges.
Les arrêts de pertes trop rapprochés peuvent entraîner des coûts de glissement inutiles.
Certains indicateurs RSI peuvent générer des signaux incorrects. Filtrer certains délais RSI peut isoler les problèmes.
Différentes combinaisons de paramètres et de logiques de jugement alternatives peuvent être testées pour affiner les stratégies d'entrée et de sortie.
Incorporer des métriques de volatilité pour ajuster automatiquement les intervalles de grille, avec des intervalles plus larges dans des environnements à plus forte volatilité.
Ajouter des modules de gestion des capitaux pour modifier dynamiquement la taille maximale des positions, les intervalles de grille, etc. en fonction du capital du compte.
Cette stratégie combine des indicateurs RSI multi-temporels pour déterminer les tendances du marché, établissant efficacement des positions de grille pendant les marchés variés. Les avantages de l'optimisation des coûts, de la prise de profit, de la réduction des pertes et du contrôle des risques le rendent approprié pour les traders qui cherchent à capitaliser sur les marchés variés tout en tolérant les risques définis. D'autres raffinements et optimisations sont possibles pour répondre aux appétits de risque spécifiques.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["MinLot",0.001,358374]] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © rrolik66 //@version=4 strategy(title="7-RSI strategy", overlay=true) // inputs src = input(close, "Source RSI", type = input.source) bot_res = input(title="Bot period", type=input.resolution, defval="1") srcin_bot = input(ohlc4, "Source Bot", type = input.source) src_bot = security(syminfo.tickerid, bot_res, srcin_bot) tradeDirection = input(title="Trade Direction", type=input.string, options=["Long Bot", "Short Bot"], defval="Long Bot") rsi1_res = input(title="RSI-1 period", type=input.resolution, defval="1", group="indicators") rsi1_Len = input(14, minval=1, title="RSI-1 Length", group="indicators") rsi2_res = input(title="RSI-2 period", type=input.resolution, defval="5", group="indicators") rsi2_Len = input(14, minval=1, title="RSI-2 Length", group="indicators") rsi3_res = input(title="RSI-3 period", type=input.resolution, defval="15", group="indicators") rsi3_Len = input(14, minval=1, title="RSI-3 Length", group="indicators") rsi4_res = input(title="RSI-4 period", type=input.resolution, defval="30", group="indicators") rsi4_Len = input(14, minval=1, title="RSI-4 Length", group="indicators") rsi5_res = input(title="RSI-5 period", type=input.resolution, defval="60", group="indicators") rsi5_Len = input(14, minval=1, title="RSI-5 Length", group="indicators") rsi6_res = input(title="RSI-6 period", type=input.resolution, defval="120", group="indicators") rsi6_Len = input(14, minval=1, title="RSI-6 Length", group="indicators") rsi7_res = input(title="RSI-7 period", type=input.resolution, defval="1D", group="indicators") rsi7_Len = input(14, minval=1, title="RSI-7 Length", group="indicators") longProfitPerc = input(title="Long Bot Take Profit (%)", type=input.float, minval=0.0, step=0.05, defval=0.5, group="Long Bot") * 0.01 st_long_orders = input(title="Long Bot Step orders (%)", type=input.float, minval=0.0, step=0.1, defval=2.0, group="Long Bot") * 0.01 rsi1_low = input(100, title="RSI-1 <", group="Long Bot") rsi2_low = input(100, title="RSI-2 <", group="Long Bot") rsi3_low = input(100, title="RSI-3 <", group="Long Bot") rsi4_low = input(100, title="RSI-4 <", group="Long Bot") rsi5_low = input(100, title="RSI-5 <", group="Long Bot") rsi6_low = input(100, title="RSI-6 <", group="Long Bot") rsi7_low = input(100, title="RSI-7 <", group="Long Bot") shortProfitPerc = input(title="Short Bot Take Profit (%)", type=input.float, minval=0.0, step=0.05, defval=0.5, group="Short Bot") * 0.01 st_short_orders = input(title="Short Bot Step orders (%)", type=input.float, minval=0.0, step=0.1, defval=2.0, group="Short Bot") * 0.01 rsi1_up = input(0, title="RSI-1 >", group="Short Bot") rsi2_up = input(0, title="RSI-2 >", group="Short Bot") rsi3_up = input(0, title="RSI-3 >", group="Short Bot") rsi4_up = input(0, title="RSI-4 >", group="Short Bot") rsi5_up = input(0, title="RSI-5 >", group="Short Bot") rsi6_up = input(0, title="RSI-6 >", group="Short Bot") rsi7_up = input(0, title="RSI-7 >", group="Short Bot") //indicators rsi1 = rsi(src, rsi1_Len) rsi1_sec = security(syminfo.tickerid, rsi1_res, rsi1) rsi2 = rsi(src, rsi2_Len) rsi2_sec = security(syminfo.tickerid, rsi2_res, rsi2) rsi3 = rsi(src, rsi3_Len) rsi3_sec = security(syminfo.tickerid, rsi3_res, rsi3) rsi4 = rsi(src, rsi4_Len) rsi4_sec = security(syminfo.tickerid, rsi4_res, rsi4) rsi5 = rsi(src, rsi5_Len) rsi5_sec = security(syminfo.tickerid, rsi5_res, rsi5) rsi6 = rsi(src, rsi6_Len) rsi6_sec = security(syminfo.tickerid, rsi6_res, rsi6) rsi7 = rsi(src, rsi7_Len) rsi7_sec = security(syminfo.tickerid, rsi7_res, rsi7) //RSI rsi1_up_signal = rsi1_sec > rsi1_up rsi1_low_signal = rsi1_sec < rsi1_low rsi2_up_signal = rsi2_sec > rsi2_up rsi2_low_signal = rsi2_sec < rsi2_low rsi3_up_signal = rsi3_sec > rsi3_up rsi3_low_signal = rsi3_sec < rsi3_low rsi4_up_signal = rsi4_sec > rsi4_up rsi4_low_signal = rsi4_sec < rsi4_low rsi5_up_signal = rsi5_sec > rsi5_up rsi5_low_signal = rsi5_sec < rsi5_low rsi6_up_signal = rsi6_sec > rsi6_up rsi6_low_signal = rsi6_sec < rsi6_low rsi7_up_signal = rsi7_sec > rsi7_up rsi7_low_signal = rsi7_sec < rsi7_low //Buy & Sell Buy = rsi1_low_signal and rsi2_low_signal and rsi3_low_signal and rsi4_low_signal and rsi5_low_signal and rsi6_low_signal and rsi7_low_signal Sell = rsi1_up_signal and rsi2_up_signal and rsi3_up_signal and rsi4_up_signal and rsi5_up_signal and rsi6_up_signal and rsi7_up_signal // input into trading conditions longOK = (tradeDirection == "Long Bot") shortOK = (tradeDirection == "Short Bot") // in entry orders price longEntryPrice1 = src_bot * (1 - (st_long_orders)) longEntryPrice2 = src_bot * (1 - (st_long_orders*2)) longEntryPrice3 = src_bot * (1 - (st_long_orders*3)) longEntryPrice4 = src_bot * (1 - (st_long_orders*4)) longEntryPrice5 = src_bot * (1 - (st_long_orders*5)) longEntryPrice6 = src_bot * (1 - (st_long_orders*6)) longEntryPrice7 = src_bot * (1 - (st_long_orders*7)) longEntryPrice8 = src_bot * (1 - (st_long_orders*8)) longEntryPrice9 = src_bot * (1 - (st_long_orders*9)) longEntryPrice10 = src_bot * (1 - (st_long_orders*10)) longEntryPrice11 = src_bot * (1 - (st_long_orders*11)) longEntryPrice12 = src_bot * (1 - (st_long_orders*12)) longEntryPrice13 = src_bot * (1 - (st_long_orders*13)) longEntryPrice14 = src_bot * (1 - (st_long_orders*14)) longEntryPrice15 = src_bot * (1 - (st_long_orders*15)) longEntryPrice16 = src_bot * (1 - (st_long_orders*16)) longEntryPrice17 = src_bot * (1 - (st_long_orders*17)) longEntryPrice18 = src_bot * (1 - (st_long_orders*18)) longEntryPrice19 = src_bot * (1 - (st_long_orders*19)) shortEntryPrice1 = src_bot * (1 + st_short_orders) shortEntryPrice2 = src_bot * (1 + (st_short_orders*2)) shortEntryPrice3 = src_bot * (1 + (st_short_orders*3)) shortEntryPrice4 = src_bot * (1 + (st_short_orders*4)) shortEntryPrice5 = src_bot * (1 + (st_short_orders*5)) shortEntryPrice6 = src_bot * (1 + (st_short_orders*6)) shortEntryPrice7 = src_bot * (1 + (st_short_orders*7)) shortEntryPrice8 = src_bot * (1 + (st_short_orders*8)) shortEntryPrice9 = src_bot * (1 + (st_short_orders*9)) shortEntryPrice10 = src_bot * (1 + (st_short_orders*10)) shortEntryPrice11 = src_bot * (1 + (st_short_orders*11)) shortEntryPrice12 = src_bot * (1 + (st_short_orders*12)) shortEntryPrice13 = src_bot * (1 + (st_short_orders*13)) shortEntryPrice14 = src_bot * (1 + (st_short_orders*14)) shortEntryPrice15 = src_bot * (1 + (st_short_orders*15)) shortEntryPrice16 = src_bot * (1 + (st_short_orders*16)) shortEntryPrice17 = src_bot * (1 + (st_short_orders*17)) shortEntryPrice18 = src_bot * (1 + (st_short_orders*18)) shortEntryPrice19 = src_bot * (1 + (st_short_orders*19)) // take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // take profit values for confirmation plot(series=(strategy.position_size > 0) ? longExitPrice : na, color=color.green, style=plot.style_circles, linewidth=3, title="Long Take Profit") plot(series=(strategy.position_size < 0) ? shortExitPrice : na, color=color.red, style=plot.style_circles, linewidth=3, title="Short Take Profit") // entry orders if (strategy.position_size == 0) strategy.order(id="Long0", long=true, limit=src_bot, when=longOK and Buy) strategy.order(id="Long1", long=true, limit=longEntryPrice1, when=longOK and Buy) strategy.order(id="Long2", long=true, limit=longEntryPrice2, when=longOK and Buy) strategy.order(id="Long3", long=true, limit=longEntryPrice3, when=longOK and Buy) strategy.order(id="Long4", long=true, limit=longEntryPrice4, when=longOK and Buy) strategy.order(id="Long5", long=true, limit=longEntryPrice5, when=longOK and Buy) strategy.order(id="Long6", long=true, limit=longEntryPrice6, when=longOK and Buy) strategy.order(id="Long7", long=true, limit=longEntryPrice7, when=longOK and Buy) strategy.order(id="Long8", long=true, limit=longEntryPrice8, when=longOK and Buy) strategy.order(id="Long9", long=true, limit=longEntryPrice9, when=longOK and Buy) strategy.order(id="Long10", long=true, limit=longEntryPrice10, when=longOK and Buy) strategy.order(id="Long11", long=true, limit=longEntryPrice11, when=longOK and Buy) strategy.order(id="Long12", long=true, limit=longEntryPrice12, when=longOK and Buy) strategy.order(id="Long13", long=true, limit=longEntryPrice13, when=longOK and Buy) strategy.order(id="Long14", long=true, limit=longEntryPrice14, when=longOK and Buy) strategy.order(id="Long15", long=true, limit=longEntryPrice15, when=longOK and Buy) strategy.order(id="Long16", long=true, limit=longEntryPrice16, when=longOK and Buy) strategy.order(id="Long17", long=true, limit=longEntryPrice17, when=longOK and Buy) strategy.order(id="Long18", long=true, limit=longEntryPrice18, when=longOK and Buy) strategy.order(id="Long19", long=true, limit=longEntryPrice19, when=longOK and Buy) if (strategy.position_size == 0) strategy.order(id="Short0", long=false, limit=src_bot, when=shortOK and Sell) strategy.order(id="Short1", long=false, limit=shortEntryPrice1, when=shortOK and Sell) strategy.order(id="Short2", long=false, limit=shortEntryPrice2, when=shortOK and Sell) strategy.order(id="Short3", long=false, limit=shortEntryPrice3, when=shortOK and Sell) strategy.order(id="Short4", long=false, limit=shortEntryPrice4, when=shortOK and Sell) strategy.order(id="Short5", long=false, limit=shortEntryPrice5, when=shortOK and Sell) strategy.order(id="Short6", long=false, limit=shortEntryPrice6, when=shortOK and Sell) strategy.order(id="Short7", long=false, limit=shortEntryPrice7, when=shortOK and Sell) strategy.order(id="Short8", long=false, limit=shortEntryPrice8, when=shortOK and Sell) strategy.order(id="Short9", long=false, limit=shortEntryPrice9, when=shortOK and Sell) strategy.order(id="Short10", long=false, limit=shortEntryPrice10, when=shortOK and Sell) strategy.order(id="Short11", long=false, limit=shortEntryPrice11, when=shortOK and Sell) strategy.order(id="Short12", long=false, limit=shortEntryPrice12, when=shortOK and Sell) strategy.order(id="Short13", long=false, limit=shortEntryPrice13, when=shortOK and Sell) strategy.order(id="Short14", long=false, limit=shortEntryPrice14, when=shortOK and Sell) strategy.order(id="Short15", long=false, limit=shortEntryPrice15, when=shortOK and Sell) strategy.order(id="Short16", long=false, limit=shortEntryPrice16, when=shortOK and Sell) strategy.order(id="Short17", long=false, limit=shortEntryPrice17, when=shortOK and Sell) strategy.order(id="Short18", long=false, limit=shortEntryPrice18, when=shortOK and Sell) strategy.order(id="Short19", long=false, limit=shortEntryPrice19, when=shortOK and Sell) // exit position based on take profit price if (strategy.position_size > 0) strategy.order(id="exit_Long", long=false, limit=longExitPrice, qty=strategy.position_size) if (strategy.position_size < 0) strategy.order(id="exit_Short", long=true, limit=shortExitPrice, qty=abs(strategy.position_size))