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

متحرک پوزیشن ری بیلنسنگ ٹرینڈ ٹریکنگ سسٹم

مصنف:چاؤ ژانگ، تاریخ: 2024-01-26 14:41:08
ٹیگز:

img

جائزہ

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

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

حکمت عملی میں دو ذیلی حکمت عملی شامل ہیں: رجحان کی حکمت عملی اور بریک آؤٹ کی حکمت عملی۔

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

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

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

ہارڈ اسٹاپس اوسط حقیقی رینج کے ضرب کے طور پر مقرر کیے جاتے ہیں۔ ٹریلنگ اسٹاپس حالیہ اعلی ترین اعلی یا کم ترین کم قیمتوں کی پیروی کرتے ہیں۔

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

اس حکمت عملی کے اہم فوائد میں شامل ہیں:

  1. رجحان کی پیروی اور بریک آؤٹ ذیلی حکمت عملیوں کا مجموعہ مضبوط استحکام کے ساتھ مختلف مارکیٹ کے ماحول کو اپناتا ہے۔

  2. اعلی درجے کی پوزیشن سائزنگ اور رسک مینجمنٹ کی تکنیکوں کا اطلاق پوزیشن کو متحرک طور پر منظم کرتا ہے اور رسک کو مؤثر طریقے سے کنٹرول کرتا ہے۔

  3. حالیہ اتار چڑھاؤ اور سالانہ خطرے کے ہدف پر مبنی اتار چڑھاؤ ایڈجسٹ کرنے والی پوزیشنیں اعلی / کم اتار چڑھاؤ کے نظام میں پورٹ فولیو کے خطرے کو نسبتا stable مستحکم رکھتی ہیں۔

  4. اصل قیمت کی اتار چڑھاؤ کی بنیاد پر سٹاپ نقصان کا تعین کرنے سے سٹاپ رن سے غیر ضروری چھوٹے نقصانات سے بچنے میں مدد ملتی ہے۔

  5. ریئل ٹائم میں ٹرائلنگ اسٹاپ کو ایڈجسٹ کرنا لچکدار طور پر رجحانات کو منافع کی کتاب اور بروقت روکتا ہے.

خطرے کا تجزیہ

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

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

  2. متزلزل رجحانات میں کثرت سے اسٹاپ آؤٹ۔ اسٹاپ نقصان کی چوڑائی کو آرام دہ اور پرسکون کیا جاسکتا ہے اور اسٹاپ میکانزم کو بہتر بنایا جاسکتا ہے۔

  3. ابتدائی سرمایہ اور تجارتی اخراجات کے لئے حساسیت۔ ناکافی ابتدائی سرمایہ اور اعلی تجارتی اخراجات منافع بخش پر منفی اثر ڈالتے ہیں۔

  4. پوزیشن سائزنگ اور رسک کنٹرول کے لئے درست اتار چڑھاؤ کے اندازوں پر انحصار۔ اتار چڑھاؤ کے ناقص اندازوں سے پوزیشنوں کا سائز زیادہ یا کم ہوتا ہے۔

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

اصلاح کی اہم سمتوں میں شامل ہیں:

  1. زیادہ سے زیادہ تاریخی ڈیٹا سیٹ کے ساتھ زیادہ بیک ٹیسٹنگ کے ذریعے زیادہ سے زیادہ پیرامیٹر سیٹ تلاش کریں.

  2. سٹاپ میکانزم کو بہتر بنانے کے لئے مختلف سٹاپس جیسے چلنے والی سٹاپس، ٹائم اسٹاپس، اتار چڑھاؤ سٹاپس وغیرہ کی جانچ کی جائے گی۔

  3. بہترین رسک ریٹرن پروفائل تلاش کرنے کے لئے مختلف رسک ٹارگٹ کی جانچ کرکے پوزیشن سائزنگ اور رسک مینجمنٹ کو بہتر بنائیں۔ مختلف لیوریج لیول کے اثرات کی بھی جانچ کریں۔

  4. سگنل کی درستگی اور حکمت عملی کی مضبوطی کو بہتر بنانے کے لئے مزید معاون اشارے کی کوشش کریں.

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

نتیجہ

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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 Turtle and Trend System", shorttitle="Turtle Trend", overlay=true, slippage=10, pyramiding=1, precision = 4, calc_on_order_fills = false, calc_on_every_tick = false, default_qty_value = 0.1, initial_capital = 1000, commission_value = 0.06, process_orders_on_close = true)

// Inputs and Parameters
src = input(close, 'Source', group='Strategy Settings')
length = input.int(title="Lookback period for fast EMA", defval=10, minval=2, group='Strategy Settings', tooltip='This sets the lookback period for the fast exponential moving average. The slow EMA is 5x the fast EMA length')
blength = input.int(title="Lookback period for Breakout", defval=20, minval=5, step=5, group='Strategy Settings')

long = input(true, 'Long', inline='08', group='Strategy toggle')
short = input(true, 'Short', inline='08', group='Strategy toggle', tooltip='Toggle long/short strategy on/off')

EMAwt = input(false, 'Trend', inline='01', group='Strategy toggle')
breakwt = input(true, 'Breakout', inline='01', group='Strategy toggle', tooltip='Toggle trend/breakout strategy on/off')

stopMultiple = input.float(2, 'Stop multiple', step=0.5, group='Risk Management Settings', tooltip='Multiple for ATR, setting hard stop loss from entry price')
trail = input.int(10, 'Trail lookback', step=5, group='Risk Management Settings', tooltip='Lookback period for the trailing stop')
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(15, 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(true, '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 = time >= start and time <= finish

// Breakout strategy
lower = ta.lowest(low[1], blength)
upper = ta.highest(high[1], blength)
basis = math.avg(upper, lower)
signal = 20*(close - basis) / (upper - lower)

// Trend strategy
fEMA = ta.ema(close[1], length)
sEMA = ta.ema(close[1], length*5)
emadiff = fEMA - sEMA
nemadiff = 5*emadiff/(ta.stdev(close - close[1], 252))

//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

// Trailing stop
tlower = ta.lowest(low[1], trail)
tupper = ta.highest(high[1], trail)
tbasis = math.avg(tupper, tlower)
tsignal = 20*(close - tbasis) / (tupper - tlower)

// Strategy Rules
if EMAwt
    if long
        longCondition2 = (nemadiff >2 and nemadiff[1] <2) and window
        exitlong = tsignal <= -10
        if (longCondition2)
            strategy.entry('Trend Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Trend Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Trend Long!', immediately = true)

    if short
        shortCondition2 = (nemadiff <-1 and nemadiff[1] >-1) and window
        exitshort = tsignal >= 10
        if (shortCondition2)
            strategy.entry('Trend Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Trend Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Trend Short!', immediately = true)

if breakwt
    if long
        longCondition1 = (signal >= 10) and window
        exitlong = tsignal <= -10
        if (longCondition1)
            strategy.entry('Break Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Break Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Break Long!', immediately = true)

    if short
        shortCondition1 = (signal <= -10) and window
        exitshort = tsignal >= 10
        if (shortCondition1)
            strategy.entry('Break Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Break Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Break Short!', immediately = true)

// Visuals of trend and direction
plot(nemadiff, title='EMA Forecast', color=color.black, display=display.none)
plot(ta.sma(ta.median(math.sqrt(math.pow(nemadiff,2)), 700), 350), 'Forecast mean', color=color.rgb(245, 0, 0), display=display.none)

MAColor = fEMA > sEMA ? #00ff00 : #ff0000
MA1 = plot(fEMA, title='Fast EMA', color=MAColor)
MA2 = plot(sEMA, title='Slow EMA', color=MAColor)
fill(MA1, MA2, title='Band Filler', color=MAColor)

مزید