Cette stratégie combine les indicateurs Parabolic SAR, MACD et RSI pour mettre en œuvre des transactions automatiques longues et courtes sur plusieurs délais.
L'indicateur PSAR est utilisé pour déterminer la direction des prix et les points d'inversion de tendance.
L'indicateur MACD évalue la dynamique des prix. Le passage de la ligne MACD au-dessus de la ligne SIGNAL vers le haut est un signal haussier tandis que le passage vers le bas est baissier.
L'indicateur RSI évalue les conditions de surachat et de survente.
Combinez les signaux des trois indicateurs ci-dessus pour former une décision finale longue/courte.
Utilisez adaptivement l'indicateur Chop Index pour filtrer les marchés en consolidation afin d'éviter les sacs à main.
Utiliser la dimensionnement des positions par pyramide inverse pour gérer dynamiquement les objectifs de risque et de profit.
La combinaison de multiples indicateurs qui évaluent la tendance, l'élan et les oscillateurs améliore la précision.
Adapté aux conditions du marché en filtrant les marchés consolidés pour éviter de tomber dans des pièges.
Gestion dynamique des risques et des bénéfices par le biais d'une position pyramidale inversée avec des arrêts et des limites adaptatifs.
Très personnalisable avec des paramètres réglables pour différents produits et environnements de marché.
Prise en charge de plusieurs délais, flexible pour les transactions à court terme intraday ou à moyen/long terme.
Les décisions longues/courtes dépendent des paramètres qui peuvent provoquer des erreurs si elles sont inappropriées.
Possibilité de faux signaux conduisant à des décisions contraires à la tendance.
Les paramètres inappropriés de stop loss et de prise de profit peuvent augmenter les pertes ou réduire les bénéfices.
Il nécessite une surveillance fréquente et des ajustements de paramètres entraînant des coûts d'intervention humaine élevés.
Ajouter un module de validation du modèle pour évaluer les paramètres et l'efficacité du signal.
Augmenter le module d'apprentissage automatique pour l'optimisation automatique des paramètres et des modèles.
Ingérer plus de sources de données pour enrichir l'espace des fonctionnalités et améliorer les décisions.
Développer des systèmes automatisés de surveillance et de maintenance pour réduire l'intervention humaine.
Ajouter des évaluations de backtesting et de simulation pour valider les performances de la stratégie.
Cette stratégie réalise le trading quantitatif automatisé en combinant plusieurs indicateurs techniques avec un système basé sur des règles.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vikris //@version=4 strategy("[VJ]Phoenix Force of PSAR +MACD +RSI", overlay=true, calc_on_every_tick = false,pyramiding=0) // ********** Strategy inputs - Start ********** // Used for intraday handling // Session value should be from market start to the time you want to square-off // your intraday strategy // Important: The end time should be at least 2 minutes before the intraday // square-off time set by your broker var i_marketSession = input(title="Market session", type=input.session, defval="0915-1455", confirm=true) // Make inputs that set the take profit % (optional) longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01 shortProfitPerc = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01 // Set stop loss level with input options (optional) longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01 // ********** Strategy inputs - End ********** // ********** Supporting functions - Start ********** // A function to check whether the bar or period is in intraday session barInSession(sess) => time(timeframe.period, sess) != 0 // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // ********** Supporting functions - End ********** // ********** Strategy - Start ********** // See if intraday session is active bool intradaySession = barInSession(i_marketSession) // Trade only if intraday session is active //=================Strategy logic goes in here=========================== psar = sar(0.02,0.02,0.2) c1a = close > psar c1v = close < psar malen = input(50, title="MA Length") mm200 = sma(close, malen) c2a = close > mm200 c2v = close < mm200 fast = input(12, title="MACD Fast EMA Length") slow = input(26, title="MACD Slow EMA Length") [macd,signal,hist] = macd(close, fast,slow, 9) c3a = macd >= 0 c3v = macd <= 0 rsilen = input(7, title="RSI Length") th = input(50, title="RSI Threshold") rsi14 = rsi(close, rsilen) c4a = rsi14 >= th c4v = rsi14 <= th chopi = input(7, title="Chop Index lenght") ci = 100 * log10(sum(atr(1), chopi) / (highest(chopi) - lowest(chopi))) / log10(chopi) buy = c1a and c2a and c3a and c4a ? 1 : 0 sell = c1v and c2v and c3v and c4v ? -1 : 0 //Final Long/Short Condition longCondition = buy==1 and ci <50 shortCondition = sell==-1 and ci <50 //Long Strategy - buy condition and exits with Take profit and SL if (longCondition and intradaySession) stop_level = longStopPrice profit_level = longExitPrice strategy.entry("My Long Entry Id", strategy.long) strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level) //Short Strategy - sell condition and exits with Take profit and SL if (shortCondition and intradaySession) stop_level = shortStopPrice profit_level = shortExitPrice strategy.entry("My Short Entry Id", strategy.short) strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level) // Square-off position (when session is over and position is open) squareOff = (not intradaySession) and (strategy.position_size != 0) strategy.close_all(when = squareOff, comment = "Square-off") // ********** Strategy - End **********