
ہزاروں پائن اسکرپٹ کوڈ کو دیکھ کر ، اس ماسٹر ٹریڈنگ بوٹ کے پاس واقعی دو برش ہیں۔ مصنف نے ڈی سی اے (مقررہ سرمایہ کاری) کو ایک نئی اونچائی پر کھیل دیا ہے۔ یہ کوئی دماغ نہیں ہے ، بلکہ تکنیکی اشارے پر مبنی ذہین ذخیرہ اندوزی کا نظام ہے۔ ابتدائی پوزیشن 5٪ ہے ، اور ہر بار ڈی سی اے میں 2.5 فیصد اضافہ ہوتا ہے ، لیکن یہ 100٪ سے زیادہ نہیں ہوتا ہے۔ یہ تدریجی فنڈ مینجمنٹ روایتی اور اسی طرح کی محدود سرمایہ کاری سے زیادہ سائنسی ہے۔
کلیدی بات یہ ہے کہ ڈی سی اے کو متحرک کرنے کی شرائط: قیمتوں کو اوسط لاگت کی قیمت سے نیچے گرنا چاہئے ، اور اس کی کمی 2٪ + قدم × 4٪ کی متحرک کمی تک پہنچنی چاہئے۔ پہلی بار ڈی سی اے کو 2٪ ، دوسری بار 6٪ ، اور تیسری بار 10٪ گرنے کی ضرورت ہے۔ اس ڈیزائن سے چھوٹے اتار چڑھاو کے دوران بار بار پوزیشن میں اضافے سے گریز کیا جاتا ہے ، اور صرف حقیقی بحالی میں اضافہ ہوتا ہے۔
حکمت عملی کا استعمال 3 / 7 / 18 دورانیہ ای ایم اے کا استعمال کرتے ہوئے ایک رجحان سازی کا فریم ورک بناتا ہے ، جس میں 20 دورانیہ برن بینڈ کی قیمت کی پوزیشن کا تعین کرنے کے لئے استعمال کیا جاتا ہے ، 52/200/3 کا MACD پیرامیٹرز کی طرف مائل درمیانی اور طویل مدتی سگنل ، اور 14 دورانیہ RSI اوور بیئر اور اوور سیل فیصلے کے لئے استعمال کیا جاتا ہے۔ یہ مجموعہ تین جہتوں ، رجحان ، حرکیات اور اتار چڑھاؤ کو ڈھکتا ہے ، جو ایک ہی اشارے کی حکمت عملی سے زیادہ قابل اعتماد ہے۔
خریدنے کی شرائط سخت ہیں: فاسٹ ای ایم اے> سست ای ایم اے + ایم اے سی ڈی گولڈ فورک + قیمت بروئنگ کے وسط ٹریک سے اوپر + آر ایس آئی <65۔ یہ چار شرائط ایک ساتھ مل کر پوزیشن کھولنے کے لئے ملتی ہیں ، زیادہ تر جعلی سگنل کو فلٹر کرتی ہیں۔ فروخت کی شرائط بھی سخت ہیں: کم از کم 2٪ منافع + رجحان کا رخ موڑنا + ایم اے سی ڈی ڈیڈ فورک ہونا ضروری ہے۔ اس طرح کے “منافع بخش فروخت” کے ڈیزائن سے بے معنی نقصان سے بچنے سے بچتا ہے۔
کوڈ میں 100٪ اسٹاپ نقصان مبالغہ آرائی کی طرح لگتا ہے ، لیکن تبصرہ واضح طور پر کہتا ہے: “قیمت کو ٹرگر کرنے کے لئے 0 تک گرنا ہوگا”۔ یہ دراصل روایتی اسٹاپ نقصان کو بند کر دیتا ہے ، اور خطرے کا انتظام کرنے کے لئے مکمل طور پر تکنیکی اشارے اور منافع کے اہداف پر انحصار کرتا ہے۔ ڈی سی اے حکمت عملی کے لئے ، یہ ڈیزائن معقول ہے ، کیونکہ گرنے پر پوزیشن لگانے کے لئے روایتی اسٹاپ نقصان کا کوئی مطلب نہیں ہے۔
حقیقی خطرے کا کنٹرول 2٪ قیمت میں کمی کا اشارہ + متحرک ڈی سی اے کی کمی + منافع کو ختم کرنے کا مجبور کرنا ہے۔ حکمت عملی 500 دوروں میں سب سے زیادہ قیمتوں کا سراغ لگاتی ہے ، اور اگر موجودہ قیمت کی اونچائی سے 2٪ سے زیادہ گر جاتی ہے تو فروخت کا اشارہ ہوتا ہے۔ یہ فکسڈ اسٹاپ نقصان سے زیادہ لچکدار ہے اور مختلف مارکیٹ کے حالات کے مطابق ڈھال سکتا ہے۔
ہر خرید پر رقم = موجودہ حقدار × ڈی سی اے فیصد × موجودہ قیمت۔ یہ حقدار کی تناسب کے مطابق ڈیزائن کیا گیا ہے ، نہ کہ ایک مقررہ رقم ، حکمت عملی کو اکاؤنٹ میں اضافے کے ساتھ پوزیشن میں توسیع کرنے کی اجازت دیتی ہے۔ ابتدائی 5٪ پوزیشن ایک بار کے خطرے کو کنٹرول کرتی ہے ، جبکہ تدریجی طور پر پوزیشن میں اضافہ اس بات کو یقینی بناتا ہے کہ حقیقی مواقع کے سامنے کافی آگ ہو۔
سب سے زیادہ نفیس “just_sold” کی حیثیت کا انتظام ہے: فروخت ہونے کے بعد فوری طور پر دوبارہ نہیں خریدا جائے گا ، جب تک کہ ایک مضبوط بیسکن سگنل نہ ہو۔ اس سے ہلچل والی مارکیٹ میں بار بار تجارت سے گریز ہوتا ہے ، اس سے فیس کی لاگت اور جذباتی کارروائی کا خطرہ کم ہوتا ہے۔
یہ حکمت عملی درمیانی اور طویل مدتی اوپر کی طرف جانے والے رجحانات میں واپسی کی خریداری کے لئے موزوں ہے ، اور عام طور پر ایک گھوڑے کی مارکیٹ یا طویل مدتی افقی میں کام کرتی ہے۔ MACD کی 52⁄200 پیرامیٹر کی ترتیب نے فیصلہ کیا کہ یہ ایک بڑی سطح کے رجحان کے فیصلے کے لئے موزوں ہے ، جو مختصر لائن تجارت کے لئے موزوں نہیں ہے۔
آر ایس آئی نے 30 کے بجائے 25 کی حد کو فروخت کیا ، جس سے یہ ظاہر ہوتا ہے کہ اسٹریٹجک تعصب گہری واپسیوں میں خریدنے کے لئے ہے۔ یہ ڈیزائن بیل مارکیٹ میں بہتر خرید پوائنٹس حاصل کرسکتا ہے ، لیکن یہ “بیئر مارکیٹ میں چھریوں کو پکڑ سکتا ہے۔” یہ تجویز کی جاتی ہے کہ اس کو واضح عروج پر استعمال کیا جائے ، مارکیٹ کے اوپری حصے یا نیچے کی طرف جانے سے گریز کریں۔
حکمت عملی کا نظریاتی منطق کامل ہے ، لیکن عملی کارکردگی کا انحصار خاص طور پر ریٹائرمنٹ کے اعداد و شمار پر ہے۔ اہم توجہ کی ضرورت ہے: کیا زیادہ سے زیادہ واپسی قابل قبول حد میں ہے ، کیا مسلسل نقصانات کی تعداد بہت زیادہ ہے ، مختلف مارکیٹ کے حالات میں کارکردگی میں فرق ہے۔
ڈی سی اے حکمت عملی کی فطری خصوصیت یہ ہے کہ اس کی کمی کے دوران اس کی پوزیشن بڑھتی رہے گی ، جس کا مطلب ہے کہ اکاؤنٹ کی خالص قیمت پہلے گرتی ہے اور پھر بڑھتی ہے۔ سرمایہ کاروں کو کافی ذہنی برداشت اور فنڈ ریزرو کی ضرورت ہے۔ یہ تجویز کیا گیا ہے کہ پہلے چھوٹے فنڈز پر جانچ کی جائے ، حکمت عملی کی خصوصیات کی تصدیق کے بعد سرمایہ کاری کو آہستہ آہستہ بڑھایا جائے۔
خطرے سے متعلق اشارہ: کسی بھی مقدار کی حکمت عملی میں نقصان کا خطرہ ہوتا ہے۔ تاریخ کی واپسی مستقبل کے منافع کی نمائندگی نہیں کرتی ہے۔ اس کے لئے سخت خطرے کے انتظام اور مناسب فنڈز کی تخصیص کی ضرورت ہے۔
/*backtest
start: 2024-10-20 00:00:00
end: 2025-10-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/
// This Pine Script™ code is subject to the terms of the MPL 2.0 at https://mozilla.org/MPL/2.0/
// © MTB by Neurodoc
// By Nicolás Astorga
//@version=5
strategy("Master Trading Bot by Neurodoc",
shorttitle="MTB Adaptation",
overlay=true,
initial_capital=10000,
pyramiding=100,
commission_value=0.1,
commission_type=strategy.commission.percent,
default_qty_type = strategy.cash)
// —————— CONFIGURATION (Based on ve.env) ——————
// Purchase and DCA Percentages
var GRP_DCA = "DCA Configuration"
start_percentage = input.float(5.0, "Initial Buy Percentage (%)", group=GRP_DCA)
increment_percentage = input.float(2.5, "Increment per DCA Buy (%)", group=GRP_DCA)
max_percentage = input.float(100.0, "Maximum Buy Percentage (%)", group=GRP_DCA)
min_profit_percent = input.float(2.0, "Minimum Profit for Sell (%)", group=GRP_DCA)
// Stop Loss and Drop Signal
var GRP_RISK = "Risk Management"
stop_loss_percent = input.float(100.0, "Stop Loss (%)", group=GRP_RISK, tooltip="A value of 100 means there’s no real stop loss, as price would have to go to 0.")
drop_percent_signal = input.float(2.0, "Price Drop for Sell Signal (%)", group=GRP_RISK)
// Indicator Parameters
var GRP_INDICATORS = "Indicator Parameters"
ema_fast_period = input.int(3, "Fast EMA", group=GRP_INDICATORS)
ema_mid_period = input.int(7, "Medium EMA", group=GRP_INDICATORS)
ema_slow_period = input.int(18, "Slow EMA", group=GRP_INDICATORS)
bb_length = input.int(20, "Bollinger Bands Length", group=GRP_INDICATORS)
bb_stddev = input.float(2.0, "BB Standard Deviation", group=GRP_INDICATORS)
macd_fast = input.int(52, "MACD Fast", group=GRP_INDICATORS)
macd_slow = input.int(200, "MACD Slow", group=GRP_INDICATORS)
macd_signal = input.int(3, "MACD Signal", group=GRP_INDICATORS)
rsi_length = input.int(14, "RSI Length", group=GRP_INDICATORS)
rsi_oversold_threshold = input.int(25, "RSI Oversold (for divergence)", group=GRP_INDICATORS)
// —————— INDICATOR CALCULATIONS ——————
// EMAs
ema_fast = ta.ema(open, ema_fast_period)
ema_mid = ta.ema(open, ema_mid_period)
ema_slow = ta.ema(open, ema_slow_period)
// Bollinger Bands
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bb_length, bb_stddev)
bb_width = (bb_upper - bb_lower) / bb_middle * 100
is_bb_expanding = bb_width > bb_width[1]
// MACD
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// RSI
rsi = ta.rsi(close, rsi_length)
// Price drop signal from highest price (similar to `cummax` in Python)
highest_price = ta.highest(high, 500) // Using 500-bar lookback to approximate the high
price_drop_percent = ((highest_price - close) / highest_price) * 100
is_price_drop_signal = price_drop_percent >= drop_percent_signal
// —————— TRADING LOGIC ——————
// Trend Conditions
is_bullish = ema_fast > ema_slow and macd_line > signal_line and close > bb_middle
is_bearish = ema_fast < ema_slow and macd_line < signal_line and close < bb_middle
is_weakening = rsi < rsi[1]
// Variables to manage strategy state
var bool just_sold = false
var int dca_step = 0
// Determine next buy percentage of capital
dca_buy_percentage = start_percentage + (dca_step * increment_percentage)
if dca_buy_percentage > max_percentage
dca_buy_percentage := max_percentage
avg_buy_price = strategy.position_avg_price
// Initial Long Condition
long_signal_initial = strategy.position_size == 0 and is_bullish and macd_line > signal_line and rsi < 65
// DCA Condition
price_drop_from_avg = ((avg_buy_price - close) / avg_buy_price) * 100
dca_required_drop = 2.0 + (dca_step * 4.0) // DCA price drop start and increment logic
long_signal_dca = strategy.position_size > 0 and is_bearish and close < avg_buy_price and price_drop_from_avg >= dca_required_drop
// Manage `just_sold` state
if strategy.position_size > 0
just_sold := false
if strategy.position_size == 0 and strategy.position_size[1] > 0
just_sold := true
// Avoid immediate repurchase after sell unless bullish condition is strong
long_signal = (just_sold and is_bullish) ? long_signal_initial : (not just_sold ? (long_signal_initial or long_signal_dca) : false)
// Sell (Close) Condition
current_profit_percent = ((close - avg_buy_price) / avg_buy_price) * 100
has_min_profit = current_profit_percent >= min_profit_percent
stop_loss_price = avg_buy_price * (1 - stop_loss_percent / 100)
is_stoploss_triggered = close <= stop_loss_price
short_signal = strategy.position_size > 0 and has_min_profit and ((is_bearish and is_weakening) or is_price_drop_signal or is_stoploss_triggered or (macd_line < signal_line))
// —————— ORDER EXECUTION ——————
if (long_signal)
// Calculate how much MONEY (USDT) to invest in this trade
cash_to_invest = (strategy.equity * dca_buy_percentage / 100) / close
strategy.entry("Buy", strategy.long, qty=cash_to_invest)
dca_step := dca_step + 1
if (short_signal)
strategy.close_all(comment="Sell")
dca_step := 0 // Reset DCA counter after selling
// —————— VISUALIZATION ——————
// Background color by trend
bgcolor(is_bullish ? color.new(color.green, 90) : is_bearish ? color.new(color.red, 90) : na)
// Plot EMAs and Bollinger Bands
plot(ema_fast, "Fast EMA", color.blue)
plot(ema_slow, "Slow EMA", color.orange)
p1 = plot(bb_upper, "Upper BB", color=color.gray)
p2 = plot(bb_lower, "Lower BB", color=color.gray)
fill(p1, p2, color=color.new(color.gray, 90))
// Plot average buy price when in position
plot(strategy.position_size > 0 ? avg_buy_price : na, "Average Buy Price", color.yellow, style=plot.style_linebr, linewidth=2)
// Plot Take Profit target
plot(strategy.position_size > 0 ? avg_buy_price * (1 + min_profit_percent / 100) : na, "Sell Price (TP)", color.aqua, style=plot.style_linebr, linewidth=2)
// Plot Stop Loss level
plot(strategy.position_size > 0 ? stop_loss_price : na, "Stop Loss", color.fuchsia, style=plot.style_linebr, linewidth=2)