اوسط تجارتی حکمت عملی کو متحرک کرنے والا براڈ سپیکٹرم موونگ


تخلیق کی تاریخ: 2024-01-25 14:19:27 آخر میں ترمیم کریں: 2024-01-25 14:19:27
کاپی: 0 کلکس کی تعداد: 689
1
پر توجہ دیں
1617
پیروکار

اوسط تجارتی حکمت عملی کو متحرک کرنے والا براڈ سپیکٹرم موونگ

جائزہ

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

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

یہ حکمت عملی متغیر حرکت پذیر اوسط فنکشن کا استعمال کرتی ہے ، جس سے 12 مختلف قسم کی حرکت پذیر اوسط پیدا ہوسکتی ہے۔ بنیادی اصول یہ ہے کہ فوری لائن ((Close MA) اور سست لائن ((Open MA) دو حرکت پذیر اوسط کا حساب لگایا جائے ، جس سے تیز لائن پر سست لائن عبور کرنے پر خرید کا اشارہ پیدا ہوتا ہے ، اور تیز لائن کے نیچے سست لائن کو عبور کرنے پر فروخت کا اشارہ پیدا ہوتا ہے۔ اس کے ساتھ ہی اسٹاپ نقصان کی رکاوٹ پیرامیٹرز کو ترتیب دیں ، جس سے خود کار طریقے سے اسٹاپ نقصان کی روک تھام ممکن ہو۔

کلیدی منطق یہ ہے کہ متغیر فنکشن کے ذریعہ دو منتقل اوسط پیدا کریں:closeSeries = variant(basisType, close, basisLen, offsetSigma, offsetALMA)اورopenSeries = variant(basisType, open, basisLen, offsetSigma, offsetALMA)。variant فنکشن میں 12 مختلف قسم کے اوسط کے حساب کتاب کے طریقے شامل ہیں ، جن کو بیس ٹائپ پیرامیٹرز کے ذریعہ آزادانہ طور پر منتخب کیا جاسکتا ہے۔。 اس طرح وسیع پیمانے پر چلنے والی اوسط کا مجموعہ حاصل ہوتا ہے۔。

بنیادی ٹریڈنگ سگنل جنریشن منطق یہ ہے:longCond = xlong اورshortCond = xshortاس کا مطلب یہ ہے کہ تیز لائن پر سست لائن پر زیادہ کام کریں ، تیز لائن کے نیچے سست لائن پر خالی کام کریں۔

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

طاقت کا تجزیہ

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

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

خطرے کا تجزیہ

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

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

اصلاح کی سمت

اس حکمت عملی میں اصلاحات کے چند اہم پہلو ہیں:

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

مندرجہ بالا سمتوں میں اصلاحات کے ذریعہ ، حکمت عملی کی عملی کارکردگی کو مستقل طور پر بہتر بنایا جاسکتا ہے۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//

strategy(title="Long/Short", shorttitle="Banana Maker", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=false)



// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution?")
intRes = input(defval=7, title="Multiplier for Alernate Resolution")
stratRes = timeframe.ismonthly ? tostring(timeframe.multiplier * intRes, "###M") : 
   timeframe.isweekly ? tostring(timeframe.multiplier * intRes, "###W") : 
   timeframe.isdaily ? tostring(timeframe.multiplier * intRes, "###D") : 
   timeframe.isintraday ? tostring(timeframe.multiplier * intRes, "####") : '60'
basisType = input(defval="DEMA", title="MA Type: ", options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "HullMA", "LSMA", "ALMA", "SSMA", "TMA"])
basisLen = input(defval=8, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
scolor = input(false, title="Show coloured Bars to indicate Trend?")
delayOffset = input(defval=0, title="Delay Open/Close MA (Forces Non-Repainting)", minval=0, step=1)
tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])
// === /INPUTS ===

// Constants colours that include fully non-transparent option.
green100 = #008000FF
lime100 = #6ad279
red100 = #FF0000FF
blue100 = #0000FFFF
aqua100 = #00FFFFFF
darkred100 = #8B0000FF
gray100 = #808080FF

// === BASE FUNCTIONS ===
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    v7 = 0.0
    sma_1 = sma(src, len)  // Smoothed
    v7 := na(v7[1]) ? sma_1 : (v7[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    v11 = sma(v1, len)  // Triangular (extreme smooth)
    // SuperSmoother filter
    // © 2013  John F. Ehlers
    a1 = exp(-1.414 * 3.14159 / len)
    b1 = 2 * a1 * cos(1.414 * 3.14159 / len)
    c2 = b1
    c3 = -a1 * a1
    c1 = 1 - c2 - c3
    v12 = 0.0
    v12 := c1 * (src + nz(src[1])) / 2 + c2 * nz(v12[1]) + c3 * nz(v12[2])
    type == "EMA" ? v2 : type == "DEMA" ? v3 : 
       type == "TEMA" ? v4 : type == "WMA" ? v5 : type == "VWMA" ? v6 : 
       type == "SMMA" ? v7 : type == "HullMA" ? v8 : type == "LSMA" ? v9 : 
       type == "ALMA" ? v10 : type == "TMA" ? v11 : type == "SSMA" ? v12 : v1

// security wrapper for repeat calls* NEEDS REFINEMENT- backtesting this shows repaint. need new wrapper
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
    use ? security_1 : exp



// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open[delayOffset], basisLen, offsetSigma, offsetALMA)
// === /SERIES ===

// === PLOTTING ===

// alt resulution 
closeSeriesAlt = reso(closeSeries, useRes, stratRes)
openSeriesAlt = reso(openSeries, useRes, stratRes)
//
trendColour = closeSeriesAlt > openSeriesAlt ? color.green : color.red
bcolour = closeSeries > openSeriesAlt ? lime100 : red100
barcolor(scolor ? bcolour : na, title="Bar Colours")
closeP = plot(closeSeriesAlt, title="Close Series", color=trendColour, linewidth=0, style=plot.style_line, transp=1)
openP = plot(openSeriesAlt, title="Open Series", color=trendColour, linewidth=0, style=plot.style_line, transp=1)
fill(closeP, openP, color=trendColour, transp=80)

// === /PLOTTING ===
//

//
// === ALERT conditions

xlong = crossover(closeSeriesAlt, openSeriesAlt)
xshort = crossunder(closeSeriesAlt, openSeriesAlt)
longCond = xlong  // alternative: longCond[1]? false : (xlong or xlong[1]) and close>closeSeriesAlt and close>=open
shortCond = xshort  // alternative: shortCond[1]? false : (xshort or xshort[1]) and close<closeSeriesAlt and close<=open


// === /ALERT conditions. needs work in study mode. the banana maker is the study script. 
// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
//shunt = 0
//c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
//plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)

//Repaint city, study mode will help but wont trigger the alerts


// === STRATEGY ===
// stop loss
slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0)
tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0)
// Include bar limiting algorithm
ebar = input(defval=1000, title="Number of Bars for Back Testing", minval=0)
dummy = input(false, title="- SET to ZERO for Daily or Longer Timeframes")
//
// Calculate how many mars since last bar
tdays = (timenow - time) / 60000.0  // number of minutes since last bar
tdays := timeframe.ismonthly ? tdays / 1440.0 / 5.0 / 4.3 / timeframe.multiplier : 
   timeframe.isweekly ? tdays / 1440.0 / 5.0 / timeframe.multiplier : 
   timeframe.isdaily ? tdays / 1440.0 / timeframe.multiplier : 
   tdays / timeframe.multiplier  // number of bars since last bar
//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na

// Make sure we are within the bar range, Set up entries and exit conditions
if (ebar == 0 or tdays <= ebar) and tradeType != "NONE"
    strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT")
    strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG")
    strategy.close("long", when=shortCond == true and tradeType == "LONG")
    strategy.close("short", when=longCond == true and tradeType == "SHORT")
    strategy.exit("XL", from_entry="long", profit=TP, loss=SL)
    strategy.exit("XS", from_entry="short", profit=TP, loss=SL)



// === /STRATEGY ===
// eof