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


تخلیق کی تاریخ: 2023-11-24 13:54:58 آخر میں ترمیم کریں: 2023-11-24 13:54:58
کاپی: 0 کلکس کی تعداد: 773
1
پر توجہ دیں
1617
پیروکار

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

جائزہ

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

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

کوڈ میں دو اپنی مرضی کے مطابق افعال کی وضاحت کی گئی ہے ، بالترتیب ٹائم سیریز اور صف کے حساب سے وزنی معیاری فرق۔ اہم اقدامات یہ ہیں:

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

اس طرح، ہم نے ایک مرکزی وزن اوسط قیمت پر، ایک معیاری فرق کے طور پر اوپر اور نیچے کے فاصلے کے ساتھ ایک چینل ہے. جب قیمت نیچے سے اس چینل کے نچلے حصے کو توڑنے کے لئے، زیادہ سے زیادہ؛ جب اوپر سے چینل کے سب سے اوپر کو توڑنے کے لئے، خالی.

طاقت کا تجزیہ

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

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

خطرے کا تجزیہ

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

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

اصلاح کی سمت

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-11-16 00:00:00
end: 2023-11-23 00:00:00
period: 45m
basePeriod: 5m
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/
// © rumpypumpydumpy   © cache_that_pass

//@version=4
strategy("[cache_that_pass] 1m 15m Function - Weighted Standard Deviation", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.075)

f_weighted_sd_from_series(_src, _weight, _n) => //{
//  @function: Calculates weighted mean, variance, standard deviation, MSE and RMSE from time series variables
//  @parameters:
//      _src: time series variable of sample values
//      _weight: time series of corresponding weight values.
//      _n : number of samples
    _xw = _src * _weight
    _sum_weight = sum(_weight, _n)
    _mean = sum(_xw, _n) / _sum_weight
    float _sqerror_sum = 0
    int _nonzero_n = 0
    for _i = 0 to _n - 1
        _sqerror_sum := _sqerror_sum + pow(_mean - _src[_i], 2) * _weight[_i]
        _nonzero_n := _weight[_i] != 0 ? _nonzero_n + 1 : _nonzero_n
    _variance = _sqerror_sum / ((_nonzero_n - 1) * _sum_weight / _nonzero_n)
    _dev = sqrt(_variance)
    _mse = _sqerror_sum / _sum_weight
    _rmse = sqrt(_mse)
    [_mean, _variance, _dev, _mse, _rmse]
//}
// -----------------------------------------------------------------------------

f_weighted_sd_from_arrays(_a_src, _a_weight, _n) => //{
//  @function: Calculates weighted mean, variance, standard deviation, MSE and RMSE from arrays
//  Expects index 0 of the arrays to be the most recent sample and weight values!
//  @parameters:
//      _a_src: array of sample values
//      _a_weight: array of corresponding weight values.
//      _n : number of samples
    float _mean = na, float _variance = na, float _dev = na, float _mse = na
    float _rmse = na, float _sqerror_sum = na, float _sum_weight = na
    float[] _a_xw = array.new_float(_n)
    int _nonzero_n = 0
    if array.size(_a_src) >= _n
        _sum_weight := 0
        _sqerror_sum := 0
        for _i = 0 to _n - 1
            array.set(_a_xw, _i, array.get(_a_src, _i) * array.get(_a_weight, _i))
            _sum_weight := _sum_weight + array.get(_a_weight, _i)
            _nonzero_n := array.get(_a_weight, _i) != 0 ? _nonzero_n + 1 : _nonzero_n
        _mean := array.sum(_a_xw) / _sum_weight
        for _j = 0 to _n - 1
            _sqerror_sum := _sqerror_sum + pow(_mean - array.get(_a_src, _j), 2) * array.get(_a_weight, _j)
        _variance := _sqerror_sum / ((_nonzero_n - 1) * _sum_weight / _nonzero_n)
        _dev := sqrt(_variance)
        _mse := _sqerror_sum / _sum_weight
        _rmse := sqrt(_mse)
    [_mean, _variance, _dev, _mse, _rmse]
//}


// -----------------------------------------------------------------------------
// Example usage : 
// -----------------------------------------------------------------------------

len = input(20)

// -----------------------------------------------------------------------------
// From series :
// -----------------------------------------------------------------------------
[m, v, d, mse, rmse] = f_weighted_sd_from_series(close, volume, len)


plot(m, color = color.blue)
plot(m + d * 2, color = color.blue)
plot(m - d * 2, color = color.blue)
// -----------------------------------------------------------------------------



// -----------------------------------------------------------------------------
// From arrays : 
// -----------------------------------------------------------------------------
var float[] a_src = array.new_float()
var float[] a_weight = array.new_float()

if barstate.isfirst
    for i = 1 to len
        array.unshift(a_weight, i)

array.unshift(a_src, close)

if array.size(a_src) > len
    array.pop(a_src)

[a_m, a_v, a_d, a_mse, a_rmse] = f_weighted_sd_from_arrays(a_src, a_weight, len)

plot(a_m, color = color.orange)
plot(a_m + a_d * 2, color = color.orange)
plot(a_m - a_d * 2, color = color.orange)
// -----------------------------------------------------------------------------


series_text = "Mean : " + tostring(m) + "\nVariance : " + tostring(v) + "\nSD : " + tostring(d) + "\nMSE : " + tostring(mse) +  "\nRMSE : " + tostring(rmse)
array_text = "Mean : " + tostring(a_m) + "\nVariance : " + tostring(a_v) + "\nSD : " + tostring(a_d) + "\nMSE : " + tostring(a_mse) +  "\nRMSE : " + tostring(a_rmse)
debug_text = "Volume weighted from time series : \n" + series_text + "\n\nLinearly weighted from arrays : \n" + array_text

//debug = label.new(x = bar_index, y = close, text = debug_text, style = label.style_label_left)
//.delete(debug[1])

//test strategy
if low <= (m - d * 2)
    strategy.entry("LE", strategy.long)
if high >= (m + d * 2)
    strategy.entry("SE", strategy.short)

// User Options to Change Inputs (%)
stopPer = input(3.11, title='Stop Loss %', type=input.float) / 100
takePer = input(7.50, title='Take Profit %', type=input.float) / 100

// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)

if strategy.position_size > 0 
    strategy.exit(id="Close Long", stop=longStop, limit=longTake)
//    strategy.close("LE", when = (longStop) or (longTake), qty_percent = 100)
if strategy.position_size < 0 
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake)
//    strategy.close("SE", when = (shortStop) or (shortTake), qty_percent = 100)