وسائل لوڈ ہو رہے ہیں... لوڈنگ...

متحرک لفافہ چلتی اوسط حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-05 14:15:40
ٹیگز:

img

جائزہ

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

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

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

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

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

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

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

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

اس حکمت عملی کے سب سے بڑے فوائد:

  1. خودکار رجحان کی پیروی۔ رجحان کی سمت کا تعین کرنے کے لئے چلتی اوسط کا استعمال ایک اچھی طرح سے قائم طریقہ ہے۔

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

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

  4. قابل تخصیص چلتی اوسط اور لفافہ لائن نمبر۔ اس سے مختلف مصنوعات کی بنیاد پر پیرامیٹر ٹیوننگ کے لئے لچک بڑھ جاتی ہے۔

خطرے کا تجزیہ

اس حکمت عملی کے اہم خطرات:

  1. چلتی اوسط سسٹم سنہری کراس سگنلز کے لئے حساس نہیں ہے۔ اگر کوئی واضح رجحان موجود نہیں ہے تو یہ کچھ مواقع سے محروم ہوسکتا ہے۔

  2. بہت وسیع لفافہ لائن کی ترتیب سے تجارت کی تعدد اور سکڑنے کا خطرہ بڑھ سکتا ہے۔ بہت تنگ ترتیب سے بڑی حرکتیں نظرانداز ہوسکتی ہیں۔ توازن تلاش کرنے کے لئے مکمل جانچ کی ضرورت ہے۔

  3. اس حکمت عملی سے ممکنہ طور پر مختلف مارکیٹوں میں زیادہ چیلنجوں کا سامنا کرنا پڑتا ہے۔ لہذا رجحان سازی کی مصنوعات کو ترجیح دی جاتی ہے۔

  4. تجارتی منافع کے مطابق جزوی پوزیشن کی تشکیل کی حدود۔ اگر یکطرفہ شرط لگانے کی تلاش کی جاتی ہے تو ، مزید اصلاح کی ضرورت ہے۔

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

اس حکمت عملی کو بہتر بنانے کے لئے اہم ہدایات:

  1. دوسرے اندراج / باہر نکلنے والے اشارے جیسے KDJ وغیرہ کے ساتھ تبدیل کریں یا متعدد اشارے کے ساتھ فلٹر شامل کریں.

  2. اسٹاپ منافع / نقصان کا منطق شامل کریں۔ یہ کچھ منافع میں مقفل کرتا ہے اور فعال طور پر کچھ خطرات کو کم کرتا ہے۔

  3. بہترین حرکت پذیر اوسط اور لفافے کے مجموعے کو تلاش کرنے کے لئے پیرامیٹرز کو بہتر بنائیں۔ وسیع پیمانے پر بیک ٹیسٹنگ اور اصلاح کی ضرورت ہے۔

  4. سمارٹ پیرامیٹر ٹیوننگ کے لئے گہری سیکھنے وغیرہ کو شامل کریں۔ وقت کے ساتھ ساتھ مستقل طور پر سیکھیں اور اپ ڈیٹ کریں۔

  5. مصنوعات اور مارکیٹ کے اختلافات پر غور کریں ، مختلف تجارتی ماحول کے مطابق متعدد پیرامیٹر سیٹ مرتب کریں۔ اس سے حکمت عملی کی مضبوطی میں بہتری آتی ہے۔

نتیجہ

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


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Envelope Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, pyramiding = 5, commission_type=strategy.commission.percent, commission_value=0.0)

// CopyRight Crypto Robot

src = input(ohlc4, title="Source", group = "Base MA")
ma_base_window = input.int(5, "Base Mooving Average Window", step = 1, group = "Base MA")
ma_type = input.string(defval='1. SMA', options=['1. SMA', '2. PCMA', '3. EMA', '4. WMA', '5. DEMA', '6. ZLEMA', '7. HMA'], title='MA Type', group = "Base MA")


envelope_1_pct = input.float(0.05, "Envelope 1", step = 0.01, group = "Envelopes")
envelope_2_pct = input.float(0.10, "Envelope 2", step = 0.01, group = "Envelopes")
envelope_3_pct = input.float(0.15, "Envelope 3", step = 0.01, group = "Envelopes")
envelope_4_pct = input.float(0.0, "Envelope 4", step = 0.01, group = "Envelopes")
envelope_5_pct = input.float(0.0, "Envelope 5", step = 0.01, group = "Envelopes")

use_longs = input.bool(true, 'Long Positions') 
use_short = input.bool(true, 'Short Positions')

total_envelope = 0
if envelope_1_pct > 0
    total_envelope := total_envelope + 1
if envelope_2_pct > 0
    total_envelope := total_envelope + 1
if envelope_3_pct > 0
    total_envelope := total_envelope + 1
if envelope_4_pct > 0
    total_envelope := total_envelope + 1
if envelope_5_pct > 0
    total_envelope := total_envelope + 1

// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_function(MA_type, MA_length) =>
    zlema_lag = (MA_length - 1) / 2
    hma_src = MA_type == '7. HMA' ? 2 * ta.wma(src, math.floor(MA_length / 2)) - ta.wma(src, MA_length) : na
    MA_type == '1. SMA' ? ta.sma(src, MA_length) : MA_type == '2. PCMA' ? (ta.highest(high, MA_length) + ta.lowest(low, MA_length)) / 2 : MA_type == '3. EMA' ? ta.ema(src, MA_length) : MA_type == '4. WMA' ? ta.wma(src, MA_length) : MA_type == '5. DEMA' ? 2 * ta.ema(src, MA_length) - ta.ema(ta.ema(src, MA_length), MA_length) : MA_type == '6. ZLEMA' ? ta.ema(src + src - src[zlema_lag], MA_length) : MA_type == '7. HMA' ? ta.wma(hma_src, math.floor(math.sqrt(MA_length))) : na

    
ma_base = ma_function(ma_type, ma_base_window)

ma_high_1 = envelope_1_pct > 0 ? ma_base * (1 + envelope_1_pct) : na
ma_high_2 = envelope_2_pct > 0 ? ma_base * (1 + envelope_2_pct) : na
ma_high_3 = envelope_3_pct > 0 ? ma_base * (1 + envelope_3_pct) : na
ma_high_4 = envelope_4_pct > 0 ? ma_base * (1 + envelope_4_pct) : na
ma_high_5 = envelope_5_pct > 0 ? ma_base * (1 + envelope_5_pct) : na

ma_low_1 = envelope_1_pct > 0 ? ma_base * (1 - envelope_1_pct) : na
ma_low_2 = envelope_2_pct > 0 ? ma_base * (1 - envelope_2_pct) : na
ma_low_3 = envelope_3_pct > 0 ? ma_base * (1 - envelope_3_pct) : na
ma_low_4 = envelope_4_pct > 0 ? ma_base * (1 - envelope_4_pct) : na
ma_low_5 = envelope_5_pct > 0 ? ma_base * (1 - envelope_5_pct) : na

// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_1_pct > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / total_envelope))
    if envelope_2_pct > 0 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / total_envelope))
    if envelope_3_pct > 0 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / total_envelope))
    if envelope_4_pct > 0 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / total_envelope))
    if envelope_5_pct > 0 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / total_envelope))


  
if use_short
    if envelope_1_pct > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / total_envelope))
    if envelope_2_pct > 0 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / total_envelope))
    if envelope_3_pct > 0 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / total_envelope))
    if envelope_4_pct > 0 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / total_envelope))
    if envelope_5_pct > 0 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / total_envelope))


strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------

ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)

plot(ohlc4, color=color.purple)

// use_period = input.bool(false, "Période spécifique ?", group="periode")
// startDate = input.time(timestamp("01 Jan 2020"), "Date de début", group="periode")
// endDate = input.time(timestamp("01 Jan 2025"), "Date de fin", group="periode")


//------------------------------------------
//-------------Indicateurs------------------

// inDateRange = use_period ? ((time >= startDate) and (time < endDate)) : true

// //--------------Backtest-------------------

// strategy_pnl = strategy.netprofit + strategy.openprofit
// bnh_strategy_pnl_pcnt = (strategy_pnl / strategy.initial_capital) * 100

// float bnh_start_bar = na
// bnh_start_bar := na(bnh_start_bar[1]) or inDateRange != true? close : bnh_start_bar[1]
// float bnl_buy_hold_equity = na
// bnl_buy_hold_equity :=  inDateRange == true ? ((close - bnh_start_bar)/bnh_start_bar) * 100 : bnl_buy_hold_equity[1]

// bnh_vs_diff = bnh_strategy_pnl_pcnt - bnl_buy_hold_equity
// bnh_diff_color = bnh_vs_diff > 0 ? color.new(color.green, inDateRange ? 60 : 100) : color.new(color.red, inDateRange ? 60 : 100)

// var Table = table.new(position.top_right, columns = 2, rows = 4, border_width = 1, bgcolor = color.black, border_color = color.gray)
// table.cell(table_id = Table, column = 0, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Buy & hold profit")
// table.cell(table_id = Table, column = 1, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnl_buy_hold_equity, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Strategy profit")
// table.cell(table_id = Table, column = 1, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnh_strategy_pnl_pcnt, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 2, text_color=color.yellow, text_size = size.normal, text = "Date de début")
// table.cell(table_id = Table, column = 1, row = 2, text_color=color.yellow, text_size = size.normal, text = str.format("{0,date,dd-MM-YYYY}",strategy.closedtrades.entry_time(1)))

مزید