हेइकेन आशी और सुपर ट्रेंड संयोजन रणनीति


निर्माण तिथि: 2023-12-15 11:11:27 अंत में संशोधित करें: 2023-12-15 11:11:27
कॉपी: 0 क्लिक्स: 1310
1
ध्यान केंद्रित करना
1621
समर्थक

हेइकेन आशी और सुपर ट्रेंड संयोजन रणनीति

अवलोकन

यह एक मात्रात्मक ट्रेडिंग रणनीति है जो Heiken Ashi और सुपरट्रेंड (सुपर ट्रेंड) दोनों संकेतकों को जोड़ती है। यह रणनीति मुख्य रूप से Heiken Ashi की चिकनी K लाइन का उपयोग करती है जो बाजार के शोर को फ़िल्टर करती है, सुपरट्रेंड सूचक मूल्य प्रवृत्ति की दिशा को निर्धारित करता है, और प्रवृत्ति को ट्रैक करता है।

रणनीति सिद्धांत

  1. Heiken Ashi इंडिकेटर का उपयोग K लाइन को संसाधित करने के लिए किया जाता है, कुछ बाजार के शोर को फ़िल्टर करने के लिए और रुझान को अधिक स्पष्ट बनाने के लिए
  2. एटीआर और फैक्टरिंग पर आधारित सुपरट्रेंड के अपट्रेल और डाउनट्रेल
  3. जब कीमत ऊपर की पटरी से गुजरती है तो यह एक गिरावट का संकेत है, जब यह नीचे की पटरी से गुजरती है तो यह एक संकेत है
  4. अधिक कारक, कम सुपरट्रेंड सिग्नल, बेहतर ट्रैकिंग, लेकिन कम प्रविष्टि
  5. Heiken Ashi और Super Trend Indicator के संयोजन से ट्रेंड को ट्रैक करने और ट्रैक करने के लिए

रणनीतिक लाभ

  1. Heiken Ashi सूचकांक ने कुछ बाजार के शोर को प्रभावी ढंग से फ़िल्टर किया, जिससे ग्राफ़ स्पष्ट हो गया
  2. सुपर रुझान सूचक पैरामीटर अनुकूलन अच्छा है, प्रवेश की आवृत्ति को लचीले ढंग से समायोजित किया जा सकता है
  3. कीमतों के रुझान को बेहतर ढंग से निर्धारित करने के लिए द्विआधारी सूचकांक का संयोजन
  4. मजबूत रुझानों के लिए स्वचालित ट्रैकिंग

रणनीतिक जोखिम

  1. सूचकांक पोर्टफोलियो पूरी तरह से ट्रेडों के समापन खंड में गलत संकेतों से बचने में सक्षम नहीं है
  2. बड़े पैमाने पर उछल-पुछल के कारण सूचक विफल हो सकता है और महत्वपूर्ण संकेत बिंदुओं को याद किया जा सकता है
  3. सुपर-ट्रेंडिंग फैक्टरों ने महाधिवेशन की स्थापना की, ट्रेंडिंग अवसरों को याद किया

समाधान: (1) सुपरट्रेंड पैरामीटर को उचित रूप से समायोजित करना, ट्रैकिंग प्रभाव और प्रवेश की आवृत्ति को संतुलित करना (2) अन्य मापदंडों को जोड़ना निर्णय सहायता के लिए, उड़ान भरने से बचने के लिए

रणनीति अनुकूलन दिशा

  1. एटीआर चक्र और सुपरट्रेंड कारक को समायोजित करें, प्रवेश की आवृत्ति का अनुकूलन करें
  2. स्टॉप लॉस को बढ़ाएं और एकल नुकसान को नियंत्रित करें
  3. अन्य संकेतकों के साथ संयोजन में प्रवृत्ति के प्रकार को समझने के लिए, प्रवृत्ति के उतार-चढ़ाव की अनुचित गति से बचें
  4. मशीन लर्निंग एल्गोरिदम जोड़े गए हैं जो दिशा निर्धारित करने में मदद करते हैं

संक्षेप

रणनीति Heiken Ashi और सुपर रुझान दोहरे सूचक के लाभ को एकीकृत करता है, मूल्य प्रवृत्ति की दिशा का निर्धारण करने के लिए सूचक का उपयोग करता है, स्वचालित रूप से ट्रैकिंग की अनुमति देता है। एक सूचक का उपयोग करने की तुलना में, मूल्य आंदोलन का निर्धारण करने का प्रभाव बेहतर है, रणनीति की स्थिरता को बढ़ाता है। बेशक, सुधार के लिए कुछ जगह है, भविष्य में प्रवेश की आवृत्ति, स्टॉप लॉस के मामले में अनुकूलन किया जा सकता है, जिससे रणनीति अधिक लाभदायक हो, जोखिम कम हो।

रणनीति स्रोत कोड
/*backtest
start: 2022-12-08 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © RingsCherrY

//@version=5

strategy("Heiken Ashi & Super Trend", 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/////////////////////
///////////////////////////////////////////////////

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[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          =                   true

// 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)