موونگ سٹاپ نقصان ایم اے حکمت عملی کے بعد رجحان

مصنف:چاؤ ژانگ، تاریخ: 2023-10-10 10:36:16
ٹیگز:

جائزہ

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

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

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

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

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

فوائد

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

خطرات

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

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

اصلاح

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

خلاصہ

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


/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
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 - 1m 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(6,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(14)
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(33, "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(55, "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)
    


مزید