یہ ڈالر لاگت اوسط (ڈی سی اے) میکانزم پر بیک ٹیسٹنگ کی حکمت عملی ہے جو ابتدائی اندراج کے بعد پوزیشنوں میں پیمانے پر ہے۔ یہ پہلے سے طے شدہ قیمت انحراف فیصد اور پرامڈائڈنگ قوانین کی بنیاد پر پوزیشن میں اضافہ کرسکتا ہے۔ اس حکمت عملی میں منافع لینے اور منافع لینے کے افعال بھی شامل ہیں۔
حکمت عملی سب سے پہلے بند قیمت پر ایک طویل پوزیشن کھولتی ہے جب یہ بیک ٹیسٹ ٹائم فریم کے اندر 0 سے اوپر ہوجاتا ہے۔ یہ انٹری قیمت بیس پرائس بو_لیول کے طور پر ریکارڈ کی جاتی ہے۔ اس کے بعد اگر کوئی سیفٹی آرڈر (تو) موجود نہیں ہے تو یہ موجودہ موم بتی پر تمام ممکنہ آؤٹ آرڈرز رکھتی ہے۔ خاص طور پر ، سیفٹی آرڈر کی قیمت کا حساب آخری سیفٹی آرڈر کی قیمت latest_so_level اور سیفٹی آرڈر مرحلہ پیمانے safe_order_step_scale کی بنیاد پر کیا جاتا ہے۔ یہ لوپ ہوتا ہے جب تک کہ زیادہ سے زیادہ سیفٹی آرڈر count_maxsafe_order تک نہیں پہنچ جاتا ہے۔
ہولڈنگ پوزیشنوں کے دوران ، اگر پوزیشن کا سائز 0 سے زیادہ ہے تو ، منافع لینے کی قیمت take_profit_level کی بنیاد پر بیس قیمت اور ہدف منافع لینے کے فیصد کی بنیاد پر حساب لگایا جاتا ہے۔ اگر ٹریلنگ منافع لینے کو غیر فعال کردیا گیا ہے تو ، یہ فکسڈ منافع لینے کی قیمت استعمال کی جاتی ہے۔ بصورت دیگر ، سب سے زیادہ قیمت ttp_max موم بتی کی اونچائی کی بنیاد پر اپ ڈیٹ کی جاتی ہے تاکہ ٹریلنگ منافع لینے کے لئے منافع لینے کی قیمت کو پیچھے چھوڑ دیا جاسکے۔
ڈی سی اے میکانزم کا استعمال کرتا ہے جب قیمت گرتی ہے تو سسٹم کے خطرات کو ہیج کرنے کے لئے لاگت کی بنیاد کو اوسط کرنے کے لئے.
مختلف اثاثوں اور تجارتی طرزوں کے لئے داخلہ کے قوانین اور منافع کی حکمت عملی کی لچکدار ترتیب کے لئے حسب ضرورت پیرامیٹرز کی حمایت کرتا ہے۔
قیمت کی کارروائی کی بنیاد پر منافع لینے کے لئے خود کار طریقے سے ایڈجسٹ کرنے کے لئے بلٹ ان ٹریلنگ منافع لینے کے افعال ہیں، قبل از وقت منافع لینے کے ٹرگر سے بچنے.
لچکدار بیک ٹیسٹ پیرامیٹر کی ترتیبات حکمت عملی کی کارکردگی کا اندازہ کرنے کے لئے مختلف ٹائم فریم ڈیٹا کی جانچ آسان بناتی ہیں۔
براہ راست بیک ٹیسٹ کے نتائج کا استعمال کرتے ہوئے اضافی کوڈنگ کے بغیر 3commas پر زندہ بوٹس تشکیل دے سکتے ہیں.
ڈی سی اے کو خطرہ ہے کہ اگر مارکیٹ میں کمی جاری رہی تو پوزیشنوں اور نقصانات میں مزید اضافہ ہوگا۔ معقول اہرام سازی کے قواعد کی ضرورت ہے۔
مقررہ فی صد منافع لینے کے لئے مارکیٹ کی اتار چڑھاؤ کو ایڈجسٹ کرنے کے قابل نہیں، ابتدائی یا دیر سے باہر نکلنے کا خطرہ.
بیک ٹیسٹ اوور فٹ کا خطرہ ، لین دین کے اخراجات وغیرہ سے متاثرہ براہ راست کارکردگی۔ مناسب تشخیص کی ضرورت ہے۔
پلیٹ فارم استحکام خطرات ناکام عملدرآمد. نگرانی کی ضرورت ہے.
مختلف اثاثوں کی اتار چڑھاؤ کی بنیاد پر قیمت کے انحراف کو متحرک طور پر ایڈجسٹ کریں تاکہ اہرام سازی کے قوانین کو بہتر بنایا جاسکے۔
زیادہ سائنسی منافع کا تناسب طے کرنے کے لئے اتار چڑھاؤ کے اشارے شامل کریں.
مخصوص اثاثوں کے ٹریڈنگ سیشنز کی بنیاد پر معقول بیک ٹسٹ ٹائم فریم مقرر کریں۔
نقصانات کو کم کرنے کے لئے سٹاپ نقصان کا تعارف کروانا جب پوزیشن کو نمایاں طور پر نیچے لایا جائے.
پیرامیٹرز کو متحرک طور پر بہتر بنانے کے لیے مشین لرننگ کا استعمال کریں۔
مجموعی طور پر یہ ایک بہت ہی عملی ڈی سی اے بیک ٹیسٹر ہے۔ یہ انٹری اور منافع لینے کے قواعد کے ل great بہت زیادہ تخصیص کی حمایت کرتا ہے۔ ٹریلنگ لے منافع بھی فکسڈ لے منافع کو اچھی طرح سے مکمل کرتا ہے۔ لچکدار بیک ٹیسٹ پیرامیٹرز مختلف اثاثوں اور ٹائم فریموں کی جانچ کی اجازت دیتے ہیں۔ پیرامیٹر کی مناسب ترتیب کے ساتھ ، یہ حکمت عملی ڈی سی اے کے ساتھ نظام کے خطرات کو ہیج کرکے اعلی مواقع والے اثاثوں کے لئے بہترین نتائج برآمد کرسکتی ہے۔ لیکن پلیٹ فارم کے استحکام کے ساتھ ساتھ براہ راست تجارت میں اہرام سازی اور منافع لینے جیسے خطرات پر بھی نظر رکھنی چاہئے۔ متحرک پیرامیٹرز ، اسٹاپ نقصان جیسی مزید اصلاحات اس کو انتہائی طاقتور ڈی سی اے ٹریڈنگ بوٹ بنا سکتی ہیں۔
/*backtest start: 2023-09-18 00:00:00 end: 2023-09-25 00:00:00 period: 15h basePeriod: 15m 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/ // © rouxam // Author: rouxam // Inspired by the original work of ericlin0122 //@version=4 // strategy("Backtesting 3commas DCA Bot", overlay=true, pyramiding=99, process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.1) // Strategy Inputs price_deviation = input(1.0, type=input.float, title='Price deviation to open safety orders (%)', minval=0.0, step=0.1)/100 take_profit = input(1.0, type=input.float, title='Target Take Profit (%)', minval=0.0, step=0.1)/100 ttp = input(0.5, type=input.float, title='Trailing Take Profit (%) [0 = Disabled]', minval=0.0, step=0.1)/100 base_order = input(10.0, type=input.float, title='base order') safe_order = input(20.0, type=input.float, title='safe order') safe_order_volume_scale = input(2.0, type=input.float, title='Safety order volume scale', step=0.1) safe_order_step_scale = input(1.5, type=input.float, title='Safety order step scale', step=0.1) max_safe_order = input(5, title='Max safe order', minval=1, maxval=99, step=1) // Date Inputs from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12) from_day = input(defval = 1, title = "From Day", minval = 1, maxval = 31) from_year = input(defval = 2021, title = "From Year") to_month = input(defval = 1, title = "To Month", minval = 1, maxval = 12) to_day = input(defval = 1, title = "To Day", minval = 1, maxval = 31) to_year = input(defval = 9999, title = "To Year") start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window finish = timestamp(to_year, to_month, to_day, 23, 59) // backtest finish window window = time >= start and time <= finish ? true : false // create function "within window of time" var bo_level = 0.0 var latest_so_level = 0.0 var next_so_level = 0.0 var ttp_active = false var ttp_max = 0.0 var ttp_level = 0.0 var take_profit_level = 0.0 if strategy.position_size <= 0.0 ttp_max := 0.0 ttp_active := false // First Position if(strategy.opentrades == 0 and window and close > 0) // Place Buy Order ASAP bo_level := open strategy.entry("BO", limit=bo_level, long=strategy.long, qty=base_order/bo_level) latest_so_level := open // Dollar Cost Averaging place_safety_orders = latest_so_level == bo_level if place_safety_orders // Placing all possible exit orders on that candle for i = 1 to max_safe_order next_so_level := latest_so_level * (1 - price_deviation * pow(safe_order_step_scale, i - 1)) so_name = "SO" + tostring(i) strategy.entry(so_name, long=strategy.long, limit=next_so_level, qty=safe_order * pow(safe_order_volume_scale, i - 1)/next_so_level) latest_so_level := next_so_level // Take Profit if strategy.position_size > 0 take_profit_level := strategy.position_avg_price * (1 + take_profit) if ttp <= 0.0 // No trailing take profit strategy.exit(id="TP", limit=take_profit_level) else // Trailing take profit if take_profit_level <= close ttp_max := max(high, ttp_max) ttp_active := true if ttp_active // Update exit order ttp_level := ttp_max * (1 - ttp) strategy.exit(id="TTP", stop=ttp_level)