এই কৌশলটি মুভিং গড়, ভলিউম সূচক এবং মূল্য গতির সূচককে একত্রিত করে সঞ্চয়ের পর্যায়ে প্রবেশের সময় নির্ধারণের জন্য পরিমাণগত নিয়মের একটি সেট ডিজাইন করে। এই পর্যায়ে, সঞ্চয়গুলি সাধারণত মূল্য সংহতকরণ এবং সঞ্চয়স্থানের অবস্থায় থাকে, যা কম দামের একটি ভাল সুযোগ সরবরাহ করে।
এই কৌশলটি মূল্যের প্রবণতা নির্ধারণের জন্য 50-দিন, 90-দিন এবং 200 দিনের সহজ চলমান গড় ব্যবহার করে। যখন দাম 200 দিনের লাইনের উপরে থাকে তখনই কিনতে সংকেত তৈরি করা হয়। এটি বড় ডাউনট্রেন্ডের অনিশ্চয়তা ফিল্টার করে।
মূল প্রবণতা মূল্যায়নের পাশাপাশি, কৌশলটি প্রবণতা নিশ্চিত করার জন্য স্বল্পমেয়াদী চলমান গড়ের ক্রমানুসারেও বিচার করে। বিশেষত, এটি 50 দিনের রেখাটি 90 দিনের রেখার উপরে কিনা তা বিচার করে।
চলমান গড় মূল এবং স্বল্পমেয়াদী প্রবণতা নিশ্চিত করার ভিত্তিতে, কৌশলটি PVT ভলিউম সূচক এবং MACD সূচককে একত্রিত করে জমে থাকা বৈশিষ্ট্যগুলি বিচার করে। কেবলমাত্র যখন PVT উপরে ভাঙবে, MACD লাইনটি সিগন্যাল লাইনের চেয়ে বেশি হবে এবং ভলিউমটি প্রসারিত হবে তখনই ক্রয় সংকেত উত্পন্ন হয়।
শুধুমাত্র চলমান গড়ের তুলনায়, এই কৌশলটি প্রবণতা নিশ্চিত করার সময় ভলিউমের বৈশিষ্ট্যগুলিও পরীক্ষা করে। এটি সঞ্চয়ের পর্যায়ে প্রবেশের সময়কে আরও সঠিকভাবে নির্ধারণ করতে পারে, যার ফলে আরও ভাল প্রবেশের দাম নিশ্চিত করা যায়।
একাধিক সময় ফ্রেম বিশ্লেষণ করে, এই কৌশলটি সময় ফ্রেমগুলির সাথে মেলে এমন মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা বিচার এবং স্বল্পমেয়াদী বৈশিষ্ট্য বিচারকে একত্রিত করে, যা একটি একক সময় ফ্রেমকে ভুলভাবে বিচার করার অনিশ্চয়তা হ্রাস করতে পারে।
এই কৌশলটি মূলত চলমান গড় বিচারের উপর নির্ভর করে। যখন দামগুলি হিংস্রভাবে ওঠানামা করে, চলমান গড় বিচারের ব্যর্থ হবে। এই মুহুর্তে, অবস্থান আকার হ্রাস করা উচিত বা স্টপ লস প্রস্থান করা উচিত।
উপরন্তু, জমাকরণ পর্যায়ে ভুল মূল্যায়ন সম্ভব, যার ফলে বিপরীতমুখী সুযোগগুলি মিস করা হয়। এর জন্য মূল্যায়ন নিশ্চিত করার জন্য আরও বৈশিষ্ট্য সূচক পর্যবেক্ষণ করা প্রয়োজন।
মেশিন লার্নিং অ্যালগরিদমগুলি বৈশিষ্ট্য এবং মডেল প্রশিক্ষণ নিষ্কাশন করে এই কৌশলটিতে প্রবর্তন করা যেতে পারে যাতে জমে থাকা পর্যায়ে স্বয়ংক্রিয় বিচার অর্জন করা যায়। এটি ম্যানুয়ালি থ্রেশহোল্ড সেটিংয়ের সীমাবদ্ধতা হ্রাস করতে পারে।
উপরন্তু, এই কৌশলটি বিভিন্ন বাজারের পরিবেশে স্বয়ংক্রিয়ভাবে পরামিতিগুলি স্যুইচ করার জন্য ব্রেকপয়েন্ট কার্যকারিতাটিও চেষ্টা করতে পারে, যা কৌশলটিকে আরও শক্তিশালী করে তোলে।
সংক্ষেপে, এই কৌশলটি সাধারণত স্টক জমে থাকা পর্যায়ে বৈশিষ্ট্যগুলি বিচার করার জন্য দাম এবং ভলিউমগুলির মিলনের ধারণা গ্রহণ করে। প্রধান দিকটি নিশ্চিত করার সময়, এটি স্বল্পমেয়াদী জমে থাকা সুযোগগুলি খনন করে। প্যারামিটার অপ্টিমাইজেশন এবং মেশিন লার্নিং প্রবর্তন করে কৌশল কর্মক্ষমতা আরও উন্নত করার জন্য এখনও জায়গা রয়েছে।
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h 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/ // © stocktechbot //@version=5 strategy("Accumulate", overlay = true) lookback = input(defval = 21, title = 'Lookback') offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) //SMA Tredline out = ta.sma(close, 200) outf = ta.sma(close, 50) outn = ta.sma(close, 90) outt = ta.sma(close, 21) //sma plot plot(out, color=color.blue, title="MA200", offset=offset) plot(outf, color=color.maroon, title="MA50", offset=offset) plot(outn, color=color.orange, title="MA90", offset=offset) plot(outt, color=color.olive, title="MA21", offset=offset) //MarketCap Calculation //MarketCap = 0.0 //TSO = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ", ignore_invalid_symbol = true) //if str.tostring(TSO) != 'na' // if ta.barssince(TSO != TSO[1] and TSO > TSO[1])==0 // MarketCap := TSO * close // // if barstate.islast and MarketCap == 0 // runtime.error("No MarketCap is provided by the data vendor.") // //momlen = 100 //msrc = MarketCap //mom = msrc - msrc[momlen] //plotmom = if (mom > mom[1]) // true //else // false //OBV with sma on macd obv = ta.cum(math.sign(ta.change(close)) * volume) smoothingLength = 5 smoothingLine = ta.sma(obv,5) [macdLine, signalLine, histLine] = ta.macd(ta.pvt, 12, 26, 9) sellvolhigh = macdLine < signalLine buyvolhigh = macdLine > signalLine //Buy Signal mafentry =ta.sma(close, 50) > ta.sma(close, 90) //matentry = ta.sma(close, 21) > ta.sma(close, 50) matwohun = close > ta.sma(close, 200) higheshigh = ta.rising(high, 2) higheslow = ta.rising(low, 2 ) twohunraise = ta.rising(out, 2) //highvol = ta.crossover(volume, ta.sma(volume, lookback)) highvol = ta.rising(volume,2) fourlow = ta.lowest(close, lookback) fourhig = ta.highest(close, lookback) change = (((fourhig - fourlow) / fourlow) * 100) <= 30 green = close > open allup = false lineabove = ta.cross(close, ta.sma(close, input(defval = 21, title = 'Entry Line'))) if matwohun and mafentry and higheshigh and twohunraise and buyvolhigh //if higheshigh and higheslow and highvol allup := true plotshape(allup, style=shape.arrowup,location=location.belowbar, color=color.green, title = "Buy Signal") barsSinceLastEntry() => strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na //Sell Signal mafexit =ta.sma(close, 50) < ta.sma(close, 90) matexit = ta.sma(close, 21) < ta.sma(close, 50) matwohund = close < ta.sma(close, 200) linebreak = ta.sma(close, input(defval = 21, title = 'Exit Line')) > close lowesthigh = ta.falling(high, 3) lowestlow = ta.falling(low, 2 ) twohunfall = ta.falling(out, 3) twentyfall = ta.falling(outt, 2) highvole = ta.crossover(volume, ta.sma(volume, 5)) //fourlow = ta.lowest(close, lookback) //fourhig = ta.highest(close, lookback) changed = (((fourhig - close) / close) * 100) >= 10 red = close < open atr = ta.atr(14) //atrsmalen = int(bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) ) atrsmalen = barsSinceLastEntry() atrsma = false atrlen = 5 if str.tostring(atrsmalen) != 'NaN' and atrsmalen > 0 atrlen := atrsmalen atrsma := atr > ta.sma(atr,50) alldwn = false if sellvolhigh and lowestlow and (close < close[1] and close < open) //if higheshigh and higheslow and highvol alldwn := true plotshape(alldwn, style=shape.arrowdown,location=location.abovebar, color=color.red, title = "Sell Signal") longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) if (allup) strategy.entry("My Long Entry Id", strategy.long) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if (alldwn) strategy.entry("My Short Entry Id", strategy.short)