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