
हाइने-एज और सुपरट्रेंड रणनीति एक प्रवृत्ति ट्रैकिंग रणनीति है जो हाइने-एज चार्ट और सुपरट्रेंड संकेतक को जोड़ती है। इस रणनीति का उद्देश्य प्रवृत्ति की दिशा की पहचान करना है, प्रवृत्ति क्षेत्रों में व्यापार करना है, और जब प्रवृत्ति उलट जाती है, तो जल्दी से बाहर निकल जाना है, जिससे गैर-प्रवृत्ति व्यापार से होने वाले नुकसान को कम किया जा सके।
हाइना एट्यूरियन चार्ट एक विशेष प्रकार का K-लाइन चार्ट है, जो स्टॉक की कीमतों के उद्घाटन, समापन, उच्चतम और निम्नतम के औसत मानों का उपयोग करके स्टॉक की इकाई को चित्रित करता है, जिससे बाजार के शोर को फ़िल्टर करने में मदद मिलती है, जिससे चार्ट को स्पष्ट किया जा सकता है। सुपरट्रेंड इंडिकेटर दो वक्रों से बना है, जो गतिशील समर्थन और प्रतिरोध रेखाओं के माध्यम से प्रवृत्ति की दिशा का न्याय करता है।
यह रणनीति सबसे पहले हाइने एट्रिब्यूशन चार्ट की गणना करती है और फिर हाइने एट्रिब्यूशन K लाइन के आधार पर सुपरट्रेंड इंडिकेटर की गणना करती है। जब कीमत सुपरट्रेंड इंडिकेटर को तोड़ती है, तो एक ट्रेडिंग सिग्नल उत्पन्न होती है। विशेष रूप से, यह रणनीति हाइने एट्रिब्यूशन K लाइन का उपयोग करके वास्तविक तरंगों की गणना करती है, और फिर तरंगों और औसत कीमतों के संयोजन के साथ सुपरट्रेंड के ऊपर और नीचे की रेखाएं प्राप्त होती हैं। जब कीमत नीचे की रेखा से टकराव से उत्पन्न होती है तो एक मल्टी सिग्नल उत्पन्न होती है और जब ऊपरी रेखा से टकराव होता है तो एक रिक्त सिग्नल उत्पन्न होती है।
रणनीति ने सुपरट्रेंड संकेतक के लिए पैरामीटर अनुकूलन भी किया है, जो संकेतक की संवेदनशीलता को बढ़ाने के लिए सर्वोत्तम पैरामीटर संयोजन का उपयोग करता है। इसके अलावा, रणनीति में एक स्टॉप-लॉस तंत्र शामिल किया गया है, जो लाभ की गारंटी देते हुए जोखिम को नियंत्रित करने में सक्षम है।
हाइनेथियोस और सुपरट्रेंड रणनीति एक प्रवृत्ति ट्रैकिंग रणनीति है। यह प्रवृत्ति दिशा की पहचान करने, बड़े रुझान के तहत व्यापार करने, और पलटने पर तेजी से बंद करने में सक्षम है। रणनीति हाइनेथियोस पट्टिका के शोर फिल्टर और सुपरट्रेंड संकेतक की तेजी से प्रवृत्ति परिवर्तन को पकड़ने की क्षमता को एकीकृत करती है। पैरामीटर अनुकूलन और स्टॉप लॉस तंत्र की डिजाइन के माध्यम से, रिटर्न को बढ़ाने के साथ-साथ जोखिम को नियंत्रित करने में सक्षम है। भविष्य में, पैरामीटर को और अधिक अनुकूलित करके, पुष्टिकरण संकेतक को जोड़कर, रीमेक डेटा का विस्तार करके और अन्य तरीकों से रणनीति को अनुकूलित किया जा सकता है, जिससे सिस्टम की स्थिरता और विश्वसनीयता में सुधार हो सकता है।
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Heiken Ashi & Super Trend_ARM", overlay=true, pyramiding=1,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.02)
///////////////////////////////////////////////////
////////////////////Function///////////////////////
///////////////////////////////////////////////////
heikinashi_open = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_high = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, high)
heikinashi_low = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_close= request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_color = heikinashi_open < heikinashi_close ? #53b987 : #eb4d5c
// plotbar(heikinashi_open, heikinashi_high, heikinashi_low, heikinashi_close, color=heikinashi_color)
x_sma(x, y) =>
sumx = 0.0
for i = 0 to y - 1
sumx := sumx + x[i] / y
sumx
x_rma(src, length) =>
alpha = 1/length
sum = 0.0
sum := na(sum[1]) ? x_sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])
x_atr(length) =>
trueRange = na(heikinashi_high[1])? heikinashi_high-heikinashi_low : math.max(math.max(heikinashi_high - heikinashi_low, math.abs(heikinashi_high - heikinashi_close[1])), math.abs(heikinashi_low - heikinashi_close[1]))
//true range can be also calculated with ta.tr(true)
x_rma(trueRange, length)
x_supertrend(factor, atrPeriod) =>
src = (heikinashi_high+heikinashi_low)/2
atr = x_atr(atrPeriod)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or heikinashi_close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or heikinashi_close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if na(atr[1])
direction := 1
else if prevSuperTrend == prevUpperBand
direction := heikinashi_close > upperBand ? -1 : 1
else
direction := heikinashi_close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
[superTrend, direction]
///////////////////////////////////////////////////
////////////////////Indicators/////////////////////
///////////////////////////////////////////////////
factor = input.float(3.0, "Factor", step = 0.01)
atrPeriod = input(10, "ATR Length")
[supertrend, direction] = x_supertrend(factor, atrPeriod)
bodyMiddle = plot((heikinashi_open + heikinashi_close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
///////////////////////////////////////////////////
////////////////////Strategy///////////////////////
///////////////////////////////////////////////////
var bool longCond = na, var bool shortCond = na, longCond := nz(longCond[1]), shortCond := nz(shortCond[1])
var int CondIni_long = 0, var int CondIni_short = 0, CondIni_long := nz(CondIni_long[1]), CondIni_short := nz(CondIni_short[1])
var float open_longCondition = na, var float open_shortCondition = na
long = ta.change(direction) < 0
short = ta.change(direction) > 0
longCond := long
shortCond := short
CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_long[1])
CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_short[1])
longCondition = (longCond[1] and nz(CondIni_long[1]) == -1)
shortCondition = (shortCond[1] and nz(CondIni_short[1]) == 1)
open_longCondition := long ? close[1] : nz(open_longCondition[1])
open_shortCondition := short ? close[1] : nz(open_shortCondition[1])
//TP
tp = input.float(1.1 , "TP [%]", step = 0.1)
//BACKTESTING inputs --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
testStartYear = input.int(2000, title="start year", minval = 1997, maxval = 3000, group= "BACKTEST")
testStartMonth = input.int(01, title="start month", minval = 1, maxval = 12, group= "BACKTEST")
testStartDay = input.int(01, title="start day", minval = 1, maxval = 31, group= "BACKTEST")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input.int(3333, title="stop year", minval=1980, maxval = 3333, group= "BACKTEST")
testStopMonth = input.int(12, title="stop month", minval=1, maxval=12, group= "BACKTEST")
testStopDay = input.int(31, title="stop day", minval=1, maxval=31, group= "BACKTEST")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false
// Backtest ==================================================================================================================================================================================================================================================================================================================================
if longCond
strategy.entry("L", strategy.long, when=testPeriod)
if shortCond
strategy.entry("S", strategy.short, when=testPeriod)
strategy.exit("TP_L", "L", profit =((open_longCondition * (1+(tp/100))) - open_longCondition)/syminfo.mintick)
strategy.exit("TP_S", "S", profit =((open_shortCondition * (1+(tp/100))) - open_shortCondition)/syminfo.mintick)