
اس حکمت عملی کا بنیادی خیال سسٹم سگنل کی متحرک پوزیشنوں کے مطابق پوزیشنوں کو بل مارکیٹ میں قدم بہ قدم قائم کرنا ہے تاکہ خطرے کو کنٹرول کیا جاسکے اور کم اوسط لاگت کی قیمت حاصل کی جاسکے۔
یہ حکمت عملی سب سے پہلے شروعاتی فنڈ اور ڈی سی اے کی فیصد تعیناتی کرتی ہے۔ ہر ک لائن کے اختتام پر ، یہ قیمت میں تبدیلی کے حساب سے ایڈجسٹ شدہ تعیناتی کا فیصد کم کرتی ہے۔ اگر قیمت بڑھتی ہے تو ، یہ فیصد کم کرتی ہے۔ اگر قیمت کم ہوتی ہے تو ، یہ فیصد بڑھ جاتی ہے۔ اس طرح ، قیمت کم ہونے پر پوزیشن میں اضافہ کیا جاسکتا ہے۔ پھر ، ایڈجسٹ شدہ فی صد اور بقایا فنڈ کے حساب سے آرڈر کا سائز۔ ہر ک لائن کے اختتام پر ، یہ کم آرڈر دیتا ہے جب تک کہ ابتدائی فنڈ ختم نہ ہوجائے۔
اس طرح ، یہ مارکیٹ میں اتار چڑھاؤ کے دوران ، خطرے پر قابو پانے اور کم اوسط لاگت کی قیمت حاصل کرسکتا ہے۔ اس کے ساتھ ہی ، یہ اوسط لاگت اور درمیانی قیمت کی بھی اعدادوشمار کرے گا ، جس سے موجودہ لاگت کا اندازہ لگایا جاسکتا ہے۔
یہ حکمت عملی مندرجہ ذیل فوائد رکھتی ہے:
متحرک طور پر پوزیشن میں اضافہ کیا جاسکتا ہے ، مارکیٹ میں کمی کے وقت پوزیشن میں اضافہ کیا جاسکتا ہے ، اور مارکیٹ میں اضافے کے وقت پوزیشن کو کم کیا جاسکتا ہے ، اس طرح خطرے پر قابو پایا جاسکتا ہے۔
اوسط لاگت سے کم اوسط لاگت حاصل کرنے سے زیادہ منافع بخش جگہ حاصل کرنے میں مدد ملتی ہے۔
یہ ایک اچھا خطرہ / منافع کا تناسب ہے جو بیل مارکیٹ میں اتار چڑھاؤ کے لئے موزوں ہے۔
ابتدائی فنڈز اور ڈی سی اے فیصد کو پہلے سے طے کیا جاسکتا ہے ، ہر بار جمع ہونے والے فنڈز کی مقدار کو کنٹرول کیا جاسکتا ہے ، اور زیادہ خطرہ سے بچا جاسکتا ہے۔
اوسط داخلے کی قیمت اور درمیانی قیمت کے اعدادوشمار فراہم کریں ، تاکہ داخلے کی خوبیوں کا اندازہ لگایا جاسکے۔
اس حکمت عملی میں کچھ خطرات بھی ہیں:
جب مارکیٹ میں تیزی سے کمی واقع ہوتی ہے تو ، یہ حکمت عملی مستقل طور پر پوزیشن میں رہتی ہے ، جس کے نتیجے میں بڑے پیمانے پر مالی نقصان کا سامنا کرنا پڑتا ہے۔ خطرے کو کنٹرول کرنے کے لئے نقصان کی روک تھام کی جاسکتی ہے۔
اگر مارکیٹ میں تیزی سے اضافہ ہوتا ہے تو ، اس حکمت عملی میں اضافہ کی شرح کم ہوجاتی ہے ، اور اس میں اضافے کے زیادہ تر مواقع ضائع ہوسکتے ہیں۔ اس وقت دیگر اشاروں کا استعمال کرتے ہوئے تیز رفتار ایل ایس آئی کی ضرورت ہوتی ہے۔
پیرامیٹرز کی غلط ترتیب بھی کچھ خطرہ لاحق کرتی ہے۔ ابتدائی رقم کی زیادہ مقدار یا ڈی سی اے کی زیادہ فیصد نقصان کو بڑھا سکتی ہے۔
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
اسٹاپ نقصان کی منطق شامل کی جاسکتی ہے ، جس سے بڑے پیمانے پر گرنے پر پوزیشنوں کو روک دیا جاسکتا ہے۔
ڈی سی اے فی صد کو اتار چڑھاؤ یا دیگر اشارے کی بنیاد پر متحرک طور پر ایڈجسٹ کیا جاسکتا ہے۔
اس کے علاوہ ، اس میں مشین لرننگ کے ماڈل شامل کیے جاسکتے ہیں جو قیمتوں میں ہونے والی تبدیلیوں کی پیش گوئی کرتے ہیں ، اور اس طرح انعامی فیصلوں کی رہنمائی کرتے ہیں۔
دوسرے تکنیکی اشارے کے ساتھ مل کر ، مارکیٹ کی ساخت کا اندازہ لگایا جاسکتا ہے ، اور ساخت کے موڑ کے مقام پر ذخیرہ بند کردیا جاسکتا ہے۔
فنڈ مینجمنٹ ماڈیول شامل کیا جاسکتا ہے ، جو اکاؤنٹ کے فنڈز کی صورتحال کے مطابق ہر جمع شدہ رقم کو متحرک طور پر ایڈجسٹ کرتا ہے۔
یہ حکمت عملی ایک بہت ہی عملی متحرک پوزیشننگ حکمت عملی ہے۔ یہ مارکیٹ میں اتار چڑھاؤ کے مطابق پوزیشن کی پوزیشن کو لچکدار طریقے سے ایڈجسٹ کرسکتی ہے ، اور بیل مارکیٹ میں کم اوسط لاگت کی قیمت حاصل کرسکتی ہے۔ اس کے ساتھ ہی ، اس میں خطرے کو کنٹرول کرنے کے لئے پیرامیٹرز کی ترتیب بھی شامل ہے۔ اگر دوسرے تکنیکی اشارے یا ماڈل کے ساتھ مل کر بہتر اثر حاصل کیا جائے۔ یہ حکمت عملی سرمایہ کاروں کے لئے موزوں ہے جو طویل مدتی سرمایہ کاری کی واپسی کی تلاش میں ہیں۔
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RWCS_LTD
//@version=5
strategy("DCA IN Calculator {RWCS}", overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02)
// User inputs
backtestStartDate = input(timestamp("1 Jan 2024"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
start_date = true
starting_capital = input.float(defval=5000, title="Starting Capital")
dca_allocation_percentage = input.int(defval=10, title="DCA Allocation Percentage")
// Calculate DCA allocation based on price change
price_change_percentage = ((close - close[1]) / close[1]) * 100
adjusted_allocation_percentage = close > close[1] ? dca_allocation_percentage - price_change_percentage : dca_allocation_percentage + price_change_percentage // If price action is negative, increase allocations
adjusted_allocation_percentage1 = dca_allocation_percentage - price_change_percentage // If price action is positive, reduce allocations
// Calculate order size based on adjusted allocation percentage
order_size = (adjusted_allocation_percentage / 100) * starting_capital
// Track remaining capital
var remaining_capital = starting_capital
// Long on the close of every bar
if true
// Ensure the order size doesn't exceed remaining capital or adjusted allocation
order_size := math.min(order_size, remaining_capital, adjusted_allocation_percentage / 100 * starting_capital)
// Ensure order size is not negative
order_size := math.max(order_size, 0)
strategy.entry("DCA", strategy.long, qty = order_size)
remaining_capital := remaining_capital - order_size
// Plot average entry price
var float total_entry_price = 0.0
var int total_signals = 0
if start_date
total_entry_price := total_entry_price + close
total_signals := total_signals + 1
avg_entry_price = total_entry_price / total_signals
// Calculate and plot median price
var float median_price = na
if start_date
var float sum_prices = 0.0
var int num_prices = 0
for i = 0 to bar_index
if (time[i] >= backtestStartDate)
sum_prices := sum_prices + close[i]
num_prices := num_prices + 1
median_price := sum_prices / num_prices
// Reset variables at the start of each day
if (dayofweek != dayofweek[1])
total_entry_price := 0.0
total_signals := 0
//table colors
borders_col = color.new(color.black, 90)
top_row_col = color.new(color.gray, 90)
size = input.string(defval='Normal', options=['Tiny', 'Small', 'Normal', 'Large'], title='Table size', inline='design', group='Table Design')
table_size = size == 'Tiny' ? size.tiny : size == 'Small' ? size.small : size == 'Normal' ? size.normal : size == 'Large' ? size.large : na
var tablee = table.new(position=position.top_right, columns=2, rows=3, frame_color=borders_col, frame_width=4, border_color=borders_col, border_width=4)
table.cell(tablee, 0, 0, "Average Entry Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 0, str.tostring(avg_entry_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 1, "Median Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 1, str.tostring(median_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 2, "Remaining Capital", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 2, str.tostring(remaining_capital, '#.##'), text_color=color.white, text_size=table_size)