ترقی کا پروڈیوسر - دوہری آر ایس آئی ٹرینڈ اسٹریٹجی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2023-11-15 17:31:24
ٹیگز:

img

جائزہ

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

اصول تجزیہ

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

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

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

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

دوہری آر ایس آئی الگورتھمک حکمت عملی کے مندرجہ ذیل فوائد ہیں:

  1. دوہری ٹائم فریم آر ایس آئی اشارے تیزی اور bearish سگنل کو زیادہ درست طریقے سے طے کرسکتے ہیں۔ طویل اور مختصر مدت کے آر ایس آئی کا امتزاج کچھ جھوٹے سگنل کو فلٹر کرسکتا ہے اور سگنل کے معیار کو بہتر بنا سکتا ہے۔

  2. چلتی اوسط نظام اہم رجحان کی سمت کا تعین کرنے میں مدد کرتا ہے، رجحان کے خلاف تجارت سے بچتا ہے، اور زیادہ تر شور کی تجارت کو فلٹر کر سکتا ہے، جیت کی شرح کو بہتر بناتا ہے.

  3. لچکدار سٹاپ نقصان اور منافع لینے کا طریقہ کار مختلف منافع لینے کی ترتیبات کے ذریعے اعلی منافع کی اجازت دیتا ہے، اور سٹاپ نقصان کے ذریعے خطرے کا انتظام کرتا ہے.

  4. تجارتی منطق آسان اور واضح ہے ، سمجھنے اور بہتر بنانے میں آسان ہے۔ یہ الگورتھمک تاجروں کے لئے سیکھنے کے لئے موزوں ہے۔

خطرے کا تجزیہ

فوائد کے باوجود، دوہری RSI حکمت عملی میں مندرجہ ذیل خطرات بھی ہیں:

  1. RSI خود مارکیٹوں اور رجحانات کی تبدیلیوں میں محدود تاثیر رکھتا ہے۔ اس حکمت عملی میں ان مارکیٹ کے حالات میں کم کارکردگی کا مظاہرہ کیا جاسکتا ہے۔

  2. اگرچہ حرکت پذیر اوسط چھوٹے شور کو فلٹر کرتے ہیں ، لیکن وہ انٹرمیڈیٹ سائیکل ٹرینڈ میں تبدیلیوں کا پتہ لگانے میں کم موثر ہیں ، اور وہ ٹرینڈ ٹرننگ پوائنٹس کو یاد کرسکتے ہیں۔

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

  4. بڑی لمبی / مختصر پوزیشنوں کے نتیجے میں بڑے نقصانات ہوسکتے ہیں۔ پوزیشن سائزنگ کو کنٹرول کرنے کی ضرورت ہے۔

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

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

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

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

  2. بہتر رجحان اور الٹ تجزیہ کے لئے MACD جیسے دیگر اشارے متعارف کروائیں۔

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

  4. پوزیشن سائزنگ کنٹرول ماڈیول شامل کریں مختلف رجحان سائیکل مراحل میں طویل / مختصر پوزیشنوں کو ایڈجسٹ کرنے کے لئے.

  5. انٹری اور آؤٹ پٹ کی درستگی کو بہتر بنانے کے لئے مشین لرننگ ماڈلز کو شامل کریں۔

  6. مختلف مصنوعات اور اصلاح کے لئے ٹائم فریم پر بیک ٹیسٹ.

نتیجہ

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


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Growth Producer", overlay=true, initial_capital = 1000, currency = "USD", pyramiding = 2, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Functions
Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

/// TREND
ribbon_period = input(19, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

p1 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p2 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p1, p2, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

// Relative volatility index
length = input(120,"RVI period", minval=1), src = close
len = 14
stddev = stdev(src, length)
upper = ema(change(src) <= 0 ? 0 : stddev, len)
lower = ema(change(src) > 0 ? 0 : stddev, len)
rvi = upper / (upper + lower) * 100
benchmark = input(35, "RVI benchmark", minval=10, maxval=100, step=0.1)

// Plot RVI
// h0 = hline(80, "Upper Band", color=#C0C0C0)
// h1 = hline(20, "Lower Band", color=#C0C0C0)
// fill(h0, h1, color=#996A15, title="Background")
// offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
// plot(rvi, title="RVI", color=#008000, offset = offset)


/// MFI input
mfi_source = hlc3
mfi_length = input(19, "MFI Length", minval=1)
mfi_lower = input(15, "MFI Lower level", minval=0, maxval=50)
mfi_upper = input(90, "MFI Higher level", minval=50, maxval=100)


// MFI
upper_s = sum(volume * (change(mfi_source) <= 0 ? 0 : mfi_source), mfi_length)
lower_s = sum(volume * (change(mfi_source) >= 0 ? 0 : mfi_source), mfi_length)
mf = rsi(upper_s, lower_s)
// mfp = plot(mf, color=color.new(color.gray,0), linewidth=1)
// top = hline(mfi_upper, color=color.new(color.gray, 100), linewidth=1, editable=false)
// bottom = hline(mfi_lower, color=color.new(color.gray,100), linewidth=1, editable=false)
// hline(0, color=color.new(color.black,100), editable=false)
// hline(100, color=color.new(color.black,100), editable=false)

// Breaches
// b_color = (mf > mfi_upper) ? color.new(color.red,70) : (mf < mfi_lower) ? color.new(color.green,60) : na
// bgcolor(HighlightBreaches ? b_color : na)

// fill(top, bottom, color=color.gray, transp=75)

// Initial inputs
Act_RSI_VWAP_long = input(true, "RSI VOLUME WEIGHTED AVERAGE PRICE LONG")
RSI_VWAP_length_long = input(16, "RSI-VWAP LENGTH LONG")
RSI_VWAP_overSold_long = input(13, "RSI-VWAP OVERSOLD LONG", type=input.float)
RSI_VWAP_overBought_long = input(68, "RSI-VWAP OVERBOUGHT LONG", type=input.float)

Act_RSI_VWAP_short = input(true, "RSI VOLUME WEIGHTED AVERAGE PRICE SHORT")
RSI_VWAP_length_short = input(14, "RSI-VWAP LENGTH SHORT")
RSI_VWAP_overSold_short = input(7, "RSI-VWAP OVERSOLD SHORT", type=input.float)
RSI_VWAP_overBought_short = input(68, "RSI-VWAP OVERBOUGHT SHORT", type=input.float)

// RSI with VWAP as source
RSI_VWAP_long = rsi(vwap(close), RSI_VWAP_length_long)
RSI_VWAP_short = rsi(vwap(close), RSI_VWAP_length_short)

// Plot Them Separately.
// Plotting LONG, Put overlay=false
// r=plot(RSI_VWAP_long, color = RSI_VWAP_long > RSI_VWAP_overBought_long ? color.red : RSI_VWAP_lnog < RSI_VWAP_overSold_long ? color.lime : color.blue, title="rsi", linewidth=2, style=plot.style_line)
// h1=plot(RSI_VWAP_overBought_long, color = color.gray, style=plot.style_stepline)
// h2=plot(RSI_VWAP_overSold_long, color = color.gray, style=plot.style_stepline)
// fill(r,h1, color = RSI_VWAP_long > RSI_VWAP_overBought_long ? color.red : na, transp = 60)
// fill(r,h2, color = RSI_VWAP_long < RSI_VWAP_overSold_long ? color.lime : na, transp = 60)

// Plotting SHORT, Put overlay=false
// r=plot(RSI_VWAP_short, color = RSI_VWAP_short > RSI_VWAP_overBought_short ? color.red : RSI_VWAP_short < RSI_VWAP_overSold_short ? color.lime : color.blue, title="rsi", linewidth=2, style=plot.style_line)
// h1=plot(RSI_VWAP_overBought_short, color = color.gray, style=plot.style_stepline)
// h2=plot(RSI_VWAP_overSold_short, color = color.gray, style=plot.style_stepline)
// fill(r,h1, color = RSI_VWAP_short > RSI_VWAP_overBought_short ? color.red : na, transp = 60)
// fill(r,h2, color = RSI_VWAP_short < RSI_VWAP_overSold_short ? color.lime : na, transp = 60)


///////  STRATEGY Take Profit / Stop Loss ////////
////// LONG //////

long_tp1_inp = input(3.3, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(12, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1)

long_sl_inp = input(3.3, title='Long Stop Loss %', step=0.1)/100

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)

////// SHORT //////
short_tp1_inp = input(3.2, title='Short Take Profit 1 %', step=0.1)/100
short_tp1_qty = input(20, title="Short Take Profit 1 Qty", step=1)

short_tp2_inp = input(5.5, title='Short Take Profit 2%', step=0.1)/100
short_tp2_qty = input(100, title="Short Take Profit 2 Qty", step=1)

short_sl_inp = input(3.2, title='Short Stop Loss %', step=0.1)/100

short_take_level_1 = strategy.position_avg_price * (1 - short_tp1_inp)
short_take_level_2 = strategy.position_avg_price * (1 - short_tp2_inp)
short_stop_level = strategy.position_avg_price * (1 + short_sl_inp)



///Strategy_Conditions
/// LONG ///
entry_long =(crossover(RSI_VWAP_long, RSI_VWAP_overSold_long) and leadLine2<leadLine1) or (crossunder(mf,mfi_lower) and leadLine2<leadLine1)
entry_price_long=valuewhen(entry_long,close,0)
exit_long =crossunder(RSI_VWAP_long, RSI_VWAP_overBought_long)

/// SHORT ///

entry_short =crossunder(RSI_VWAP_short, RSI_VWAP_overBought_short) and leadLine2>leadLine1 or (crossover(mf,mfi_upper) and leadLine2>leadLine1)
entry_price_short=valuewhen(entry_short,close,0)
exit_short =crossover(RSI_VWAP_short, RSI_VWAP_overSold_short)

////// BACKTEST PERIOD ///////
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()

    if strategy.position_size == 0 or strategy.position_size > 0 and rvi>benchmark
        strategy.entry("long", true, when = entry_long, comment="Insert Enter Long Comment")
    strategy.exit("TP1","long", qty_percent=long_tp1_qty, limit=long_take_level_1, stop=long_stop_level)
    strategy.exit("TP2","long", qty_percent=long_tp2_qty, limit=long_take_level_2, stop=long_stop_level)
    strategy.close("long", when=exit_long, comment = "Insert Exit Long Comment")

    if strategy.position_size == 0 or strategy.position_size < 0 and rvi>benchmark
        strategy.entry("short", false, when = entry_short, comment="Insert Enter Short Comment")
    strategy.exit("TP1","short", qty_percent=short_tp1_qty, limit=short_take_level_1, stop=short_stop_level)
    strategy.exit("TP2","short", qty_percent=short_tp2_qty, limit=short_take_level_2, stop=short_stop_level)
    strategy.close("short", when=exit_short, comment = "Insert Exit Short Comment")


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")


// SHORT POSITION
plot(strategy.position_size < 0 ? short_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Short Take Profit")
plot(strategy.position_size < 0 ? short_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Short Take Profit")
plot(strategy.position_size < 0 ? short_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")

مزید