ہیکن آشی اور سپر ٹرینڈ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-02 16:15:18
ٹیگز:

img

جائزہ

ہیکن آشی اور سپر ٹرینڈ حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو ہیکن آشی موم بتیوں اور سپر ٹرینڈ اشارے کو جوڑتی ہے۔ اس کا مقصد رجحان کی سمت کی نشاندہی کرنا ، رجحان کے ساتھ تجارت کرنا ، اور رجحان کے الٹ جانے پر تیزی سے باہر نکلنا ہے ، تاکہ غیر رجحان کی تجارت سے ہونے والے نقصانات کو کم سے کم کیا جاسکے۔

حکمت عملی منطق

ہائکن آشی موم بتیاں ایک خاص قسم کی موم بتیاں ہیں جو موم بتیوں کے جسموں کو پلاٹ کرنے کے لئے کھلی ، بند ، اعلی اور کم قیمتوں کا اوسط استعمال کرتی ہیں ، مارکیٹ کے شور کو فلٹر کرتی ہیں اور پیٹرن کو واضح بناتی ہیں۔ سپر ٹرینڈ اشارے میں دو لائنیں ہوتی ہیں جو رجحان کی سمت کا تعین کرنے کے لئے متحرک معاونت اور مزاحمت تشکیل دیتی ہیں۔

حکمت عملی پہلے ہیکن آشی موم بتیوں کا حساب لگاتی ہے ، پھر ہیکن آشی موم بتیوں کی بنیاد پر سپر ٹرینڈ اشارے کا حساب لگاتی ہے۔ جب قیمت سپر ٹرینڈ لائنوں کو توڑتی ہے تو تجارتی سگنل تیار کیے جاتے ہیں۔ خاص طور پر ، حکمت عملی حقیقی رینج کا حساب لگانے کے لئے ہیکن آشی موم بتیوں کا استعمال کرتی ہے ، پھر رینج اور اوسط قیمت کا استعمال کرتے ہوئے سپر ٹرینڈ کے اوپری اور نچلے بینڈ اخذ کرتی ہے۔ جب قیمت نچلے بینڈ سے اوپر ٹوٹ جاتی ہے تو لمبے سگنل تیار کیے جاتے ہیں ، اور جب قیمت اوپری بینڈ سے نیچے ٹوٹ جاتی ہے تو مختصر سگنل تیار کیے جاتے ہیں۔

سپر ٹرینڈ پیرامیٹرز کو بھی بہترین نتائج کے ل optim بہتر بنایا گیا ہے ، جس سے اشارے کی حساسیت میں بہتری آتی ہے۔ اس کے علاوہ ، منافع کو مقفل کرتے ہوئے خطرات پر قابو پانے کے لئے اسٹاپ نقصان کا طریقہ کار نافذ کیا گیا ہے۔

فوائد کا تجزیہ

  • ہائکن آشی موم بتیاں واضح سگنل کے لیے شور کو فلٹر کرتی ہیں۔
  • سپر رجحان تیزی سے رجحان کی تبدیلیوں کو پکڑتا ہے اور بروقت سگنل پیدا کرتا ہے۔
  • پیرامیٹر کی اصلاح سے اشارے کی وشوسنییتا میں اضافہ ہوتا ہے۔
  • سٹاپ نقصان کا داخلی طریقہ کار مؤثر طریقے سے خطرات کو کنٹرول کرتا ہے۔
  • رجحان کی پیروی اور خود کار طریقے سے ٹریڈنگ کو یکجا کرکے آٹومیشن کی اعلی ڈگری.

خطرے کا تجزیہ

  • اعلی آٹومیشن کو غیر معمولی واقعات سے بچنے کے لئے قریب سے نگرانی کی ضرورت ہوتی ہے۔
  • ہیکن Ashi شور فلٹرنگ جب بہت چھوٹے الٹ سگنل یاد کر سکتے ہیں.
  • سپر ٹرینڈ غلط سگنل پیدا کرسکتا ہے، جس سے قبل از وقت اندراج یا سٹاپ نقصان ہوسکتا ہے۔
  • غلط سٹاپ نقصان کی جگہ بھی غیر ضروری نقصانات کا باعث بن سکتی ہے۔
  • بیک ٹسٹنگ کے ناکافی اعداد و شمار سے اوور فٹنگ کا سبب بن سکتا ہے۔ براہ راست نتائج بیک ٹسٹ سے نمایاں طور پر انحراف کرسکتے ہیں۔

اصلاح کی ہدایات

  • سپر رجحان کو مزید بہتر بنانے کے لئے مزید پیرامیٹر مجموعے کی جانچ کریں.
  • سپر ٹرینڈ سگنل کی تصدیق اور جھوٹے سگنل کو کم کرنے کے لئے دیگر اشارے شامل کریں.
  • منافع کو مقفل کرتے ہوئے غیر ضروری اسٹاپ کو کم سے کم کرنے کے لئے اسٹاپ نقصان کی حکمت عملی کو بہتر بنائیں۔
  • بڑے اعداد و شمار کا استعمال کرتے ہوئے حقیقی رجحانات کا فیصلہ کرنے کے لئے مشین لرننگ الگورتھم کو شامل کریں.
  • قابل اعتماد کو بہتر بنانے کے لئے بیک ٹسٹنگ کے لئے طویل وقت کے فریم اور زیادہ متنوع تاریخی اعداد و شمار کا استعمال کریں۔

خلاصہ

ہیکن آشی اور سپر ٹرینڈ حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ رجحان کی سمت کی نشاندہی کرتی ہے اور بڑے رجحان کے ساتھ تجارت کرتی ہے ، جبکہ تیزی سے الٹ جانے پر روکتی ہے۔ حکمت عملی میں ہیکن آشی کی شور فلٹرنگ اور سپر ٹرینڈ کی تیزی سے رجحان کی تبدیلی کا پتہ لگانے کو مربوط کیا گیا ہے۔ پیرامیٹر کی اصلاح اور اسٹاپ نقصان کا ڈیزائن خطرات کو کنٹرول کرتے ہوئے منافع کو زیادہ سے زیادہ کرنے کی اجازت دیتا ہے۔ مستقبل میں اصلاحات میں مزید پیرامیٹر ٹوننگ ، اضافی سگنل کی تصدیق ، توسیع شدہ بیک ٹیسٹنگ ڈیٹا وغیرہ شامل ہوسکتے ہیں تاکہ حکمت عملی کے استحکام اور وشوسنییتا کو بڑھا سکے۔


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





مزید