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

مصنف:چاؤ ژانگ، تاریخ: 2024-01-24 11:13:39
ٹیگز:

img

جائزہ

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

حکمت عملی میکانکس

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

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

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

ہارڈ اسٹاپ حالیہ قیمت اوسط حقیقی رینج ضرب پر مبنی ہیں، صارف کی تشکیل.

فوائد

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

خطرات

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

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

بہتری

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

نتیجہ

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


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
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/
// © Crunchster1

//@version=5
strategy(title="Crunchster's Normalised Trend Strategy", shorttitle="Normalised Trend Strategy", overlay=false )

// Inputs and Parameters
src = input(close, 'Source', group='Strategy Settings')
length = input.int(title="Lookback period for price normalisation filter", defval=14, minval=2, group='Strategy Settings', tooltip='This sets the lookback period for the volatility adjustment of returns, which is used to transform the price series into the "real price"')
hlength = input.int(title="Lookback period for Hull Moving Average", defval=100, minval=2, group='Strategy Settings')
offset = input.int(title="HMA Offset", defval=0, minval=0, group='Strategy Settings')
long = input(true, 'Long', inline='08', group='Strategy Settings')
short = input(true, 'Short', inline='08', group='Strategy Settings', tooltip='Toggle long/short strategy on/off')

stopMultiple = input.float(1, 'Stop multiple', step=0.25, group='Risk Management Settings', tooltip='Multiple for ATR, setting hard stop loss from entry price')
lev = input.float(1, 'Max Leverage', step=0.5, group='Risk Management Settings', tooltip='Max leverage sets maximum allowable leverage of total capital (initial capital + any net profit), capping maximum volatility adjusted position size')
riskT = input.float(10, maxval=75, title='Annualised Volatility Target %', group='Risk Management Settings', tooltip='Specify annual risk target, used to determine volatility adjusted position size. Annualised daily volatility is referenced to this value and position size adjusted accordingly')
comp = input(false, 'Compounding', inline='09', group='Risk Management Settings')
Comppct = input.float(50, '%', step=5, inline='09', group='Risk Management Settings', tooltip='Toggle compounding of profit, and set % of profit to compound')

// Backtesting period
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, inline='04', group='Backtest range')
FromMonth = input.int(defval=1, title='From Mon', minval=1, maxval=12, inline='04', group='Backtest range')
FromYear = input.int(defval=2018, title='From Yr', minval=1900, inline='04', group='Backtest range', tooltip='Set start of backtesting period')
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31, inline='05', group='Backtest range')
ToMonth = input.int(defval=1, title='To Mon', minval=1, maxval=12, inline='05', group='Backtest range')
ToYear = input.int(defval=9999, title='To Yr', minval=1900, inline='05', group='Backtest range', tooltip='Set end of backtesting period')

start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window = true

// Normalised returns calculation
nRet = (src - src[1]) / ta.stdev((src - src[1]), length)

nPrice = ta.cum(nRet)

//Hull Moving Average - using normalised price series
fHMA = ta.wma(2 * ta.wma(nPrice[offset], hlength / 2) - ta.wma(nPrice[offset], hlength), math.round(math.sqrt(hlength)))

//Risk Management formulae
strategy.initial_capital = 50000
tr = math.max(high - low, math.abs(high - close), math.abs(low - close)) //True range
stopL = ta.sma(tr, 14) //Average true range
stdev = ta.stdev(close-close[1], 14) //volatility of recent returns
maxcapital = strategy.initial_capital+strategy.netprofit //Maximum capital available to invest - initial capital net of profit
annvol = 100*math.sqrt(365)*stdev/close //converts recent volatility of returns into annualised volatility of returns - assumes daily timeframe

risk = 1.1
if comp
    risk := (strategy.initial_capital+(Comppct*strategy.netprofit/100))//adjust investment capital to include compounding
else
    risk := strategy.initial_capital

shares = (risk * (riskT/annvol)) / close //calculates volatility adjusted position size, dependent on user specified annualised risk target
if ((shares*close) > lev*maxcapital) //ensures position size does not exceed available capital multiplied by user specified maximum leverage
    shares := lev*maxcapital/close

//To set the price at the entry point of trade
Posopen() =>
    math.abs(strategy.position_size[1]) <= 0 and math.abs(strategy.position_size) > 0

var float openN = na
if Posopen()
    openN := stopL

// Strategy Rules
if long
    longCondition = ta.crossover(nPrice, fHMA) and window
    exitlong = ta.crossunder(nPrice, fHMA)
    if (longCondition)
        strategy.entry('Go Long!', strategy.long, qty=shares)
    if strategy.position_size > 0    
        strategy.exit('Stop Long', from_entry = 'Go Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
    if (exitlong)
        strategy.close('Go Long!', immediately = true)

if short
    shortCondition = ta.crossunder(nPrice, fHMA) and window
    exitshort = ta.crossover(nPrice, fHMA)
    if (shortCondition)
        strategy.entry('Go Short!', strategy.short, qty=shares)
    if strategy.position_size < 0   
        strategy.exit('Stop Short', from_entry = 'Go Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
    if (exitshort)
        strategy.close('Go Short!', immediately = true)

// Visuals of trend and direction
plot(nPrice, title='Real Price', color=color.black)

MAColor = fHMA > fHMA[3] ? #00ff00 : #ff0000
MA1 = plot(fHMA, title='Hull MA', color=MAColor)
MA2 = plot(fHMA[3], title='Hull MA Offset', color=MAColor)
fill(MA1, MA2, title='Band Filler', color=MAColor)

مزید