ہموار ہائکن آشی رجحان حکمت عملی کے بعد

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

img

جائزہ

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

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

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

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

فوائد

  1. اپنی مرضی کے مطابق اشارے اچھے بیک ٹسٹ کے نتائج کے ساتھ رجحانات کی نشاندہی کرتا ہے
  2. رجحان کے بعد نقطہ نظر کو مقداری نظریات کے ساتھ سیدھا کرتا ہے
  3. سٹاپ نقصان کا نفاذ خطرے کے انتظام کو فروغ دیتا ہے

خطرات

  1. ناقص لائیو کارکردگی کے نتیجے میں repainting کے لئے ممکنہ
  2. ایک ہی اشارے پر انحصار کرنے سے خراب سگنل کا خطرہ ہوتا ہے
  3. سٹاپ نقصان کی ترتیب مزید اصلاح کی ضرورت ہے

بہتر مواقع

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

نتیجہ

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


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 10m
basePeriod: 1m
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/

// © TraderHalai
// This is a backtest of the Smoothed Heikin Ashi Trend indicator, which computes the reverse candle close price required to flip a heikin ashi trend from red to green and vice versa. Original indicator can be found on the scripts section of my profile.

// Default testing parameters are 10% of equity position size, with a 1% stop loss on short and long strategy.opentrades.commission

// This particular back test uses this indicator as a Trend trading tool with a tight stop loss. The equity curve as tested seems promising but requires further work to refine. Note in an actual trading setup, you may wish to use this with volatilty filters as most of the losses are in sideways, low volatility markets.


//@version=5
strategy("Smoothed Heikin Ashi Trend on Chart - TraderHalai BACKTEST", " SHA Trend - BACKTEST", overlay=true)
//Inputs

i_useSmooth =       input ( true, "Use smoothing Heikin Ashi")
i_smoothingMethod = input.string("SMA", "Method", options=["SMA", "EMA", "HMA", "VWMA", "RMA"])
i_smoothingPeriod = input ( 10, "Smoothing period")

i_infoBox   =       input ( true, "Show Info Box"        )
i_decimalP  =       input ( 2,    "Prices Decimal Places") 
i_boxOffSet =       input ( 5,    "Info Box Offset"      )
i_repaint   =       input (false,  "Repaint -  Keep on for live / Off for backtest")

i_longLossPerc = input.float(title="Long Stop Loss (%)",minval=0.0, step=0.1, defval=1) * 0.01

i_shortLossPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=1) * 0.01


timeperiod = timeframe.period

//Security functions to avoid repaint, as per PineCoders
f_secureSecurity(_symbol, _res, _src) => request.security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
f_security(_symbol, _res, _src, _repaint) => request.security(_symbol, _res, _src[_repaint ? 0 : barstate.isrealtime ? 1 : 0])[_repaint ? 0 : barstate.isrealtime ? 0 : 1]
f_secSecurity2(_symbol, _res, _src) => request.security(_symbol, _res, _src[1])


candleClose = f_security(syminfo.tickerid, timeperiod, close, i_repaint)
candleOpen = f_security(syminfo.tickerid, timeperiod, open, i_repaint)
candleLow = f_security(syminfo.tickerid, timeperiod, low, i_repaint)
candleHigh = f_security(syminfo.tickerid, timeperiod, high, i_repaint)

haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = f_security(haTicker, timeperiod, close, i_repaint)
haOpen = f_security(haTicker, timeperiod, open, i_repaint)
haLow = f_security(haTicker, timeperiod, low, i_repaint)
haHigh= f_security(haTicker, timeperiod, high, i_repaint)


reverseClose = (2 * (haOpen[1] + haClose[1])) - candleHigh - candleLow - candleOpen

if(reverseClose < candleLow)
    reverseClose := (candleLow + reverseClose) / 2

if(reverseClose > candleHigh)
    reverseClose := (candleHigh + reverseClose) / 2
    
//Smoothing
    
smaSmoothed = ta.sma(reverseClose, i_smoothingPeriod)
emaSmoothed = ta.ema(reverseClose, i_smoothingPeriod)
hmaSmoothed = ta.hma(reverseClose, i_smoothingPeriod)
vwmaSmoothed = ta.vwma(reverseClose, i_smoothingPeriod)
rmaSmoothed = ta.rma(reverseClose, i_smoothingPeriod)

shouldApplySmoothing = i_useSmooth and i_smoothingPeriod > 1 

smoothedReverseClose = reverseClose

if(shouldApplySmoothing)
    if(i_smoothingMethod == "SMA")
        smoothedReverseClose := smaSmoothed
    else if(i_smoothingMethod == "EMA")
        smoothedReverseClose := emaSmoothed
    else if(i_smoothingMethod == "HMA")
        smoothedReverseClose := hmaSmoothed
    else if(i_smoothingMethod == "VWMA")
        smoothedReverseClose := vwmaSmoothed
    else if(i_smoothingMethod == "RMA")
        smoothedReverseClose := rmaSmoothed
    else 
        smoothedReverseClose := reverseClose // Default to non-smoothed for invalid smoothing type
    
haBull = candleClose >= smoothedReverseClose
haCol = haBull ? color.green : color.red


//Overall trading strategy
if(ta.crossover(candleClose, smoothedReverseClose))
    strategy.entry("LONG", strategy.long, stop=smoothedReverseClose)
else
    strategy.cancel("LONG")

if(ta.crossunder(candleClose, smoothedReverseClose))
    strategy.entry("SHORT", strategy.short, stop=smoothedReverseClose)
else
    strategy.cancel("SHORT")
    

longStopPrice  = strategy.position_avg_price * (1 - i_longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + i_shortLossPerc)



plot(series=(strategy.position_size > 0) ? longStopPrice : na,
     color=color.red, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
     color=color.red, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")
     
plot(smoothedReverseClose, color=haCol)

if (strategy.position_size > 0)
    strategy.exit(id="XL STP", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="XS STP", stop=shortStopPrice)


مزید