وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

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

img

جائزہ

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

حکمت عملی کا اصول

  1. شمعدانوں پر عملدرآمد کرنے کے لئے ہائکن آشی اشارے کا استعمال کریں، کچھ مارکیٹ شور کو فلٹر کریں اور رجحان کو زیادہ واضح بنائیں
  2. اے ٹی آر اور عوامل کی بنیاد پر سپر ٹرینڈ کے اوپری اور نچلے بینڈ کا حساب لگائیں
  3. جب قیمت اوپری ریل کو توڑتی ہے تو یہ ایک bearish سگنل ہوتا ہے۔ جب یہ نچلی ریل کو توڑتی ہے تو یہ ایک bullish سگنل ہوتا ہے۔
  4. فیکٹر جتنا بڑا ہوگا، سپر ٹرینڈ سگنل جتنا کم ہوں گے، ٹریکنگ کا اثر اتنا ہی بہتر ہوگا، لیکن اندراجات کی تعداد میں کمی آئے گی۔
  5. رجحانات کا جائزہ لینے اور ان کا سراغ لگانے کے لئے ہیکن آسی اور سپر ٹرینڈ اشارے کو یکجا کریں

حکمت عملی کے فوائد

  1. ہیکن Ashi اشارے مؤثر طریقے سے کچھ مارکیٹ شور کو فلٹر کرتا ہے اور گراف کو واضح بناتا ہے
  2. سپر رجحان اشارے اچھا اصلاح اثر ہے اور لچکدار داخلہ کی تعدد کو ایڈجسٹ کر سکتے ہیں
  3. ڈبل اشارے کا امتزاج قیمتوں کے رجحان کا اندازہ لگانے کے اثر کو بہتر بناتا ہے
  4. خود کار طریقے سے مضبوط رجحانات کو ٹریک کریں

اسٹریٹجی کے خطرات

  1. اشارے کا مجموعہ مارکیٹ کنسولنگ کے وقفے میں غلط سگنل سے مکمل طور پر بچ نہیں سکتا
  2. بڑے خلاؤں کی وجہ سے غلط اشارے ہوسکتے ہیں ، اس طرح اہم سگنل پوائنٹس غائب ہوجاتے ہیں
  3. سپر ٹرینڈ فیکٹر کو بہت بڑا کرنے سے ٹرینڈ کے مواقع ضائع ہوجائیں گے

حل: (1) مناسب طریقے سے تعاقب اثر اور انٹری کی تعدد کو متوازن کرنے کے لئے سپر رجحان پیرامیٹرز کو ایڈجسٹ
(2) فرق کی وجہ سے مسائل سے بچنے کے لئے فیصلے میں مدد کے لئے دیگر اشارے میں اضافہ کریں

حکمت عملی کی اصلاح کی سمت

  1. انٹری فریکوئنسی کو بہتر بنانے کے لئے اے ٹی آر سائیکل اور سپر ٹرینڈ فیکٹر کو ایڈجسٹ کریں
  2. واحد نقصان کو کنٹرول کرنے کے لئے سٹاپ نقصان اشارے میں اضافہ کریں
  3. رجحان کے جھٹکے کی رفتار کو غلط طریقے سے سنبھالنے سے بچنے کے لئے رجحان کی قسم کا تعین کرنے کے لئے دیگر اشارے کو یکجا کریں
  4. رجحان کی سمت کا فیصلہ کرنے میں مدد کے لئے مشین لرننگ الگورتھم میں اضافہ کریں

خلاصہ

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


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





مزید