Strategi ini berdasarkan kepada falsafah perdagangan yang bertukar dengan momentum, menilai trend semasa melalui tiga petunjuk RSI, Stoch dan MACD, digabungkan dengan ATR untuk menetapkan stop loss stop loss, untuk mencapai strategi perdagangan automatik yang menangkap perubahan trend dengan cekap.
Strategi ini menggunakan tiga penunjuk RSI, Stoch dan MACD untuk menilai arah trend semasa. Logiknya ialah:
Apabila tiga penunjuk naik pada masa yang sama, Bar ditetapkan menjadi hijau; apabila tiga penunjuk turun pada masa yang sama, Bar ditetapkan menjadi merah; jika isyarat penunjuk berselisih, Bar ditetapkan menjadi hitam.
Peraturan perdagangan adalah seperti berikut:
Strategi ini juga menggunakan ATR ((Garis purata 7 hari) untuk menetapkan kedudukan stop loss. Stop loss adalah 1.5 kali ATR dan stop loss adalah 3 kali ATR.
Strategi ini mempunyai kelebihan berikut:
Menggunakan pelbagai indikator untuk menentukan trend, anda boleh menyaring dengan berkesan untuk memecahkan palsu. Apabila tiga indikator RSI, Stoch dan MACD sama-sama menaik atau turun, kemungkinan besar adalah titik perubahan trend.
ATR boleh mengesan tahap turun naik pasaran dengan berkesan, menggunakan banyak kali ganda ATR untuk menetapkan hentian hentian, dan dapat menyesuaikan hentian hentian mengikut keadaan pasaran yang dinamik, untuk mengelakkan hentian terlalu longgar atau terlalu ketat.
Logik dagangan mudah difahami, mudah diimplementasikan, dan sesuai untuk digunakan sebagai strategi perdagangan automatik.
Strategi ini juga mempunyai risiko:
Keputusan gabungan pelbagai petunjuk mungkin terdapat keadaan di mana indikator individu menghantar isyarat yang salah, yang akan mempengaruhi masa masuk. Anda boleh mempertimbangkan untuk menyesuaikan parameter indikator atau menambah indikator lain untuk mengesahkan, mengurangkan kadar isyarat yang salah.
Saiz ATR mempunyai kesan yang besar terhadap stop loss. Jika ATR tidak dikira dengan tepat, ia mungkin menyebabkan stop loss terlalu besar atau stop loss terlalu kecil. Anda boleh mempertimbangkan untuk memasukkan petunjuk lain untuk membantu mengesahkan saiz ATR.
Kurangnya penghakiman trend. Strategi ini memfokuskan perdagangan terbalik, kurang penghakiman trend, mudah terkurung dalam keadaan gegaran. Penghakiman tambahan boleh ditambah dengan indikator trend.
Terdapat risiko kecocokan berlebihan. Pengujian semula yang mencukupi harus dilakukan untuk mengesahkan parameter dan kebolehpercayaan peraturan.
Strategi ini boleh dioptimumkan dengan:
Menyesuaikan atau menambah petunjuk untuk meningkatkan ketepatan penghakiman masa trend. Sebagai contoh, menambah garis Brin untuk menilai keadaan overbought dan oversold.
Mengoptimumkan kaedah pengiraan ATR, menjadikannya lebih baik untuk mengesan turun naik pasaran.
Menambah indikator untuk menilai trend, untuk mengelakkan terjebak dalam keadaan yang bergolak. Sebagai contoh, menambah purata bergerak untuk menilai arah trend.
Pengurusan dana yang optimum, contohnya, menyesuaikan kedudukan mengikut penarikan balik
Mengoptimumkan kitaran untuk mengesahkan kestabilan parameter kitaran masa yang berbeza.
Ujian semula lebih banyak varieti dan tempoh masa untuk memeriksa kebolehpercayaan strategi yang stabil.
Strategi ini berdasarkan reka bentuk pemikiran pembalikan momentum, menggunakan RSI, Stoch dan MACD untuk menentukan masa pembalikan trend, dengan set stop loss stop stop ATR yang dinamik, membentuk satu set strategi perdagangan pembalikan trend yang lebih lengkap. Strategi ini mempunyai kelebihan seperti kejernihan logik perdagangan, set stop loss stop stop yang munasabah, tetapi juga terdapat isyarat indikator yang salah, kekurangan penghakiman trend.
/*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*********************************