এই কৌশলটি ডলার খরচ গড়ক (ডিসিএ) নীতি ব্যবহার করে স্টক ট্রেডিংয়ের জন্য একটি পুনরাবৃত্তিমূলক পদ্ধতি। এটি প্রাথমিক খোলার পরে, সেট করা দামের বিচ্যুতি শতাংশ এবং স্টকিংয়ের সংখ্যা নিয়ম অনুসারে অবস্থান যুক্ত করতে পারে। এছাড়াও, কৌশলটিতে স্টপ-অফ কৌশল এবং ট্র্যাক-অফ-স্টপ বৈশিষ্ট্য রয়েছে।
এই কৌশলটি প্রথমে পুনরাবৃত্তির সময় উইন্ডোতে অবিলম্বে অবস্থানটি খুলবে, যখন বন্ধের দাম 0 এর চেয়ে বেশি হয়, তখন খোলার দামটি বেস প্রাইস bo_level হিসাবে কাজ করে। তারপরে, যদি কোনও সুরক্ষিত আদেশ না থাকে (((), তবে সেট করা দামের শতাংশের বিপরীতে এবং কতবার সংরক্ষণ করা হয় তার উপর ভিত্তি করে সম্ভাব্য প্লেইন অর্ডারগুলি সমস্ত বর্তমান স্তরে রাখা হবে। বিশেষত, সুরক্ষিত আদেশের দামটি সর্বশেষতম সুরক্ষিত আদেশের দামের উপর ভিত্তি করে তৈরি করা হবে।
পজিশন ধারণের পর্যায়ে, যদি পজিশনের পরিমাণ 0 এর চেয়ে বেশি হয় তবে বেসিক মূল্য এবং লক্ষ্য স্টপ শতাংশের উপর ভিত্তি করে স্টপ মূল্য take_profit_level গণনা করা হবে। যদি ট্র্যাকিং স্টপ ফাংশনটি বন্ধ থাকে তবে এই ফিক্সড স্টপ মূল্যটি ব্যবহার করা হবে; অন্যথায় স্টপ ট্র্যাকিংয়ের সর্বোচ্চ মূল্যটি টপটপ_ম্যাক্স ক্রমাগত আপডেট করা হবে এবং স্টপ মূল্যটি সংশোধন করা হবে।
ডিসিএ কৌশল ব্যবহার করে, দামের পতনের পরে স্বয়ংক্রিয়ভাবে পজিশন বাড়ানো যায়, গড় পজিশন হোল্ডিং ব্যয় হ্রাস করা যায়, এবং সিস্টেমিক ঝুঁকি হিজার্ড করা যায়।
কাস্টম প্যারামিটার সমর্থন করে, পজিশন খোলার নিয়ম এবং স্টপ স্টপ কৌশলগুলি বিভিন্ন জাত এবং ট্রেডিং শৈলীর উপর নির্ভর করে নমনীয়ভাবে কনফিগার করা যায়।
বিল্ট-ইন ট্র্যাকিং স্টপ ফাংশন, যা স্টপ অবস্থানকে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করতে পারে, যাতে স্টপটি খুব তাড়াতাড়ি ট্রিগার না হয়।
প্রতিক্রিয়া প্যারামিটারগুলি নমনীয়ভাবে সেট করা হয়েছে যাতে বিভিন্ন সময়কালের ডেটা পরীক্ষা করা এবং কৌশলটির কার্যকারিতা মূল্যায়ন করা যায়।
3commas প্ল্যাটফর্মের সাথে মিলিত, আপনি সরাসরি ফিডব্যাকের ফলাফলগুলি ব্যবহার করে কোনও অতিরিক্ত বিকাশের প্রয়োজন ছাড়াই একটি বাস্তব রোবট কনফিগার করতে পারেন।
ডিসিএ কৌশলটি ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ ঝুঁকিপূর্ণ
ফিক্সড শতাংশ স্টপ বাজার অস্থিরতার সাথে সামঞ্জস্য করতে পারে না, এবং এটি অকাল বন্ধ বা স্টপ বাজার ছেড়ে যেতে পারে। স্টপ ট্র্যাকিং কনফিগার করা প্রয়োজন।
এই ঝুঁকির মূল্যায়ন করা প্রয়োজন।
এজন্য এক্সচেঞ্জ এবং থ্রি কমাসের সিস্টেমের স্থিতিশীলতার দিকে নজর দেওয়া প্রয়োজন, যাতে পরিকল্পিত লেনদেনের ব্যর্থতা এড়ানো যায়।
বিভিন্ন জাতের দামের পরিবর্তনশীলতার উপর ভিত্তি করে দামের শতকরা হার থেকে বিচ্যুত হতে পারে, আমানত বাড়ানোর নিয়মকে অপ্টিমাইজ করা যায়।
একটি বৈজ্ঞানিক স্টপ শতাংশ নির্ধারণের জন্য একটি অস্থিরতা হার সূচক একত্রিত করা যেতে পারে।
একটি যুক্তিসঙ্গত রিটার্নিং সময় উইন্ডো সেট করা যেতে পারে, যা নির্দিষ্ট জাতের জন্য বিভিন্ন লেনদেনের সময় নির্ধারণ করে।
একটি ক্ষতি বন্ধ করার কৌশল প্রবর্তন করা যেতে পারে, যখন একটি বড় ক্ষতি হয় তখন ক্ষতি বন্ধ করে দেওয়া যায়।
মেশিন লার্নিং অ্যালগরিদমের সাথে মিলিত হতে পারে, যাতে কৌশলটি গতিশীলভাবে প্যারামিটারগুলিকে অনুকূলিত করতে পারে।
এই কৌশলটি সামগ্রিকভাবে একটি খুব ব্যবহারিক ডিসিএ রিটার্নিং প্রোগ্রাম। এটি ভাল কাস্টম প্যারামিটার সেটিং সমর্থন করে, পজিশন খোলার এবং স্টপিংয়ের নিয়মগুলি নমনীয়ভাবে কনফিগার করতে পারে। একই সাথে বিল্ট-ইন ট্র্যাকিং স্টপিং ফাংশনটি ফিক্সড স্টপিংয়ের অভাব পূরণ করে। রিটার্নিং প্যারামিটারগুলিও খুব নমনীয়, বিভিন্ন জাতের এবং সময়কালের ডেটা পরীক্ষা করতে পারে। যদি প্যারামিটারগুলি সঠিকভাবে সেট করা হয়, তবে ট্রেডিংয়ের অনেক সুযোগের জাতের মধ্যে, ডিসিএ কৌশলটি ব্যবহার করে সিস্টেমের ঝুঁকিগুলিকে সুরক্ষা দেয়, এই কৌশলটি খুব ভাল রিটার্নিং ফলাফল অর্জন করতে পারে। তবে রিয়েল-ডিস্কের সময় পজিশন এবং স্টপিংয়ের ঝুঁকিগুলি সম্পর্কে সতর্কতা অবলম্বন করা এবং সিস্টেমের স্থিতিশীলতার বিষয়েও মনোযোগ দেওয়া দরকার। প্যারামিটার সেটিং এবং স্টপিং কৌশলটি অনুকূলিত করা অব্যাহত থাকলে, এই প্রোগ্রামটি একটি খুব শক্তিশালী সিএডিডি মেশিন ব্যবসায়ী হতে পারে।
/*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)