کمپریسڈ اشارے پر مبنی کثیر ٹائم فریم ٹرینڈ ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-27 17:40:03
ٹیگز:

img

جائزہ

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

اصول

اس حکمت عملی کا بنیادی منطق مندرجہ ذیل تین اشارے پر مبنی ہے:

  1. بوم ہنٹر: ایک اوسیلیٹر جو اشارے کے کمپریشن کی تکنیکوں کا استعمال کرتا ہے تاکہ دو کوئزینٹس (کوئزینٹ 1 اور کوئزینٹ 2) کے درمیان کراس اوورز سے تجارتی سگنل تیار کیے جائیں۔

  2. ہل سویٹ: ہموار حرکت پذیر اوسط لائنوں کا ایک مجموعہ جو وسط لائن اور اوپری / نچلی بینڈ کے درمیان تعلقات کی بنیاد پر رجحان کی سمت کا تعین کرتا ہے۔

  3. اتار چڑھاؤ آسکیلیٹر: ایک اوسیلیٹر اشارے جو قیمتوں کی اتار چڑھاؤ کو مقداری بناتا ہے۔

اس حکمت عملی کا انٹری منطق یہ ہے کہ جب بوم ہنٹر کے دو کویینٹ اشارے اوپر یا نیچے عبور کرتے ہیں تو ، قیمت ہول مڈ لائن کو توڑ دیتی ہے اور اوپری یا نچلے بینڈ سے انحراف کرتی ہے ، اس دوران Volatility Oscillator overbought / oversold علاقے میں ہے۔ اس سے کچھ غلط بریک آؤٹ سگنل فلٹر ہوجاتے ہیں اور انٹری کی درستگی میں بہتری آتی ہے۔

اسٹاپ نقصان کو ایک خاص مدت (ڈیفالٹ 20 بار) کے دوران سب سے کم وادی یا سب سے زیادہ چوٹی تلاش کرکے مقرر کیا جاتا ہے ، اور اسٹاپ نقصان کا فیصد تشکیل شدہ منافع کے عنصر سے ضرب کرکے منافع حاصل کیا جاتا ہے (ڈیفالٹ 3x) ۔ پوزیشن سائزنگ کا حساب کل اکاؤنٹ کے ایکویٹی (ڈیفالٹ 3٪) کے فیصد اور آلے کی مخصوص اسٹاپ نقصان کی حد کی بنیاد پر کیا جاتا ہے۔

پیشہ

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

خطرات

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

حل:

  1. حساسیت کو متوازن کرنے کے لئے کمپریشن اشارے کے پیرامیٹرز کو ایڈجسٹ کریں
  2. درمیانی لائن کے بجائے اشاریہ دار چلتی اوسط کوشش کریں
  3. عدم استحکام کی غلط سمت سے بچنے کے لئے دیگر فیصلے کے اشارے شامل کریں

اصلاح

اس حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

  1. پیرامیٹر کی اصلاح: دورانیہ اور کمپریشن گتانک کی طرح اشارے کی ترتیبات tweaking کی طرف سے بہترین پیرامیٹر مجموعے حاصل کریں

  2. ٹائم فریم کی اصلاح: بہترین تجارتی ٹائم فریم تلاش کرنے کے لئے مختلف ادوار (1 منٹ، 5 منٹ، 30 منٹ وغیرہ) کی جانچ کریں

  3. پوزیشن سائزنگ کی اصلاح: مثالی سرمایہ کے استعمال کے منصوبے کو تلاش کرنے کے لئے ہر تجارتی پوزیشن کے سائز اور تناسب میں تبدیلی

  4. سٹاپ نقصان کی اصلاح: زیادہ سے زیادہ رسک ریٹرن ریشو حاصل کرنے کے لئے مختلف تجارتی آلات کی بنیاد پر اسٹاپ نقصان کی جگہ کو ایڈجسٹ کریں

  5. حالت کی اصلاح: زیادہ درست اندراج سگنل حاصل کرنے کے لئے اشارے فلٹرز کو شامل / کم کریں

نتیجہ

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


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

// Strategy based on the 3 indicators:
//  - Boom Hunter Pro
//  - Hull Suite
//  - Volatility Oscillator
//
// Strategy was designed for the purpose of back testing. 
// See strategy documentation for info on trade entry logic.
// 
// Credits:
//  - Boom Hunter Pro: veryfid (https://www.tradingview.com/u/veryfid/)
//  - Hull Suite: InSilico (https://www.tradingview.com/u/InSilico/)
//  - Volatility Oscillator: veryfid (https://www.tradingview.com/u/veryfid/)

//@version=5
strategy("Boom Hunter + Hull Suite + Volatility Oscillator Strategy", overlay=false, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01)

// =============================================================================
// STRATEGY INPUT SETTINGS
// =============================================================================

// ---------------
// Risk Management
// ---------------
swingLength = input.int(20, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles')
accountRiskPercent = input.float(3, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance')
profitFactor = input.float(3, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management')

// ----------
// Date Range
// ----------
start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1')
start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2')
end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
in_date_range = true

// =============================================================================
// INDICATORS
// =============================================================================

// ---------------
// Boom Hunter Pro
// ---------------
square = input.bool(true, title='Square Line?', group='Main Settings')
//Quotient
LPPeriod = input.int(6, title='Quotient | LPPeriod', inline='quotient', group='EOT 1 (Main Oscillator)')
K1 = input.int(0, title='K1', inline='quotient', group='EOT 1 (Main Oscillator)')
esize = 60  //, title = "Size", inline = "quotient2", group = "EOT 1 (Main Oscillator)")
ey = 50  //, title = "Y axis", inline = "quotient2", group = "EOT 1 (Main Oscillator)")
trigno = input.int(1, 'Trigger Length', group='EOT 1 (Main Oscillator)', inline='quotient2')
trigcol = input.color(color.white, title='Trigger Color:', group='EOT 1 (Main Oscillator)', inline='q2')

// EOT 2
//Inputs
LPPeriod2 = input.int(28, title='LPPeriod2', group='EOT 2 (Red Wave)', inline='q2')
K22 = input.float(0.3, title='K2', group='EOT 2 (Red Wave)', inline='q2')

//EOT 1
//Vars
alpha1 = 0.00
HP = 0.00
a1 = 0.00
b1 = 0.00
c1 = 0.00
c2 = 0.00
c3 = 0.00
Filt = 0.00
Peak = 0.00
X = 0.00
Quotient1 = 0.00
pi = 2 * math.asin(1)

//Highpass filter cyclic components
//whose periods are shorter than 100 bars
alpha1 := (math.cos(.707 * 2 * pi / 100) + math.sin(.707 * 2 * pi / 100) - 1) / math.cos(.707 * 2 * pi / 100)
HP := (1 - alpha1 / 2) * (1 - alpha1 / 2) * (close - 2 * nz(close[1]) + nz(close[2])) + 2 * (1 - alpha1) * nz(HP[1]) - (1 - alpha1) * (1 - alpha1) * nz(HP[2])

//SuperSmoother Filter
a1 := math.exp(-1.414 * pi / LPPeriod)
b1 := 2 * a1 * math.cos(1.414 * pi / LPPeriod)
c2 := b1
c3 := -a1 * a1
c1 := 1 - c2 - c3
Filt := c1 * (HP + nz(HP[1])) / 2 + c2 * nz(Filt[1]) + c3 * nz(Filt[2])

//Fast Attack - Slow Decay Algorithm
Peak := .991 * nz(Peak[1])
if math.abs(Filt) > Peak
    Peak := math.abs(Filt)
    Peak

//Normalized Roofing Filter
if Peak != 0
    X := Filt / Peak
    X

Quotient1 := (X + K1) / (K1 * X + 1)

// EOT 2
//Vars
alpha1222 = 0.00
HP2 = 0.00
a12 = 0.00
b12 = 0.00
c12 = 0.00
c22 = 0.00
c32 = 0.00
Filt2 = 0.00
Peak2 = 0.00
X2 = 0.00
Quotient4 = 0.00

alpha1222 := (math.cos(.707 * 2 * pi / 100) + math.sin(.707 * 2 * pi / 100) - 1) / math.cos(.707 * 2 * pi / 100)
HP2 := (1 - alpha1222 / 2) * (1 - alpha1222 / 2) * (close - 2 * nz(close[1]) + nz(close[2])) + 2 * (1 - alpha1222) * nz(HP2[1]) - (1 - alpha1222) * (1 - alpha1222) * nz(HP2[2])

//SuperSmoother Filter
a12 := math.exp(-1.414 * pi / LPPeriod2)
b12 := 2 * a12 * math.cos(1.414 * pi / LPPeriod2)
c22 := b12
c32 := -a12 * a12
c12 := 1 - c22 - c32
Filt2 := c12 * (HP2 + nz(HP2[1])) / 2 + c22 * nz(Filt2[1]) + c32 * nz(Filt2[2])

//Fast Attack - Slow Decay Algorithm
Peak2 := .991 * nz(Peak2[1])
if math.abs(Filt2) > Peak2
    Peak2 := math.abs(Filt2)
    Peak2

//Normalized Roofing Filter
if Peak2 != 0
    X2 := Filt2 / Peak2
    X2

Quotient4 := (X2 + K22) / (K22 * X2 + 1)
q4 = Quotient4 * esize + ey

//Plot EOT
q1 = Quotient1 * esize + ey
trigger = ta.sma(q1, trigno)
Plot3 = plot(trigger, color=trigcol, linewidth=2, title='Quotient 1')
Plot44 = plot(q4, color=color.new(color.red, 0), linewidth=2, title='Quotient 2')


// ----------
// HULL SUITE
// ----------

//INPUT
src = input(close, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(200, title='Length(180-200 for floating S/R , 55 for swing entry)')
lengthMult = input(2.4, title='Length multiplier (Used to view higher timeframes with straight band)')

useHtf = input(false, title='Show Hull MA from X timeframe? (good for scalping)')
htf = input.timeframe('240', title='Higher timeframe')

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)

//SWITCH
Mode(modeSwitch, src, len) =>
    modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? request.security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = MHULL > SHULL ? color.green : color.red

//PLOT
///< Frame
Fi1 = plot(-10, title='MHULL', color=hullColor, linewidth=2)

// -----------------
// VOLUME OSCILLATOR
// -----------------

volLength = input(80)
spike = close - open
x = ta.stdev(spike, volLength)
y = ta.stdev(spike, volLength) * -1
volOscCol = spike > x ? color.green : spike < y ? color.red : color.gray
plot(-30, color=color.new(volOscCol, transp=0), linewidth=2)


// =============================================================================
// STRATEGY LOGIC
// =============================================================================

// Boom Hunter Pro entry conditions
boomLong = ta.crossover(trigger, q4)
boomShort = ta.crossunder(trigger, q4)

// Hull Suite entry conditions
hullLong = MHULL > SHULL and close > MHULL
hullShort = MHULL < SHULL and close < SHULL

// Volatility Oscillator entry conditions
volLong = spike > x
volShort = spike < y

inLong = strategy.position_size > 0
inShort = strategy.position_size < 0

longCondition = boomLong and hullLong and volLong and in_date_range
shortCondition = boomShort and hullShort and volShort and in_date_range

swingLow = ta.lowest(source=low, length=swingLength)
swingHigh = ta.highest(source=high, length=swingLength)

atr = ta.atr(14)
longSl = math.min(close - atr, swingLow)
shortSl = math.max(close + atr, swingHigh)

longStopPercent = math.abs((1 - (longSl / close)) * 100)
shortStopPercent = math.abs((1 - (shortSl / close)) * 100)

longTpPercent = longStopPercent * profitFactor
shortTpPercent = shortStopPercent * profitFactor
longTp = close + (close * (longTpPercent / 100))
shortTp = close - (close * (shortTpPercent / 100))

// Position sizing (default risk 3% per trade)
riskAmt = strategy.equity * accountRiskPercent / 100
longQty = math.abs(riskAmt / longStopPercent * 100) / close
shortQty = math.abs(riskAmt / shortStopPercent * 100) / close

if (longCondition and not inLong)
    strategy.entry("Long", strategy.long, qty=longQty)
    strategy.exit("Long  SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit')
    buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up)
    label.set_y(id=buyLabel, y=-40)
    label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + " Qty: " + str.tostring(longQty) + " Swing low: " + str.tostring(swingLow) + " Stop Percent: " + str.tostring(longStopPercent) + " TP Percent: " + str.tostring(longTpPercent))

if (shortCondition and not inShort)
    strategy.entry("Short", strategy.short, qty=shortQty)
    strategy.exit("Short  SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit')
    sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up)
    label.set_y(id=sellLabel, y=-40)
    label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + " Qty: " + str.tostring(shortQty) + " Swing high: " + str.tostring(swingHigh) + " Stop Percent: " + str.tostring(shortStopPercent) + " TP Percent: " + str.tostring(shortTpPercent))


مزید