
Price Channel VWAP Trading Strategy নামে পরিচিত এই কৌশলটি একটি মূল্য চ্যানেল ভিত্তিক কৌশল যা VWAP লেনদেনের জন্য ব্যবহার করা হয়। এই কৌশলটির মূল ধারণাটি হলঃ মূল্য চ্যানেলের মধ্যে, VWAP সূচকের গড় লাইন এবং তার উপরে-নিচে বিচ্যুতিযুক্ত চ্যানেল লাইন ব্যবহার করে ক্রয়-বিক্রয় অবস্থান নির্ধারণ করা, চ্যানেল লাইনটি ভেঙে যাওয়ার সময় স্থির অবস্থানের মোট সম্পদের শতাংশ অনুসারে পজিশন খোলার এবং VWAP গড় লাইনে ফিরে আসার সময় পজিশনটি বন্ধ করা।
এই কৌশলটি VWAP সূচকের মাধ্যমে বর্তমান মূল্যের গড় লেনদেনের মূল্য গণনা করে। VWAP মূল্যের গড় মূল্যকে বোঝায়, যা লেনদেনের পরিমাণ এবং লেনদেনের পরিমাণের অনুপাত। VWAP সূচকটি বর্তমান মূল্য এবং historicalতিহাসিক লেনদেনের গড় মূল্যের বিচ্যুতিকে প্রতিফলিত করে।
কৌশলটি VWAP সূচকের গড় এবং তার বিচ্যুতি চ্যানেল লাইন ব্যবহার করে। বিচ্যুতি চ্যানেল লাইনের অনুপাতটি প্যারামিটার স্ট্রিং লংলেভেল 1 স্ট্রিং এবং শর্টলেভেল 1 স্ট্রিং দ্বারা সেট করা হয়েছে। যখন দামটি বিচ্যুতি চ্যানেল লাইনটি ভেঙে যায়, তখন প্যারামিটার স্ট্রিং লটসিলেভেল 1 স্ট্রিংয়ের অবস্থানের শতাংশ অনুসারে একাধিক শর্ত খোলা হয়। যখন দামটি বিচ্যুতি চ্যানেল লাইনটি ভেঙে যায়, তখন প্যারামিটার স্ট্রিং লটসিলেভেল 1 স্ট্রিংয়ের অবস্থানের শতাংশ অনুসারে শূন্য শর্ত খোলা হয়। পজিশন খোলার পরে, যখন দামটি VWAP লাইনের গড়ের কাছাকাছি ফিরে আসে, তখন পজিশনটি খালি করে চলে যায়।
এই কৌশলটির প্যারামিটার সেটিংটি চ্যানেল ট্রেডিংয়ের ধারণাকে পুরোপুরি প্রতিফলিত করে। ব্যবহারকারীরা তাদের পছন্দ অনুসারে চ্যানেলের প্রস্থ এবং অবস্থানের অনুপাতের আকারকে সামঞ্জস্য করতে পারেন, যার ফলে বিভিন্ন স্তরের লেনদেনের ফ্রিকোয়েন্সি অর্জন করা যায়।
ট্রেডিং কৌশলটির নিম্নলিখিত সুবিধাগুলি রয়েছেঃ
যেহেতু ভিডাব্লুএপি সূচকটি দামের গড় স্তরকে ভালভাবে প্রতিফলিত করতে পারে, তাই তার চ্যানেল লাইনের উপর ভিত্তি করে লেনদেন কার্যকরভাবে মান কেন্দ্রকে লক করতে পারে এবং স্বল্পমেয়াদী ওঠানামার বেন্ডে বিভক্ত হওয়া এড়াতে পারে। একই সাথে বিভিন্ন প্যারামিটার চ্যানেলের সমন্বয় গ্রহণ করে, ব্যাচগুলি তৈরি করে, কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণ করতে পারে, একতরফা ঝুঁকিকে কেন্দ্র করে পজিশনের বিস্ফোরণ রোধ করতে পারে। অবশেষে, সময়মতো স্টপিংয়ের মাধ্যমে ভিডাব্লুএপি গড়ের কাছাকাছি পজিশনে ফিরে আসা, দামের বিপরীতকরণের কারণে ক্ষতি হ্রাস করতে পারে।
এই কৌশলটির কিছু ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক থাকা দরকারঃ
ভিডাব্লুএপি সূচকটি উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের অস্থিরতার প্রতি সংবেদনশীল নয়, যদি দামের চরম উঁচু বা স্বল্প-মেয়াদী অস্বাভাবিকতার মুখোমুখি হয় তবে অপ্রয়োজনীয় ট্রেডিং সংকেত এবং ক্ষতির কারণ হতে পারে। তদতিরিক্ত, যদি চ্যানেলের প্যারামিটারগুলি খুব স্বাচ্ছন্দ্যে সেট করা হয় তবে দামের অনুপ্রবেশের অকার্যকর সংকেত তৈরি করা সহজ। অবশেষে, যদি রিটার্ন অপারেশনের সমতল পরিসীমা পজিশনটি খুব প্রশস্ত হয় তবে এটি সর্বোত্তম স্টপ টাইমিংটি মিস করতে পারে এবং ক্ষতিগ্রস্থ হতে পারে।
প্রতিকার হল যুক্তিসঙ্গতভাবে মূল্যায়ন প্যারামিটার সেট করা, চ্যানেলের প্যারামিটারগুলি যথাযথভাবে সামঞ্জস্য করা; অন্য সূচকগুলির সাথে একত্রে দামের অস্বাভাবিকতা বিচার করা, অন্ধ অনুসরণ এড়ানো; এবং অবশেষে বিভিন্ন স্তরের চ্যানেল এবং রিগ্রেশন ব্যাপ্তির প্যারামিটার অপ্টিমাইজেশন মূল্যায়ন করা, আরও ভাল বিরতি প্রভাব অর্জনের জন্য।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
আরও স্তরযুক্ত ট্রানজিট লাইন যুক্ত করা যেতে পারে, এবং সমন্বয় প্যারামিটারগুলি আরও স্থিতিশীল ট্রেডিংয়ের জন্য অনুকূলিতকরণ করা যেতে পারে। এছাড়াও, লেনদেনের পরিমাণের বিচারের নিয়মগুলি যুক্ত করা যেতে পারে, যাতে মূল্যের উঁচুতে উড়ে যাওয়া লেনদেনের ক্ষতি হতে পারে না। অবশেষে, স্টপ লস নিয়মগুলিও সেট করা যেতে পারে, যখন পজিশন হ্রাসের একটি নির্দিষ্ট অনুপাত পৌঁছে যায় তখন স্টপ লস আউট, কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণ করে।
এই কৌশলটি ভিডাব্লুএপি সূচককে মূল্যের চ্যানেলের সাথে একত্রিত করে, একটি অপেক্ষাকৃত স্থিতিশীল ট্রেডিং কৌশল অর্জন করে। কৌশলটি প্যারামিটার সেট করা নমনীয়, ব্যবহারকারীরা তাদের পছন্দ অনুসারে সামঞ্জস্য করতে পারেন। এই কৌশলটি কার্যকরভাবে মূল্যের কেন্দ্রীয় দিকটি নির্ধারণ করতে পারে, প্যারামিটার সমন্বয় এবং ব্যাচ তৈরির মাধ্যমে স্থিতিশীল মুনাফা অর্জন করতে পারে। যদিও কৌশলটিতে কিছুটা উন্নতির জায়গা রয়েছে, তবে সামগ্রিকভাবে এটি একটি কার্যকর পরিমাণে ট্রেডিং কৌশল।
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %")
lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
shortlevel1 = input(1.0, title = "Short line 1")
longlevel1 = input(-1.0, title = "Long line 1")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
truetime = true
//VWAP
ma = vwap(hlc3)
//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
//Lines
colorlong1 = long1 ? color.lime : na
colorshort1 = short1 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
//Trading
lotlong = 0.0
lotshort = 0.0
lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1]
lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1]
if ma > 0
if lotlong > 0
lotslong = 0.0
lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime))
if lotshort > 0
lotsshort = 0.0
lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0
strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime))
if strategy.position_size > 0
strategy.exit("TPL", "L1", limit = ma)
if strategy.position_size < 0
strategy.exit("TPS", "S1", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("S1")
strategy.cancel("TPL")
strategy.cancel("TPS")