گوسین چینل انکولی چلتی اوسط حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-03-28 18:08:18
ٹیگز:

img

جائزہ

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

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

گوسین چینل کے انکولی چلتی اوسط کی حکمت عملی کے اصول مندرجہ ذیل ہیں:

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

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

گوسین چینل انکولی چلتی اوسط حکمت عملی مندرجہ ذیل فوائد ہیں:

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

خطرے کا تجزیہ

اس کے بہت سے فوائد کے باوجود ، گوسین چینل انکولی چلتی اوسط حکمت عملی میں ابھی بھی کچھ خطرات شامل ہیں:

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

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

گوسین چینل کے انکولی چلتی اوسط کی حکمت عملی کے لئے اصلاح کی سمتوں میں شامل ہیں:

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

خلاصہ

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


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Gaussian Channel Strategy v1.0", overlay=true, calc_on_every_tick=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

// Date condition inputs
startDate = input(title="Date Start", type=input.time, defval=timestamp("1 Jan 2018 00:00 +0000"), group="Dates")
endDate = input(title="Date End", type=input.time, defval=timestamp("31 Dec 2060 23:59 +0000"), group="Dates")
timeCondition = true

// This study is an experiment utilizing the Ehlers Gaussian Filter technique combined with lag reduction techniques and true range to analyze trend activity.
// Gaussian filters, as Ehlers explains it, are simply exponential moving averages applied multiple times.
// First, beta and alpha are calculated based on the sampling period and number of poles specified. The maximum number of poles available in this script is 9.
// Next, the data being analyzed is given a truncation option for reduced lag, which can be enabled with "Reduced Lag Mode".
// Then the alpha and source values are used to calculate the filter and filtered true range of the dataset.
// Filtered true range with a specified multiplier is then added to and subtracted from the filter, generating a channel.
// Lastly, a one pole filter with a N pole alpha is averaged with the filter to generate a faster filter, which can be enabled with "Fast Response Mode". 

//Custom bar colors are included.

//Note: Both the sampling period and number of poles directly affect how much lag the indicator has, and how smooth the output is.
//      Larger inputs will result in smoother outputs with increased lag, and smaller inputs will have noisier outputs with reduced lag.
//      For the best results, I recommend not setting the sampling period any lower than the number of poles + 1. Going lower truncates the equation.

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Updates:
// Huge shoutout to @e2e4mfck for taking the time to improve the calculation method!
// -> migrated to v4
// -> pi is now calculated using trig identities rather than being explicitly defined.
// -> The filter calculations are now organized into functions rather than being individually defined.
// -> Revamped color scheme.

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions - courtesy of @e2e4mfck
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 
//Filter function 
f_filt9x (_a, _s, _i) => 
    int _m2 = 0, int _m3 = 0, int _m4 = 0, int _m5 = 0, int _m6 = 0, 
    int _m7 = 0, int _m8 = 0, int _m9 = 0, float _f = .0, _x = (1 - _a)
    // Weights. 
    // Initial weight _m1 is a pole number and equal to _i
    _m2 := _i == 9 ? 36  : _i == 8 ? 28 : _i == 7 ? 21 : _i == 6 ? 15 : _i == 5 ? 10 : _i == 4 ? 6 : _i == 3 ? 3 : _i == 2 ? 1 : 0
    _m3 := _i == 9 ? 84  : _i == 8 ? 56 : _i == 7 ? 35 : _i == 6 ? 20 : _i == 5 ? 10 : _i == 4 ? 4 : _i == 3 ? 1 : 0
    _m4 := _i == 9 ? 126 : _i == 8 ? 70 : _i == 7 ? 35 : _i == 6 ? 15 : _i == 5 ? 5  : _i == 4 ? 1 : 0
    _m5 := _i == 9 ? 126 : _i == 8 ? 56 : _i == 7 ? 21 : _i == 6 ? 6  : _i == 5 ? 1  : 0 
    _m6 := _i == 9 ? 84  : _i == 8 ? 28 : _i == 7 ? 7  : _i == 6 ? 1  : 0 
    _m7 := _i == 9 ? 36  : _i == 8 ? 8  : _i == 7 ? 1  : 0 
    _m8 := _i == 9 ? 9   : _i == 8 ? 1  : 0 
    _m9 := _i == 9 ? 1   : 0
    // filter
    _f :=   pow(_a, _i) * nz(_s) + 
      _i  *     _x      * nz(_f[1])      - (_i >= 2 ? 
      _m2 * pow(_x, 2)  * nz(_f[2]) : 0) + (_i >= 3 ? 
      _m3 * pow(_x, 3)  * nz(_f[3]) : 0) - (_i >= 4 ? 
      _m4 * pow(_x, 4)  * nz(_f[4]) : 0) + (_i >= 5 ? 
      _m5 * pow(_x, 5)  * nz(_f[5]) : 0) - (_i >= 6 ? 
      _m6 * pow(_x, 6)  * nz(_f[6]) : 0) + (_i >= 7 ? 
      _m7 * pow(_x, 7)  * nz(_f[7]) : 0) - (_i >= 8 ? 
      _m8 * pow(_x, 8)  * nz(_f[8]) : 0) + (_i == 9 ? 
      _m9 * pow(_x, 9)  * nz(_f[9]) : 0)

//9 var declaration fun
f_pole (_a, _s, _i) =>
    _f1 =            f_filt9x(_a, _s, 1),      _f2 = (_i >= 2 ? f_filt9x(_a, _s, 2) : 0), _f3 = (_i >= 3 ? f_filt9x(_a, _s, 3) : 0)
    _f4 = (_i >= 4 ? f_filt9x(_a, _s, 4) : 0), _f5 = (_i >= 5 ? f_filt9x(_a, _s, 5) : 0), _f6 = (_i >= 6 ? f_filt9x(_a, _s, 6) : 0)
    _f7 = (_i >= 2 ? f_filt9x(_a, _s, 7) : 0), _f8 = (_i >= 8 ? f_filt9x(_a, _s, 8) : 0), _f9 = (_i == 9 ? f_filt9x(_a, _s, 9) : 0)
    _fn = _i == 1 ? _f1 : _i == 2 ? _f2 : _i == 3 ? _f3 :
      _i == 4     ? _f4 : _i == 5 ? _f5 : _i == 6 ? _f6 :
      _i == 7     ? _f7 : _i == 8 ? _f8 : _i == 9 ? _f9 : na
    [_fn, _f1]

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Source
src = input(defval=hlc3, title="Source")

//Poles
int N = input(defval=4, title="Poles", minval=1, maxval=9)

//Period
int per = input(defval=144, title="Sampling Period", minval=2)

//True Range Multiplier
float mult = input(defval=1.414, title="Filtered True Range Multiplier", minval=0)

//Lag Reduction
bool modeLag  = input(defval=false, title="Reduced Lag Mode")
bool modeFast = input(defval=false, title="Fast Response Mode")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Beta and Alpha Components
beta  = (1 - cos(4*asin(1)/per)) / (pow(1.414, 2/N) - 1)
alpha = - beta + sqrt(pow(beta, 2) + 2*beta)

//Lag
lag = (per - 1)/(2*N)

//Data
srcdata = modeLag ? src + (src - src[lag]) : src
trdata  = modeLag ? tr(true) + (tr(true) - tr(true)[lag]) : tr(true)

//Filtered Values
[filtn, filt1]     = f_pole(alpha, srcdata, N)
[filtntr, filt1tr] = f_pole(alpha, trdata,  N)

//Lag Reduction
filt   = modeFast ? (filtn + filt1)/2 : filtn
filttr = modeFast ? (filtntr + filt1tr)/2 : filtntr

//Bands
hband = filt + filttr*mult
lband = filt - filttr*mult

// Colors
color1   = #0aff68
color2   = #00752d
color3   = #ff0a5a
color4   = #990032
fcolor   = filt > filt[1] ? #0aff68 : filt < filt[1] ? #ff0a5a : #cccccc
barcolor = (src > src[1]) and (src > filt) and (src < hband) ? #0aff68 : (src > src[1]) and (src >= hband) ? #0aff1b : (src <= src[1]) and (src > filt) ? #00752d : 
           (src < src[1]) and (src < filt) and (src > lband) ? #ff0a5a : (src < src[1]) and (src <= lband) ? #ff0a11 : (src >= src[1]) and (src < filt) ? #990032 : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filtplot = plot(filt, title="Filter", color=fcolor, linewidth=3)

//Band Plots
hbandplot = plot(hband, title="Filtered True Range High Band", color=fcolor)
lbandplot = plot(lband, title="Filtered True Range Low Band", color=fcolor)

//Channel Fill
fill(hbandplot, lbandplot, title="Channel Fill", color=fcolor, transp=80)

//Bar Color
barcolor(barcolor)


longCondition = crossover(close, hband) and timeCondition
closeAllCondition = crossunder(close, hband) and timeCondition

if longCondition
    strategy.entry("long", strategy.long)

if closeAllCondition
    strategy.close("long")

مزید