Esta estratégia baseia-se no conceito de negociação de inversão de momentum, julgando a tendência atual através de três indicadores RSI, Stoch e MACD, em combinação com a configuração de ATR para parar o stop loss, para obter uma estratégia de negociação automática de captura de tendência de inversão de tendência com eficiência.
A estratégia usa três indicadores: RSI, Stoch e MACD para determinar a direção da tendência atual. A lógica é:
Quando três indicadores são simultaneamente em alta, o Bar é definido em verde; quando três indicadores são simultaneamente em baixa, o Bar é definido em vermelho; se houver divergência entre os sinais do indicador, ele é definido em preto.
As regras de negociação são as seguintes:
A estratégia também usa o ATR (a linha média de 7 dias) para definir o ponto de parada de perda. O ponto de parada é 1,5 vezes o ATR e o ponto de parada é 3 vezes o ATR.
A estratégia tem as seguintes vantagens:
Usando vários indicadores para determinar a tendência, pode-se filtrar eficazmente as brechas falsas. Quando os três indicadores RSI, Stoch e MACD são simultaneamente otimistas ou pessimistas, a probabilidade aproximada é o ponto de reversão da tendência.
O ATR é capaz de acompanhar a volatilidade do mercado, usando múltiplos parâmetros de parada de perda do ATR, que pode ser ajustado de acordo com a dinâmica da situação do mercado, para evitar que a parada seja muito relaxada ou muito apertada.
A lógica de negociação é simples, clara e fácil de entender, e é adequada para ser usada como uma estratégia de negociação automática.
A estratégia também apresenta os seguintes riscos:
A combinação de múltiplos indicadores pode determinar se há sinais errados em indicadores individuais, o que afeta o tempo de entrada. Pode-se considerar ajustar os parâmetros do indicador ou adicionar outros indicadores para verificação, reduzindo a taxa de sinais errados.
O tamanho do ATR tem um grande impacto no stop loss. Se o ATR não for calculado com precisão, pode resultar em um stop loss muito grande ou um stop loss muito pequeno. Pode-se considerar a inclusão de outros indicadores para auxiliar na confirmação do tamanho do ATR.
Falta de julgamento de tendências. Esta estratégia se concentra em negociações reversíveis, com fraco julgamento de tendências, que são facilmente presas em situações de turbulência. Pode ser adicionado um julgamento auxiliar de indicadores de tendências.
Existe um risco de sobre-conformidade. Deve ser feito um retorno suficiente para verificar a confiabilidade dos parâmetros e regras.
Esta estratégia pode ser melhorada em:
Ajustar ou aumentar os indicadores para melhorar a precisão de julgamento do momento da reversão da tendência. Por exemplo, adicionar a linha de Brin para julgar o estado de sobrecompra e sobrevenda.
Otimizar a forma de calcular o ATR para melhor acompanhar as flutuações do mercado. Por exemplo, usar o ATR em relação ao preço.
Aumentar os indicadores de tendência para evitar ser preso em situações de turbulência. Por exemplo, adicionar uma média móvel para determinar a direção da tendência.
Optimizar a gestão de fundos, por exemplo, ajustando as posições de acordo com as retiradas.
Otimização de ciclo para verificar a estabilidade de diferentes parâmetros de ciclo de tempo.
O teste foi realizado em mais variedades e períodos de tempo para verificar a estabilidade e a fiabilidade da estratégia.
Esta estratégia baseia-se no design de pensamento de reversão de dinâmica, usando a combinação de RSI, Stoch e MACD para determinar o momento da reversão da tendência, em conjunto com a configuração dinâmica de stop loss stop, formando um conjunto mais completo de estratégias de negociação de reversão de tendência. A estratégia possui vantagens como a clareza da lógica de negociação e a configuração razoável de stop loss stop, mas também possui sinais de erro de indicador, falta de julgamento de tendência e outras deficiências.
/*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*********************************