
ডায়নামিক গ্রিড ট্রেডিং কৌশলটি গতিশীল গ্রিড ট্রেডিং অঞ্চল সেট করে, চলমান গড় এবং এর উত্থান-পতন গণনা করে। যখন দামগুলি গ্রিডের অঞ্চলটি ভেঙে দেয়, তখন স্থির ব্যবধানের গ্রিড লাইন অনুসারে ট্রেডিং সংকেত প্রেরণ করে এবং মুনাফা অর্জন করে।
এই কৌশলটি প্রথমে n সময়ের জন্য নির্ধারিত চলমান গড় গণনা করে এবং চলমান গড়ের উপর থেকে নীচে চলে যায়।(1 + ইনপুট পরামিতি std), নিম্নরেখাটি হল চলমান গড়(1 - ইনপুট প্যারামিটার std) ৷ এইভাবে একটি গতিশীলভাবে সমন্বিত লেনদেনের ব্যাপ্তি তৈরি করা যায়৷
এর পর, আমরা একটি গ্রিড লাইন সংজ্ঞায়িত করি, যার মধ্যে m বারের সমান দূরত্ব রয়েছে। যখন দাম বৃদ্ধি পায় এবং একটি গ্রিড লাইন অতিক্রম করে, তখন এই গ্রিড লাইনে একটি মাল্টি-সিগন্যাল প্রেরণ করা হয়। যখন দাম হ্রাস পায় এবং একটি গ্রিড লাইন অতিক্রম করে, তখন এই গ্রিড লাইনের সাথে সামঞ্জস্যপূর্ণ উপরের গ্রিড লাইনে একটি সমতল-বন্দর সংকেত প্রেরণ করা হয়। এই বিপরীত ক্রিয়াকলাপের মাধ্যমে, দামের ওঠানামা করার সময় লাভ করা যায়।
বিশেষ করে, আমরা একটি bool-type array order_array ব্যবহার করে প্রতিটি গ্রিড লাইনের লেনদেনের অবস্থা রেকর্ড করি। যখন একটি গ্রিড লাইন একাধিক শর্তে ট্রিগার করা হয়, তখন order_array এর সংশ্লিষ্ট অবস্থাটি সত্য হিসাবে স্থাপন করা হয়, যা নির্দেশ করে যে গ্রিড লাইনটি একটি পজিশন ধারণ করেছে। যখন দাম পড়ে তখন গ্রিড লাইনটি ভেঙে যায়, তখন order_array এর সংশ্লিষ্ট উপরের গ্রিড লাইনের অবস্থাটি মিথ্যা হিসাবে স্থাপন করা হয়, একটি সমতল পজিশন সংকেত প্রেরণ করা হয়।
এই কৌশলটির কিছু সুবিধা রয়েছেঃ
মুভিং এভারেজ ব্যবহার করে ডায়নামিক অ্যাডজাস্টমেন্টের জন্য ট্রেডিং ব্রেকডাউন তৈরি করা হয়, যা বাজারের অস্থিরতার সাথে সামঞ্জস্যপূর্ণ, যাতে কৌশলটি বাজারের জন্য আরও উপযুক্ত হয়।
গ্রিডের নকশাটি স্বয়ংক্রিয়ভাবে স্টপ লস কমানোর জন্য ব্যবহার করা হয়, যা চরম পরিস্থিতিতে ক্ষতির বিস্তারকে প্রতিরোধ করে।
গ্রিড সংখ্যা এবং তহবিল বন্টন সমান ব্যবধান এবং সমান পরিমাণ বন্টন গ্রহণ করে, একক পজিশনের আকার নিয়ন্ত্রণ করতে এবং একক পজিশনের ঝুঁকি হ্রাস করতে পারে।
আপনি যদি আপনার ট্রেডিং সিস্টেমটি সঠিকভাবে সেট করে থাকেন তবে আপনি আপনার ট্রেডিং সিস্টেমটি সঠিকভাবে পরিচালনা করতে পারবেন।
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
যখন বাজার দীর্ঘস্থায়ী দুর্বলতা দেখা দেয় এবং গ্রিড লাইনটি ভেঙে ফেলতে পারে না, তখন কৌশলটি দিকনির্দেশহীন ঝড়ের ব্যবসায়ের মধ্যে পড়ে যায়, অতিরিক্ত ফাঁকা বিনিময় অ্যাকাউন্টের তহবিল হ্রাস করতে পারে।
নির্বাচিত প্যারামিটারগুলি std এবং গ্রিডের সংখ্যা সম্পূর্ণরূপে যুক্তিসঙ্গত নাও হতে পারে এবং বিভিন্ন লেনদেনের জাতের বিশ্লেষণের ভিত্তিতে এটি নির্ধারণ করা দরকার। যদি প্যারামিটারগুলি ভুলভাবে সেট করা হয় তবে লেনদেনের ব্যাপ্তি এবং গ্রিডটি খুব বড় বা খুব ছোট হবে, যা কৌশলটির কার্যকারিতা প্রভাবিত করবে।
কৌশলটি কিছু চরম পরিস্থিতি যেমন দামের উড়ে যাওয়া, সংক্ষিপ্ত লাইন বিস্ফোরণে উত্থান বা পতনকে বিবেচনা করে না। এই পরিস্থিতিতে কৌশলটি একাধিক গ্রিড ভেঙে ফেলতে পারে, যার ফলে ঝুঁকি নিয়ন্ত্রণের বাইরে ক্ষতি হতে পারে।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকেও উন্নত করা যেতে পারেঃ
মেশিন লার্নিং অ্যালগরিদমের মাধ্যমে ট্রেডিং সেশনকে আরও স্মার্ট এবং গতিশীল করার জন্য, ট্রেডিং মডেলগুলিকে চলমান গড়ের উত্থান-পতনের পূর্বাভাস দেওয়ার জন্য প্রশিক্ষণ দেওয়া যেতে পারে।
বিভিন্ন লেনদেনের মাপের বৈশিষ্ট্য, গ্রিডের সংখ্যা, তহবিল বন্টন অনুপাত, পজিশনের আকার ইত্যাদির উপর ভিত্তি করে প্যারামিটারগুলি অনুকূলিতকরণ করা যেতে পারে, স্বনির্ধারিত প্যারামিটারগুলি ব্যবহার করুন
শর্তাধীন পত্র সেট করা যেতে পারে, একটি নির্দিষ্ট দূরত্বের গ্রিড লাইনে একটি অতিরিক্ত স্টপ লস পত্র সেট করা যেতে পারে, যা চরম পরিস্থিতিতে ক্ষতি নিয়ন্ত্রণের জন্য অগ্রিম স্টপ লস ভূমিকা পালন করতে পারে।
এক্সট্রিম পরিস্থিতির জন্য অস্বাভাবিক আচরণ প্রক্রিয়া ডিজাইন করুন, যেমন প্রথম খোলার পজিশন বাড়ানো, মধ্যবর্তী গ্রিডের সরাসরি স্টপ আউট এড়িয়ে যাওয়া ইত্যাদি, দামের উড়ে যাওয়ার মতো অস্বাভাবিক পরিস্থিতি মোকাবেলা করতে পারে।
ডায়নামিক গ্রিড ট্রেডিং কৌশলটি সামগ্রিকভাবে যুক্তিসঙ্গতভাবে ডিজাইন করা হয়েছে, এটি সেই ধরণের ট্রেডিংয়ের জন্য উপযুক্ত যা দামের ওঠানামা বেশি ঘন ঘন হয়। তবে এই কৌশলটিও একটি নির্দিষ্ট বাজার ঝুঁকি রয়েছে, কৌশলটিকে আরও স্থিতিশীল করার জন্য প্যারামিটার এবং অস্বাভাবিকতার সাথে অপ্টিমাইজ করার প্রয়োজন রয়েছে।
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Grid Trading Strategy', overlay=true)
// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')
// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
if close < array.get(grid_array, i) and not array.get(order_array, i)
buy_id = i
array.set(order_array, buy_id, true)
strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
if close > array.get(grid_array, i) and i!=0
if array.get(order_array, i-1)
sell_id = i - 1
array.set(order_array, sell_id, false)
strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))
plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)