تبدیلی کی شرح پر مبنی مقداری حکمت عملی


تخلیق کی تاریخ: 2023-12-12 15:56:56 آخر میں ترمیم کریں: 2023-12-12 15:56:56
کاپی: 0 کلکس کی تعداد: 655
1
پر توجہ دیں
1621
پیروکار

تبدیلی کی شرح پر مبنی مقداری حکمت عملی

جائزہ

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

حکمت عملی کا اصول

داخلے کے قواعد

  • اگر آر او سی> 0 ہے تو ، زیادہ کام کریں۔ اگر آر او سی < 0 ہے تو ، خالی کریں۔ آر او سی کے اشارے کے مثبت منفی کا استعمال کرکے مارکیٹ کی سمت کا فیصلہ کریں۔
  • اس کے علاوہ ، یہ بھی کہا گیا ہے کہ جب آر او سی ایک ہی طرف دو دن تک رہتا ہے تو اس کے بعد ہی ٹریڈنگ سگنل جاری کیا جاتا ہے ، تاکہ ہلچل کو فلٹر کیا جاسکے۔

سٹاپ نقصان کے قواعد

اسٹاپ نقصان کا 6٪ مقرر کیا گیا ہے۔ جب اسٹاپ نقصان کا سبب بنتا ہے تو ، پوزیشن کی سمت تبدیل کریں۔ اس کا مطلب یہ ہے کہ ہم شاید تجارت کے غلط حصے میں ہیں اور بروقت اسٹاپ نقصان کی واپسی کی ضرورت ہے۔

انسداد بلبل کا نظام

اگر آر او سی 200 سے زیادہ ہے تو ، اس کو ایک بلبلا قرار دیا گیا ہے۔ جب آر او سی بلبلے کے نیچے واپس آتا ہے تو ، ایک خالی سگنل پیدا ہوتا ہے۔ اس کے علاوہ ، بلبلے کو کم از کم ایک ہفتہ تک جاری رکھنے کی ضرورت ہے۔

فنڈز کا انتظام

فکسڈ پوزیشن + اضافے کا استعمال کریں۔ ہر \( 400 میں اضافہ یا کمی ، \) 200 کی پوزیشن میں اضافہ یا کمی۔ اس طرح منافع کو جمع کرنے کے لئے استعمال کیا جاسکتا ہے تاکہ زیادہ سے زیادہ منافع حاصل کیا جاسکے ، لیکن اس میں واپسی میں بھی اضافہ ہوا ہے۔

طاقت کا تجزیہ

یہ ایک طویل مدتی رجحانات کی حکمت عملی ہے۔ اس کے فوائد ہیں:

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

خطرے کا تجزیہ

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

  1. آر او سی اشارے جھٹکے سے متاثر ہوتے ہیں ، غلط سگنل پیدا کرتے ہیں۔ آپ کو دوسرے اشارے کے ساتھ مجموعہ فلٹرنگ پر غور کرنا چاہئے۔
  2. ٹرانزیکشن فیس کو مدنظر نہ رکھتے ہوئے ، اصل استعمال میں منافع کم ہے۔
  3. اگر آپ نے فوبیا سے بچاؤ کے پیرامیٹرز کو غیر مناسب طریقے سے ترتیب دیا ہے تو ، آپ کو آسانی سے غلطی کا سامنا کرنا پڑے گا۔
  4. فکسڈ پوزیشنز + اضافہ کا طریقہ نقصان کے وقت واپسی کو بڑھا دیتا ہے۔

اصلاح کی سمت

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

  1. دوسرے اشارے کے فیصلے کو شامل کریں ، اور ٹریڈنگ سسٹم تشکیل دیں تاکہ غلط سگنل کو فلٹر کیا جاسکے۔ مثال کے طور پر ، اشارے شامل کریں جیسے اوسط لائن ، اتار چڑھاؤ کی شرح وغیرہ۔
  2. فوم پروف پیرامیٹرز کو بہتر بنائیں ، فوم کی شناخت کا ایک زیادہ درست طریقہ کار ترتیب دیں۔
  3. فکسڈ پوزیشنوں اور بڑھتی ہوئی پیرامیٹرز کو ایڈجسٹ کریں تاکہ بہتر رسک / منافع کا توازن حاصل کیا جاسکے۔
  4. خود کار طریقے سے نقصان کو روکنے کا طریقہ کار شامل کریں۔ جب بڑے نقصانات ہوں تو خود کار طریقے سے نقصان کو روکیں۔
  5. ٹرانزیکشن فیس کے اثرات کو مدنظر رکھتے ہوئے ، زیادہ عملی داخلے کے معیار طے کریں۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 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/
// © gsanson66


//This strategy use the Rate of Change (ROC) of the closing price to send enter signal. 
//@version=5
strategy("RATE OF CHANGE BACKTESTING", shorttitle="ROC BACKTESTING", overlay=false, precision=3, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)


//--------------------------------FUNCTIONS-----------------------------------//

//@function Displays text passed to `txt` when called.
debugLabel(txt, color, loc) =>
    label.new(bar_index, loc, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)

//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)


//----------------------------------USER INPUTS----------------------------------//

//Technical parameters
rocLength = input.int(defval=365, minval=0, title='ROC Length', group="Technical parameters")
bubbleValue = input.int(defval=200, minval=0, title="ROC Bubble signal", group="Technical parameters")
//Risk management
stopLossInput = input.float(defval=10, minval=0, title="Stop Loss (in %)", group="Risk Management")
//Money management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2017 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")


//-------------------------------------VARIABLES INITIALISATION-----------------------------//

roc = (close/close[rocLength] - 1)*100
midlineConst = 0
var bool inBubble = na
bool shortBubbleCondition = na
equity = strategy.equity - strategy.openprofit
strategy.initial_capital = 50000
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
bool inRange = na


//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//

//Checking if the date belong to the range
inRange := true

//Checking if we are in a bubble
if roc > bubbleValue and not inBubble
    inBubble := true

//Checking if the bubble is over
if roc < 0 and inBubble
    inBubble := false

//Checking the condition to short the bubble : The ROC must be above the bubblevalue for at least 1 week
if roc[1]>bubbleValue and roc[2]>bubbleValue and roc[3]>bubbleValue and roc[4]>bubbleValue and roc[5]>bubbleValue and roc[6]>bubbleValue and roc[7]>bubbleValue
    shortBubbleCondition := true

//Checking performances of the strategy
if equity > capital_ref + fixedRatio
    spread = (equity - capital_ref)/fixedRatio
    nb_level = int(spread)
    increasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder + increasingOrder
    capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
    spread = (capital_ref - equity)/fixedRatio
    nb_level = int(spread)
    decreasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder - decreasingOrder
    capital_ref := capital_ref - nb_level*fixedRatio

//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
    debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116), loc=roc)
    strategy.close_all()


//-------------------------------LONG/SHORT CONDITION-------------------------------//

//Long condition
//We reduce noise by taking signal only if the last roc value is in the same side as the current one
if (strategy.position_size<=0 and ta.crossover(roc, midlineConst)[1] and roc>0 and inRange)
    //If we were in a short position, we pass to a long position
    qty = cashOrder/close
    strategy.entry("Long", strategy.long, qty)
    stopLoss = close * (1-stopLossInput/100)
    strategy.exit("Long Risk Managment", "Long", stop=stopLoss)

//Short condition
//We take a short position if we are in a bubble and roc is decreasing
if (strategy.position_size>=0 and ta.crossunder(roc, midlineConst)[1] and roc<0 and inRange) or 
     (strategy.position_size>=0 and inBubble and ta.crossunder(roc, bubbleValue) and shortBubbleCondition and inRange)
    //If we were in a long position, we pass to a short position
    qty = cashOrder/close
    strategy.entry("Short", strategy.short, qty)
    stopLoss = close * (1+stopLossInput/100)
    strategy.exit("Short Risk Managment", "Short", stop=stopLoss)


//--------------------------------RISK MANAGEMENT--------------------------------------//

//We manage our risk and change the sense of position after SL is hitten
if strategy.position_size == 0 and inRange
    //We find the direction of the last trade
    id = strategy.closedtrades.entry_id(strategy.closedtrades-1)
    if id == "Short"
        qty = cashOrder/close
        strategy.entry("Long", strategy.long, qty)
        stopLoss = close * (1-stopLossInput/100)
        strategy.exit("Long Risk Managment", "Long", stop=stopLoss)
    else if id =="Long"
        qty = cashOrder/close
        strategy.entry("Short", strategy.short, qty)
        stopLoss = close * (1+stopLossInput/100)
        strategy.exit("Short Risk Managment", "Short", stop=stopLoss)


//---------------------------------PLOTTING ELEMENTS---------------------------------------//

//Plotting of ROC
rocPlot = plot(roc, "ROC", color=#7E57C2)
midline = hline(0, "ROC Middle Band", color=color.new(#787B86, 25))
midLinePlot = plot(0, color = na, editable = false, display = display.none)
fill(rocPlot, midLinePlot, 40, 0, top_color = strategy.position_size>0 ? color.new(color.green, 0) : strategy.position_size<0 ? color.new(color.red, 0) : na, bottom_color = strategy.position_size>0 ? color.new(color.green, 100) : strategy.position_size<0 ? color.new(color.red, 100) : na,  title = "Positive area")
fill(rocPlot, midLinePlot, 0,  -40,  top_color = strategy.position_size<0 ? color.new(color.red, 100) : strategy.position_size>0 ? color.new(color.green, 100) : na, bottom_color = strategy.position_size<0 ? color.new(color.red, 0) : strategy.position_size>0 ? color.new(color.green, 0) : na, title = "Negative area")