RSI ڈبل ریل اوسیلیشن لائن لمبی اور مختصر دو طرفہ تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-25 11:57:46
ٹیگز:

img

جائزہ

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

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

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

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

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

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

حکمت عملی کے فوائد

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

اسٹریٹجی کے خطرات

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

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

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

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

خلاصہ

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


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Learn more about Autoview and how you can automate strategies like this one here: https://autoview.with.pink/
// strategy("Autoview Build-a-bot - 5m chart", "Strategy", overlay=true, pyramiding=2000, default_qty_value=10000)
// study("Autoview Build-a-bot", "Alerts")

///////////////////////////////////////////////
//* Backtesting Period Selector | Component *//
///////////////////////////////////////////////

//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//

testStartYear = input(1, "Backtest Start Year") 
testStartMonth = input(11, "Backtest Start Month")
testStartDay = input(10, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(77777777, "Backtest Stop Year")
testStopMonth = input(11, "Backtest Stop Month")
testStopDay = input(15, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

/////////////////////////////////////
//* Put your strategy logic below *//
/////////////////////////////////////
RSIlength = input(1,title="RSI Period Length") 
price = close
vrsi = (rsi(price, RSIlength))
src = close
len = input(2, minval=1, title="Length")

up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

rsin = input(12)
sn = 100 - rsin
ln = 0 + rsin

// Put your long and short rules here
longLocic = crossunder(rsi, ln)
shortLogic = crossover(rsi, sn)

//////////////////////////
//* Strategy Component *//
//////////////////////////

isLong = input(true, "Longs Only")
isShort = input(false, "Shorts Only")
isFlip = input(false, "Flip the Opens")

long = longLocic
short = shortLogic

if isFlip
    long := shortLogic
    short := longLocic
else
    long := longLocic
    short := shortLogic

if isLong
    long := long
    short := na

if isShort
    long := na
    short := short
    
////////////////////////////////
//======[ Signal Count ]======//
////////////////////////////////

sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
sectionShorts = 0
sectionShorts := nz(sectionShorts[1])

if long
    sectionLongs := sectionLongs + 1
    sectionShorts := 0

if short
    sectionLongs := 0
    sectionShorts := sectionShorts + 1

//////////////////////////////
//======[ Pyramiding ]======//
//////////////////////////////

pyrl = input(2, "Pyramiding less than") // If your count is less than this number
pyre = input(1, "Pyramiding equal to") // If your count is equal to this number
pyrg = input(1000000, "Pyramiding greater than") // If your count is greater than this number

longCondition = long and sectionLongs <= pyrl or long and sectionLongs >= pyrg or long and sectionLongs == pyre ? 1 : 0 and vrsi < 20
shortCondition = short and sectionShorts <= pyrl or short and sectionShorts >= pyrg or short and sectionShorts == pyre ? 1 : 0

////////////////////////////////
//======[ Entry Prices ]======//
////////////////////////////////

last_open_longCondition = na
last_open_shortCondition = na
last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])
last_open_shortCondition := shortCondition ? close : nz(last_open_shortCondition[1])

////////////////////////////////////
//======[ Open Order Count ]======//
////////////////////////////////////

sectionLongConditions = 0
sectionLongConditions := nz(sectionLongConditions[1])
sectionShortConditions = 0
sectionShortConditions := nz(sectionShortConditions[1])

if longCondition
    sectionLongConditions := sectionLongConditions + 1
    sectionShortConditions := 0

if shortCondition
    sectionLongConditions := 0
    sectionShortConditions := sectionShortConditions + 1
    
///////////////////////////////////////////////
//======[ Position Check (long/short) ]======//
///////////////////////////////////////////////

last_longCondition = na
last_shortCondition = na
last_longCondition := longCondition ? time : nz(last_longCondition[1])
last_shortCondition := shortCondition ? time : nz(last_shortCondition[1])

in_longCondition = last_longCondition > last_shortCondition
in_shortCondition = last_shortCondition > last_longCondition

/////////////////////////////////////
//======[ Position Averages ]======//
/////////////////////////////////////

totalLongs = 0.0
totalLongs := nz(totalLongs[1])
totalShorts = 0.0
totalShorts := nz(totalShorts[1])
averageLongs = 0.0
averageLongs := nz(averageLongs[1])
averageShorts = 0.0
averageShorts := nz(averageShorts[1]) 

if longCondition
    totalLongs := totalLongs + last_open_longCondition
    totalShorts := 0.0

if shortCondition
    totalLongs := 0.0
    totalShorts := totalShorts + last_open_shortCondition

averageLongs := totalLongs / sectionLongConditions
averageShorts := totalShorts / sectionShortConditions

/////////////////////////////////
//======[ Trailing Stop ]======//
/////////////////////////////////

isTS = input(false, "Trailing Stop")
tsi = input(100, "Activate Trailing Stop Price (%). Divided by 100 (1 = 0.01%)") / 100 
ts = input(100, "Trailing Stop (%). Divided by 100 (1 = 0.01%)") / 100

last_high = na
last_low = na
last_high_short = na
last_low_short = na
last_high := not in_longCondition ? na : in_longCondition and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_high_short := not in_shortCondition ? na : in_shortCondition and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_shortCondition ? na : in_shortCondition and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
last_low_short := not in_longCondition ? na : in_longCondition and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = isTS and not na(last_high) and low <= last_high - last_high / 100 * ts and longCondition == 0 and last_high >= averageLongs + averageLongs / 100 * tsi
short_ts = isTS and not na(last_low) and high >= last_low + last_low / 100 * ts and shortCondition == 0 and last_low <= averageShorts - averageShorts/ 100 * tsi

///////////////////////////////
//======[ Take Profit ]======//
///////////////////////////////

isTP = input(true, "Take Profit")
tp = input(125, "Take Profit (%). Divided by 100 (1 = 0.01%)") / 100
long_tp = isTP and close > averageLongs + averageLongs / 100 * tp and not longCondition
short_tp = isTP and close < averageShorts - averageShorts / 100 * tp and not shortCondition

/////////////////////////////
//======[ Stop Loss ]======//
/////////////////////////////

isSL = input(true, "Stop Loss")
sl = input(140, "Stop Loss (%). Divided by 100 (1 = 0.01%)") / 100
long_sl = isSL and close < averageLongs - averageLongs / 100 * sl and longCondition == 0
short_sl = isSL and close > averageShorts + averageShorts / 100 * sl and shortCondition == 0

/////////////////////////////////
//======[ Close Signals ]======//
/////////////////////////////////

longClose = long_tp or long_sl or long_ts ? 1 : 0
shortClose = short_tp or short_sl or short_ts ? 1: 0

///////////////////////////////
//======[ Plot Colors ]======//
///////////////////////////////

longCloseCol = na
shortCloseCol = na
longCloseCol := long_tp ? purple : long_sl ? maroon : long_ts ? blue : longCloseCol[1]
shortCloseCol := short_tp ? purple : short_sl ? maroon : short_ts ? blue : shortCloseCol[1]
tpColor = isTP and in_longCondition ? purple : isTP and in_shortCondition ? purple : white
slColor = isSL and in_longCondition ? red : isSL and in_shortCondition ? red : white

//////////////////////////////////
//======[ Strategy Plots ]======//
//////////////////////////////////

plot(isTS and in_longCondition ? averageLongs + averageLongs / 100 * tsi : na, "Long Trailing Activate", blue, style=3, linewidth=2)
plot(isTS and in_longCondition and last_high >= averageLongs +  averageLongs / 100 * tsi ? last_high - last_high / 100 * ts : na, "Long Trailing", fuchsia, style=2, linewidth=3)
plot(isTS and in_shortCondition ? averageShorts - averageShorts/ 100 * tsi : na, "Short Trailing Activate", blue, style=3, linewidth=2)
plot(isTS and in_shortCondition and last_low <= averageShorts - averageShorts/ 100 * tsi ? last_low + last_low / 100 * ts : na, "Short Trailing", fuchsia, style=2, linewidth=3)
plot(isTP and in_longCondition and last_high < averageLongs + averageLongs / 100 * tp ? averageLongs + averageLongs / 100 * tp : na, "Long TP", tpColor, style=3, linewidth=2)
plot(isTP and in_shortCondition and last_low > averageShorts - averageShorts / 100 * tp ? averageShorts - averageShorts / 100 * tp : na, "Short TP", tpColor, style=3, linewidth=2)
plot(isSL and in_longCondition and last_low_short > averageLongs - averageLongs / 100 * sl ? averageLongs - averageLongs / 100 * sl : na, "Long SL", slColor, style=3, linewidth=2)
plot(isSL and in_shortCondition and last_high_short < averageShorts + averageShorts / 100 * sl ? averageShorts + averageShorts / 100 * sl : na, "Short SL", slColor, style=3, linewidth=2)

///////////////////////////////
//======[ Alert Plots ]======//
///////////////////////////////

// plot(longCondition, "Long", green)
// plot(shortCondition, "Short", red)
// plot(longClose, "Long Close", longCloseCol)
// plot(shortClose, "Short Close", shortCloseCol)

///////////////////////////////////
//======[ Reset Variables ]======//
///////////////////////////////////

if longClose or not in_longCondition
    averageLongs := 0
    totalLongs := 0.0
    sectionLongs := 0
    sectionLongConditions := 0

if shortClose or not in_shortCondition
    averageShorts := 0
    totalShorts := 0.0
    sectionShorts := 0
    sectionShortConditions := 0

////////////////////////////////////////////
//======[ Strategy Entry and Exits ]======//
////////////////////////////////////////////

if testPeriod()
    strategy.entry("Long", 1, when=longCondition)
    strategy.entry("Short", 0,  when=shortCondition)
    strategy.close("Long", when=longClose)
    strategy.close("Short", when=shortClose)
    


مزید