এটি একটি পরিমাণগত ট্রেডিং কৌশল যা উভয় দিকের অগ্রগতি অপারেশনগুলির জন্য চলমান গড় এবং এমএসিডি সূচকগুলি ব্যবহার করে। এটি ক্রস-পিরিয়ড অপারেশনের বৈশিষ্ট্য রয়েছে, অর্থাৎ, দীর্ঘ সময়ের ফ্রেমগুলিতে প্রবণতার দিক বিচার করে এবং স্বল্প সময়ের ফ্রেমগুলিতে সুযোগগুলি সন্ধান করে।
কৌশলটি প্রবণতা দিক নির্ধারণের জন্য বিভিন্ন দৈর্ঘ্যের 3 টি এসএমএমএ চলমান গড় এবং 1 টি ইএমএ চলমান গড় ব্যবহার করে। একই সাথে, এটি স্বল্পমেয়াদী প্রবণতা এবং প্রবেশের সুযোগগুলি বিচার করার জন্য এমএসিডি সূচককে একত্রিত করে। বিশেষত, ক্রয় ট্রিগার শর্তটি হ'লঃ দাম সমস্ত চলমান গড়ের মধ্য দিয়ে উপরে যায় এবং স্বল্প গড়গুলি দীর্ঘগুলির উপরে থাকে; যখন বিক্রয় ট্রিগার শর্তটি বিপরীত হয়, দাম সমস্ত চলমান গড়ের মধ্য দিয়ে নীচে যায় এবং স্বল্প গড়গুলি দীর্ঘগুলির নীচে থাকে।
এটি দেখা যায় যে এই কৌশলটি মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা দিক বিচার করতে চলমান গড় ব্যবহার করে, এবং MACD স্বল্পমেয়াদী বিপরীত আচরণ বিচার করে ভাল এন্ট্রি সুযোগ ধরা। এই মাল্টি টাইম ফ্রেম যৌথ অপারেশন কৌশল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য।
এই ক্রস-পিরিয়ড অপারেশনের সুবিধা হল যে এটি উচ্চ সম্ভাব্যতার প্রবণতার দিকে প্রবেশের জন্য উপযুক্ত স্বল্প-মেয়াদী বিপরীত পয়েন্টগুলি নির্বাচন করতে পারে, যার ফলে একটি ভাল ঝুঁকি-প্রতিদান অনুপাত পাওয়া যায়। বিশেষত, প্রধানত নিম্নলিখিত 3 টি সুবিধা রয়েছেঃ
৩টি এসএমএমএ গড় এবং ১টি ইএমএ লাইনের মাল্টি-লেভেল ফিল্টারিং কার্যকরভাবে মাঝারি ও দীর্ঘমেয়াদী প্রবণতার দিকনির্দেশনা নির্ধারণ করতে পারে যাতে প্রবণতার বিরুদ্ধে বাণিজ্য এড়ানো যায়।
এমএসিডি সূচকটি প্রবেশের জন্য স্বল্পমেয়াদী বিপরীতমুখী পয়েন্টগুলি বিচার করে আরও ভাল প্রবেশ মূল্যের স্তর পেতে পারে।
একটি ফিল্টারিং শর্ত হিসাবে কঠোর চলমান গড় ক্রম সম্পর্ক ভুল অপারেশন সম্ভাবনা হ্রাস করতে পারেন।
এই কৌশলটির প্রধান ঝুঁকিগুলি হলঃ
মুভিং মিডিয়ায় নিজেদের মধ্যে আরও বেশি বিলম্বের বৈশিষ্ট্য রয়েছে, যা স্বল্পমেয়াদী প্রবণতা বিপরীত করার সুযোগগুলি মিস করতে পারে।
ম্যাকডি সূচকগুলি মিথ্যা সংকেত তৈরি করতে পারে এবং দামের স্তরের সাথে মিলিয়ে ফিল্টার করা দরকার।
একাধিক সময় ফ্রেম রায় কৌশল জটিলতা বৃদ্ধি এবং ব্যর্থতা প্রবণ।
ঝুঁকি 1 এবং ঝুঁকি 2 মোকাবেলা করার জন্য, আমরা স্বল্পমেয়াদী প্রবণতা বিপরীত প্রতিক্রিয়া দ্রুত প্রতিক্রিয়া সঞ্চালনের জন্য চলমান গড় এবং সংকেত চক্র যথাযথভাবে সংক্ষিপ্ত করে অপ্টিমাইজ করতে পারি। ঝুঁকি 3 এর জন্য, আমাদের বিভিন্ন জাত এবং চক্রের জন্য অপ্টিমাইজ এবং পরীক্ষা করতে হবে যাতে কৌশল পরামিতিগুলি সেই জাতের বৈশিষ্ট্যগুলিতে কঠোরভাবে অভিযোজিত হয়।
এই কৌশলটির মূল দিকগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছেঃ
বিভিন্ন চক্র এবং জাতের বৈশিষ্ট্যগুলির সাথে সর্বোত্তমভাবে মেলে চলমান গড় এবং এমএসিডির পরামিতিগুলি অনুকূল করুন। যেমন চলমান গড়ের দৈর্ঘ্য সংক্ষিপ্ত করা, সংকেত পরামিতি বৃদ্ধি ইত্যাদি
যুক্তিসঙ্গত চলমান স্টপ সেট করার জন্য ATR বা অন্যান্য সূচক ব্যবহার করে স্টপ লস কৌশল বাড়ান। এটি কৌশলটির ঝুঁকি নিয়ন্ত্রণকে উল্লেখযোগ্যভাবে উন্নত করতে পারে।
এমএসিডি সংকেতগুলির পরিবর্তে আরও ভাল সূচক বা ফিল্টারিং পদ্ধতি সন্ধান করুন। উদাহরণস্বরূপ, অস্থিরতার সূচকগুলি প্রবর্তন করুন এবং সেই অনুযায়ী সংকেতগুলি ফিল্টার করুন।
আরও ভাল ঝুঁকি-প্রতিদান অনুপাতের সাথে প্যারামিটার সংমিশ্রণ পেতে বিভিন্ন লাভ-হানি অনুপাতের সম্পর্ক পরীক্ষা করুন।
সাধারণভাবে, এটি ক্রস-টাইমফ্রেম চিন্তাভাবনা সহ একটি অনন্য যুগান্তকারী সিস্টেম। এটি একাধিক সময় ফ্রেম জুড়ে একটি যৌথ বিচার অপারেশন কৌশল অর্জনের জন্য চলমান গড় এবং এমএসিডি উভয়ের সুবিধা ব্যবহার করে। প্যারামিটার এবং ফিল্টারিং মানদণ্ডগুলি অনুকূলিতকরণ এবং সামঞ্জস্য করে, এই কৌশলটি একটি খুব ব্যবহারিক পরিমাণগত ট্রেডিং সমাধান হয়ে উঠতে পারে।
/*backtest start: 2023-10-22 00:00:00 end: 2023-11-21 00:00:00 period: 1h 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/ // © SoftKill21 //@version=4 strategy("Koala Script",initial_capital=1000, commission_type=strategy.commission.cash_per_contract, commission_value=0.000065, slippage=3) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2031, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) len = input(3, minval=1, title="Length") src = input(hl2, title="Source") smma = 0.0 sma1 = sma(src, len) smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len len2 = input(6, minval=1, title="Length") src2 = input(hl2, title="Source") smma2 = 0.0 sma2 = sma(src2, len2) smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2 len3 = input(9, minval=1, title="Length") src3 = input(hl2, title="Source") smma3 = 0.0 sma3 = sma(src3, len3) smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3 len4 = input(50, minval=1, title="Length") src4 = input(close, title="Source") smma4 = 0.0 sma4 = sma(src4, len4) smma4 := na(smma4[1]) ? sma4 : (smma4[1] * (len4 - 1) + src4) / len4 len5 = input(200, minval=1, title="Length") src5 = input(close, title="Source") out5 = ema(src5, len5) timeinrange(res, sess) => time(res, sess) != 0 london=timeinrange(timeframe.period, "0300-1045") londonEntry=timeinrange(timeframe.period, "0300-0845") time_cond = time >= startDate and time <= finishDate and londonEntry fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) srcc = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false) // Calculating fast_ma = sma_source ? sma(srcc, fast_length) : ema(srcc, fast_length) slow_ma = sma_source ? sma(srcc, slow_length) : ema(srcc, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and londonEntry and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and londonEntry and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 //longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond //shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond length=input(14, title="ATR Length") mult=input(1.0, title="Percentage Multiplier (for ex., 0.7 = 70%)", step=0.1, minval=0.1, maxval=5.0) oa=input(false, title="Show actual ATR") ii=syminfo.pointvalue==0 s=ii?na:oa?atr(length):(syminfo.pointvalue * mult * atr(length)) tp=input(300,title="tp") sl=input(300,title="sl") //tp = s*10000 //sl= s*10000 //if(tp>300) // tp:=300 //if(sl>300) // sl:=300 //if(sl<150) // sl:=150 //if(tp<150) // tp:=150 strategy.initial_capital = 50000 //MONEY MANAGEMENT--------------------------------------------------------------'' balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(3,type=input.float,title="Risk %")/100 //risk % per trade //Calculate the size of the next trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 10000) size := 10000 //Set min. lot size strategy.entry("long",1,when=longCond ) strategy.exit("closelong","long", profit=tp,loss=sl) //strategy.close("long",when= crossunder(close[4],smma4) and close[4] > close[3] and close[3]>close[2] and close[2] > close[1] and close[1] > close) strategy.entry("short",0,when=shortCond ) strategy.exit("closeshort","short", profit=tp,loss=sl) //strategy.close("short",when= crossover(close[4],smma4) and close[4] < close[3] and close[3]< close[2] and close[2] < close[1] and close[1] < close) strategy.close_all(when = not london) maxEntry=input(2,title="max entries") // strategy.risk.max_intraday_filled_orders(maxEntry)