এই কৌশলটি মূল্যের প্রবণতা এবং অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় পরিস্থিতি নির্ধারণের জন্য ওয়েভ ট্রেন্ড সূচক ব্যবহার করে। এটি সংকেতগুলি ফিল্টার করতে আরএসআই সূচককে একত্রিত করে এবং অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় স্তরে প্রতি-প্রবণতা অপারেশন করার জন্য একটি প্রবণতা ট্র্যাকিং পদ্ধতি গ্রহণ করে।
কৌশলটি মূল্যের প্রবণতা দিক নির্ধারণের জন্য ওয়েভট্রেন্ড সূচক ব্যবহার করে। ওয়েভট্রেন্ড সূচকটি রেইনবো সূচকের উপর ভিত্তি করে উন্নত করা হয়েছে। এটি হেইকিন-আশি চলমান গড় এবং দামের পরম মানের মধ্যে পার্থক্য গণনা করে দামের প্রবণতা দিক বিচার করে। এটি ওভারকপ/ওভারসোল্ড পরিস্থিতি নির্ধারণের জন্য আরএসআই সূচককে একত্রিত করে ট্রেডিং সংকেত তৈরি করে।
বিশেষ করে, কৌশল মধ্যে WaveTrend সূত্র হলঃ
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
যেখানে esa হল হিসাবকৃত হেকিন-আশি চলমান গড়, d হল হেকিন-আশি চলমান গড় এবং মূল্যের পরম মানের মধ্যে পার্থক্যের গড়। ci হল তথাকথিত অভিযোজনশীল পরিসীমা, যা মূল্যের অস্থিরতা প্রতিফলিত করে। wt হল ci এর চলমান গড়, যা মূল্যের প্রবণতার দিক নির্ধারণ করে এবং দীর্ঘ এবং স্বল্প সময়ের জন্য মূল সূচক।
আরএসআই সূচকটি অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয় পরিস্থিতি নির্ধারণের জন্য ব্যবহৃত হয়। কোডের আরএসআই গণনার সূত্রটি হলঃ
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
এর মান 0 থেকে 100 এর মধ্যে। 70 এর উপরে বেশি কেনা হয় এবং 30 এর নিচে বেশি বিক্রি হয়।
এই দুটি সূচকের সাথে মিলিয়ে, যখন আরএসআই 25 এর নীচে এবং ওয়েভট্রেন্ড -60 এর নীচে থাকে, তখন এটি লম্বা হওয়ার জন্য oversold হয়। যখন আরএসআই 75 এর উপরে এবং ওয়েভট্রেন্ড 60 এর উপরে থাকে, তখন এটি লম্বা হওয়ার জন্য overbought হয়।
এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ
এছাড়াও কিছু ঝুঁকি আছেঃ
সমাধান:
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
সিগন্যালের নির্ভুলতা উন্নত করতে বিচার সূচক পরিবর্তন বা যোগ করুন, যেমন এমএসিডি, কেডি ইত্যাদি।
প্যারামিটার সেটিংস অপ্টিমাইজ করুন বিভিন্ন পণ্য অভিযোজিত করতে, যেমন মসৃণ সময়কাল সামঞ্জস্য করুন।
একক ক্ষতি নিয়ন্ত্রণের জন্য ট্র্যাকিং স্টপ লস কৌশল যোগ করুন, যেমন শতাংশ স্টপ লস, ট্রেলিং স্টপ লস ইত্যাদি।
বিভিন্ন পিরামিডিং কৌশল বিবেচনা করুন, উদাহরণস্বরূপ, নির্দিষ্ট পরিমাণের পরিবর্তে মার্টিঙ্গেল।
বিচারের নির্ভুলতা উন্নত করতে অভিযোজনযোগ্য পরিসীমা পরামিতিগুলি অপ্টিমাইজ করুন।
কৌশলটির সামগ্রিক ধারণাটি স্পষ্ট, দামের প্রবণতা নির্ধারণ এবং কার্যকরভাবে গোলমাল ফিল্টার করার জন্য অস্থিরতার সূচকগুলি ব্যবহার করে। কৌশলটিকে আরও শক্তিশালী করার জন্য একাধিক দিক থেকে অপ্টিমাইজেশনের সুযোগ রয়েছে। প্যারামিটার টিউনিংয়ের মাধ্যমে এটি বিভিন্ন পণ্যের সাথে খাপ খাইয়ে নেওয়া যেতে পারে এবং আরও লাইভ পরীক্ষার মূল্যবান।
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") showarr = input(true, defval = true, title = "Show Arrows") fromyear = input(2018, defval = 2018, 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") //RSI rsiup = rma(max(change(close), 0), 14) rsidown = rma(-min(change(close), 0), 14) rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) //WaveTrend esa = ema(hlc3, 10) d = ema(abs(hlc3 - esa), 10) ci = (hlc3 - esa) / (0.015 * d) wt = ema(ci, 21) //Body body = abs(close - open) abody = sma(body, 10) //Signals bar = close > open ? 1 : close < open ? -1 : 0 overs = rsi < 25 and wt < -60 overb = rsi > 75 and wt > 60 up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1 dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1 exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false) //Arrows col = exit ? black : up1 or dn1 ? blue : na needup = up1 needdn = dn1 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if dn1 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()