
ہائین اشو اور سپر ٹرینڈ حکمت عملی ایک رجحان سے باخبر رہنے کی حکمت عملی ہے جس میں ہائین اشو کے چارٹ اور سپر ٹرینڈ اشارے کو ملایا گیا ہے۔ اس حکمت عملی کا مقصد رجحان کی سمت کی نشاندہی کرنا ، رجحان والے علاقوں میں تجارت کرنا ، اور رجحان کی تبدیلی کے وقت تیزی سے باہر نکلنا ہے تاکہ غیر رجحان والے تجارت سے ہونے والے نقصان کو کم سے کم کیا جاسکے۔
ہائن اشوین گراف ایک خاص قسم کا K لائن گراف ہے جو کھلنے کی قیمت، بند ہونے کی قیمت، بلند ترین قیمت اور کم سے کم قیمت کی اوسط اقدار کا استعمال کر کے ٹرینڈ انٹیک کو ڈرائنگ کرتا ہے، جس سے مارکیٹ کے شور کو فلٹر کیا جا سکتا ہے اور گراف کو واضح کیا جا سکتا ہے۔ سپر ٹرینڈ اشارے دو منحنی خطوط پر مشتمل ہوتا ہے، جس میں متحرک سپورٹ اور مزاحمت کی لائنوں کے ذریعے رجحان کی سمت کا فیصلہ کیا جاتا ہے۔
یہ حکمت عملی سب سے پہلے ہین ایچ ٹی او کے چارٹ کا حساب لگاتی ہے ، پھر ہین ایچ ٹی او کے لائن پر مبنی سپر ٹرینڈ اشارے کا حساب لگاتی ہے۔ جب قیمت سپر ٹرینڈ اشارے کو توڑتی ہے تو ، اس سے ایک تجارتی سگنل پیدا ہوتا ہے۔ خاص طور پر ، یہ حکمت عملی ہین ایچ ٹی او کے لائن کا استعمال کرتے ہوئے حقیقی طول و عرض کا حساب لگاتی ہے ، پھر طول و عرض اور اوسط قیمت کو مل کر سپر ٹرینڈ کا اوپری اور نیچے کا راستہ ملتا ہے۔ جب قیمت نیچے سے ٹوٹ جاتی ہے تو ایک کثیر سگنل پیدا ہوتا ہے ، جب اوپری سے ٹوٹ جاتا ہے تو ایک خالی سگنل پیدا ہوتا ہے۔
اس حکمت عملی میں سپر ٹرینڈ اشارے کے لئے پیرامیٹرز کی اصلاح بھی کی گئی ہے ، جس میں پیرامیٹرز کا بہترین مجموعہ استعمال کیا گیا ہے ، جس سے اشارے کی حساسیت میں اضافہ ہوتا ہے۔ اس کے علاوہ ، اس حکمت عملی میں نقصان کی روک تھام کا طریقہ کار شامل کیا گیا ہے ، جو منافع کو یقینی بنانے کے ساتھ ساتھ خطرے کو کنٹرول کرسکتا ہے۔
ہائین ایتھو اور سپر ٹرینڈ حکمت عملی ایک رجحان سے باخبر رہنے کی حکمت عملی ہے۔ یہ رجحان کی سمت کی نشاندہی کرنے ، بڑے رجحان کے تحت تجارت کرنے ، اور الٹ جانے پر تیزی سے رکنے کی صلاحیت رکھتی ہے۔ حکمت عملی ہائین ایتھو کے گراف کے شور فلٹرنگ اور سپر ٹرینڈ اشارے کی تیزی سے رجحان میں تبدیلی کی گرفت کرنے کی صلاحیت کو مربوط کرتی ہے۔ پیرامیٹرز کو بہتر بنانے اور نقصان کو روکنے کے طریقہ کار کے ڈیزائن کے ذریعہ ، منافع کو بڑھانے کے ساتھ ساتھ خطرے کو کنٹرول کرنے کے قابل ہے۔ مستقبل میں اس حکمت عملی کو بہتر بنانے کے ل the ، پیرامیٹرز کو مزید بہتر بنانے ، تصدیق کے اشارے میں اضافہ کرنے ، اور پیمائش کے اعداد و شمار کو بڑھانے جیسے طریقوں کو بہتر بنانے کے لئے ، نظام کی استحکام اور وشوسنییتا کو بہتر بنایا جاسکتا ہے۔
/*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)