Cette stratégie est basée sur le concept de trading d'inversion d'élan. Elle utilise le RSI, le Stoch et le MACD pour déterminer la direction de la tendance actuelle, et définit un stop loss et un profit basé sur l'ATR, pour mettre en œuvre une stratégie de trading automatisée qui peut capturer efficacement les inversions de tendance.
La stratégie utilise RSI, Stoch et MACD comme trois indicateurs pour déterminer la direction de la tendance actuelle.
Lorsque les trois indicateurs sont haussiers, la couleur de la barre est réglée sur le vert. Lorsque tous sont baissiers, la couleur de la barre est réglée sur le rouge. S'il y a une divergence entre les indicateurs, la couleur de la barre est réglée sur le noir.
Les règles de négociation sont les suivantes:
La stratégie utilise également l'ATR (7) pour définir le stop loss et le take profit.
Les avantages de cette stratégie sont les suivants:
L'utilisation de plusieurs indicateurs pour déterminer la tendance peut filtrer efficacement les fausses ruptures.
Les paramètres d'arrêt des pertes et de prise de profit ATR sont raisonnables. ATR peut suivre efficacement la volatilité du marché. En utilisant des multiples d'ATR, les arrêts et les objectifs peuvent être ajustés dynamiquement en fonction des conditions du marché.
Une logique simple et claire, facile à comprendre et à automatiser.
Les risques de cette stratégie comprennent:
Les erreurs dans les indicateurs individuels peuvent affecter le calendrier d'entrée.
La taille de l'ATR affecte considérablement les arrêts et les cibles. Un calcul incorrect de l'ATR peut entraîner des arrêts trop larges ou des cibles trop serrées. Peut ajouter des indicateurs supplémentaires pour confirmer l'ATR.
Manque de détermination de tendance. axée sur le trading inverse, une analyse de tendance insuffisante peut entraîner des fléchettes sur les marchés en évolution. peut ajouter des indicateurs de tendance.
Risque de surajustement: nécessite un backtesting approfondi pour vérifier la robustesse des paramètres et des règles.
Améliorations possibles de cette stratégie:
Ajustement ou ajout d'indicateurs pour améliorer la précision de la détermination des points de renversement, par exemple l'ajout de bandes de Bollinger pour vérifier les niveaux de surachat/survente.
Optimiser le calcul de l'ATR pour mieux suivre la volatilité, par exemple en utilisant des ratios ATR/prix.
L'ajout d'indicateurs de tendance pour éviter les sauts de marée sur les marchés variables, par exemple les moyennes mobiles.
Optimisation de la gestion de l'argent, par exemple en ajustant la taille des positions en fonction du tirage.
Optimisation de la période pour tester la robustesse à travers les délais.
Plus de tests antérieurs sur différents produits et périodes de temps pour vérifier la fiabilité.
Cette stratégie est conçue sur la base de concepts de renversement de momentum, en utilisant des combinaisons RSI, Stoch et MACD pour identifier les renversements, avec des arrêts et des cibles ATR dynamiques. Elle forme un système d'inversion de tendance relativement complet. Les avantages incluent une logique claire et des arrêts / cibles raisonnables. Les lacunes incluent des erreurs de signal et l'absence de filtres de tendance. Des améliorations peuvent être apportées en optimisant les indicateurs, en ajoutant des tendances et en ajustant la taille des positions.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 2h basePeriod: 15m 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/ // © jwitt98 //The PowerX strategy - based on the rules outlined in the book "The PowerX Strategy: How to Trade Stocks and Options in Only 15 Minutes a Day" by Markus Heitkoetter //@version=5 strategy("PowerX", overlay=true) strategy.initial_capital = 50000 longEntry = "Enter long" shortEntry = "Enter short" longExit = "Exit long" shortExit = "Exit short" //*********************************Begin inputs********************************* //get time range inputs and set time range bool timeRangeGroup = "Select the trading range" startDate = input(timestamp("1 Jan 2021 00:00 +0000"), "Start date", "Select the start date for the trading range", "", timeRangeGroup) endDate = input(timestamp("1 Jan 2050 00:00 +0000"), "End date", "Select the end date for the trading range", "", timeRangeGroup) isInTimeRange = true //get long/short inputs positionsAllowedGroup = "Select the direction(s) of trades to allow" isLongsAllowed = input.bool(true, "Allow long positions", "Check the box if you want to allow long positions", "", positionsAllowedGroup) isShortsAllowed = input.bool(true, "Allow short positions", "Check the box if you want to allow short positions", "", positionsAllowedGroup) //get the stop loss and profit target multiples. Per the PowerX rules the ratio shoud be 1:2. 1.5 and 3 are defaults adrMultuplesGroup="Select the multipliers for the stop loss and profit targets" stopLossMultiple = input.float(1.5, "Stop loss multiple", 0.1, 10, 0.1, "The ADR is multiplied by the stop loss multiple to calculate the stop loss", group=adrMultuplesGroup) profitTargetMultiple=input.float(3.0, "Profit target multiple", 0.1, 10, 0.1, "The ADR is multiplied by the profit target multiple to calculate the profit target", group=adrMultuplesGroup) //get the option to use the money management stategy or not. This is a fixed ratio type management system moneyManagementGroup="Money management" isUsingMoneyManagement=input.bool(false, "Use money management", "Check the box if you want to use a fixed ratio type money management system, such as the type described in PowerX", group=moneyManagementGroup) initial_riskPercent=input.float(2.0, "Percent risk per trade", .1, 100, .1, "The percentage of capital you want to risk when starting out. This will increase or decrease base on the money management rules. Only applicable if money managent is used", group=moneyManagementGroup)/100 isRiskDowsideLimited=input.bool(false, "Keep risk at or above the set point", "Check the box if you don't want the risk to fall below the set \"risk per trade\" percentage, for example, when your equity is underwater. Only applicable if money management is used", "", moneyManagementGroup) initial_riskPerTrade=initial_riskPercent * strategy.initial_capital riskFactor = 0.0 currentProfit = 0.0 currentRisk = 0.0 //*********************************End inputs********************************* //*********************************Begin money management********************************* if(isUsingMoneyManagement) currentProfit := strategy.equity - strategy.initial_capital if(currentProfit < 0) currentProfit:=math.abs(currentProfit) riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1) currentRisk := 1/riskFactor * initial_riskPercent * strategy.initial_capital if(isRiskDowsideLimited) currentRisk := initial_riskPerTrade else riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1) currentRisk := riskFactor * initial_riskPercent * strategy.initial_capital plot(strategy.equity, "Strategy equity") plot(currentRisk, "Current risk") plot(riskFactor, "Risk Factor") //*********************************End money management********************************* //*********************************Begin indicators********************************* //4 indicators are used in this strategy, RSI(7), Stochastics(14, 3, 3), MACD(12, 26, 9), and ADR(7) rsiVal = ta.rsi(close, 7)//this checks out plot(rsiVal, "RSI(7)", color.lime) stochKVal = ta.sma(ta.sma(ta.stoch(close, high, low, 14),3),3)//this formula checks out plot(stochKVal, "Stoch %K", color.lime) [macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) plot(histLine, "MACD Hist", color.lime) adr = ta.sma(high, 7) - ta.sma(low, 7) plot(adr, "Average daily range", color.orange) //*********************************End indicators********************************* //*********************************Define the bar colors********************************* greenBar = rsiVal > 50 and stochKVal > 50 and histLine > 0 redBar = rsiVal < 50 and stochKVal < 50 and histLine < 0 blackBar = not greenBar and not redBar color currentBarColor = switch greenBar => color.green redBar => color.red blackBar => color.gray //because black is too hard to see in dark mmode => color.yellow barcolor(currentBarColor) //*********************************End defining the bar colors********************************* //*********************************Define the entry, stop loss and profit target********************************* longStopLimit = high + .01 longProfitTarget = high + (profitTargetMultiple * adr) longStopLoss = high - (stopLossMultiple * adr) shortStopLimit = low - .01 shortProfitTarget = low - (profitTargetMultiple * adr) shortStopLoss = low + (stopLossMultiple * adr) qtyToTrade= math.floor(currentRisk / (stopLossMultiple * adr))//only if using money management if(qtyToTrade * high > strategy.equity) qtyToTrade := math.floor(strategy.equity / high) //*********************************End defining stop loss and profit targets********************************* //*********************************Execute trades, set rules, stop loss and profit targets********************************* if (greenBar and not greenBar[1] and isInTimeRange and isLongsAllowed) if(isUsingMoneyManagement) strategy.order(longEntry, strategy.long, qtyToTrade, limit=longStopLimit, stop=longStopLimit) //strategy.order(longEntry, strategy.long, qtyToTrade, stop=longStopLimit) else strategy.order(longEntry, strategy.long, limit=longStopLimit,stop=longStopLimit) //strategy.order(longEntry, strategy.long, stop=longStopLimit) strategy.exit("Long limit/stop", from_entry=longEntry, limit=longProfitTarget, stop=longStopLoss) if(blackBar or redBar) strategy.cancel(longEntry) strategy.close(longEntry, longExit) if (redBar and not redBar[1] and isInTimeRange and isShortsAllowed) if(isUsingMoneyManagement) strategy.order(shortEntry, strategy.short, qtyToTrade, limit=shortStopLimit, stop=shortStopLimit) //strategy.order(shortEntry, strategy.short, qtyToTrade, stop=shortStopLimit) else strategy.order(shortEntry, strategy.short, limit=shortStopLimit, stop=shortStopLimit) //strategy.order(shortEntry, strategy.short, stop=shortStopLimit) strategy.exit("Short limit/stop", from_entry=shortEntry, limit=shortProfitTarget, stop=shortStopLoss) if(blackBar or greenBar) strategy.cancel(shortEntry) strategy.close(shortEntry, shortExit) //*********************************End execute trades, set rules, stop loss and profit targets*********************************