Эта стратегия основана на концепции торговли с изменением импульса. Она использует RSI, Stoch и MACD для определения текущего направления тренда и устанавливает стоп-лосс и прибыль на основе ATR, чтобы реализовать автоматизированную торговую стратегию, которая может эффективно улавливать изменение тренда.
Стратегия использует RSI, Stoch и MACD в качестве трех индикаторов для определения текущего направления тренда.
Когда все три индикатора быстрые, цвет панели настроится на зеленый. Когда все медвежие, цвет панели настроится на красный. Если есть расхождение между индикаторами, цвет панели настроится на черный.
Правила торговли:
Стратегия также использует ATR ((7) для установки стоп-лосса и получения прибыли. Стоп-лосс устанавливается в 1,5 раза ATR, а прибыль - в 3 раза ATR.
Преимущества этой стратегии включают:
Использование нескольких индикаторов для определения тренда может эффективно отфильтровать ложные прорывы.
ATR может эффективно отслеживать волатильность рынка. Используя кратные ATR, остановки и цели могут динамически корректироваться на основе рыночных условий.
Простая и понятная логика, легко понятная и автоматизированная.
Риски этой стратегии включают:
Ошибки в отдельных показателях могут повлиять на время входа. Можно рассмотреть возможность корректировки параметров или добавления дополнительных показателей подтверждения для уменьшения ошибок.
Размер ATR значительно влияет на остановки и цели. Неправильный расчет ATR может привести к тому, что остановки будут слишком широкими или цели слишком тесными.
Отсутствие определения тренда. Сосредоточенный на обратной торговле, недостаточный анализ тренда может привести к сбоям на рыночных рынках. Может добавить индикаторы тренда.
Требуется тщательное обратное тестирование для проверки надежности параметров и правил.
Возможные улучшения этой стратегии:
Корректировка или добавление индикаторов для повышения точности определения точек перелома. Например, добавление полос Боллинджера для проверки уровня перекупа/перепродажи.
Оптимизация расчета ATR для лучшего отслеживания волатильности.
Добавление индикаторов тренда, чтобы избежать сбоев во время колебаний рынков.
Оптимизация управления денежными средствами, например, корректировка размеров позиций на основе привлечения средств.
Периодическая оптимизация для проверки надежности на протяжении всех временных рамок.
Больше обратных тестов на различные продукты и временные периоды для проверки надежности.
Эта стратегия разработана на основе концепций отмены импульса, используя комбинацию RSI, Stoch и MACD для выявления отмен, с динамическими остановками и целями ATR. Она формирует относительно полную систему отмены тренда. Преимущества включают в себя четкую логику и разумные остановки / цели. Недостатки включают в себя ошибки сигналов и отсутствие фильтров тренда. Улучшения могут быть внесены путем оптимизации индикаторов, добавления тенденций и корректировки размеров позиций. Это может сделать стратегию более надежной.
/*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*********************************