এই কৌশলটি 10EMA এবং 50EMA এর দ্বৈত ক্রসের উপর ভিত্তি করে একটি প্রবণতা ট্র্যাকিং কৌশল। এটি গতিশীলভাবে পরিবর্তিত ষাঁড় এবং ভালুক বাজারে প্রবণতা দিক খুঁজে পেতে এবং স্বয়ংক্রিয় ট্র্যাকিং স্টপ লস অর্জনের জন্য একটি সহায়ক রায় হিসাবে ঘন্টার চার্টে 10EMA অন্তর্ভুক্ত করে।
কৌশলটির মূল যুক্তি 10EMA এবং 50EMA এর গোল্ডেন ক্রস এবং ডেথ ক্রসের উপর ভিত্তি করে। বিশেষত, যখন 10EMA 50EMA এর উপরে ক্রস করে একটি গোল্ডেন ক্রস গঠন করে, তখন এটি বিচার করা হয় যে বাজারটি একটি আপট্রেন্ডে প্রবেশ করেছে; যখন 10EMA 50EMA এর নীচে ক্রস করে একটি ডেথ ক্রস গঠন করে, তখন এটি বিচার করা হয় যে বাজারটি একটি ডাউনট্রেন্ডে প্রবেশ করেছে।
গোল্ডেন ক্রস বা ডেথ ক্রসের পরে 1-5 বারের মধ্যে লং বা শর্ট পজিশন খুলুন। উপরন্তু, কৌশলটি একটি সহায়ক রায় হিসাবে ঘন্টার চার্টে 10EMA প্রবর্তন করে। গোল্ডেন ক্রসের পরে ঘন্টার চার্টে 10EMA আপগ্রেড ট্রেন্ডে থাকলে লং পজিশনগুলি কেবল খোলা হয়, এবং ঘন্টার চার্টে 10EMA মৃত্যুর ক্রসের পরে ডাউনগ্রেড ট্রেন্ডে থাকলে শর্ট পজিশনগুলি খোলা হয়, যার ফলে কিছু মিথ্যা সংকেত ফিল্টার করা হয়।
পজিশন খোলার পরে, কৌশলটি স্টপ লস + লিমিট অর্ডার ট্র্যাকিংয়ের মুনাফা গ্রহণ এবং স্টপ লস পদ্ধতি গ্রহণ করে। স্টপ লস ট্র্যাকিং লাভকে লক করতে এবং লেনদেনের লাভজনকতা সর্বাধিক করতে পারে; সীমা অর্ডারগুলি নিশ্চিত করে যে মুনাফা অর্জনের জন্য দামগুলি লক্ষ্যমাত্রায় পৌঁছলে পজিশনগুলি বন্ধ হয়ে যায়।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল মূল প্রবণতার দিক নির্ধারণের জন্য ইএমএ ক্রসগুলি ব্যবহার করার সময়, এটি সংকেতগুলি ফিল্টার করার জন্য সহায়ক সূচকগুলিও প্রবর্তন করে, যা সংকেতের নির্ভরযোগ্যতা উন্নত করতে কার্যকরভাবে মিথ্যা ক্রসগুলি ফিল্টার করতে পারে। এছাড়াও, ট্রেলিং স্টপ লস এবং লিমিট মুনাফা গ্রহণের সাথে যুক্ত ডাবল ইএমএ ক্রস উভয়ই ট্রেকিং প্রবণতা লাভকে সর্বাধিক করতে পারে এবং ভাল সামগ্রিক ঝুঁকি-পুরষ্কার অনুপাতের সাথে কার্যকরভাবে ট্রেডিং ঝুঁকি নিয়ন্ত্রণ করতে পারে।
একক সূচক কৌশলগুলির তুলনায়, এই কৌশলটি প্রবণতা দিক এবং বিস্তৃতিগুলিকে আরও সঠিকভাবে বিচার করতে পারে। ঐতিহ্যগত স্টপ লসের তুলনায়, এই কৌশলটি লাভের আরও ভাল লক করার জন্য আরও উন্নত ট্র্যাকিং স্টপ লস প্রযুক্তি গ্রহণ করে।
এই কৌশলটির প্রধান ঝুঁকিগুলি হল বিরামবিহীন হুইপস এবং প্রবণতা বিপরীতমুখী। যখন ধারাবাহিক মিথ্যা ক্রসিং সংকেত ঘটে, তখন কৌশলটি স্ক্র্যাপ করা যেতে পারে। উপরন্তু, পজিশন খোলার পরে মূল্য বিপরীতমুখীও ক্ষতির দিকে পরিচালিত করতে পারে।
হুইপসাউসের ঝুঁকি কমাতে, সংকেতগুলি ফিল্টার করতে সহায়ক সূচক যুক্ত করা হয়। প্রবণতা বিপরীত হওয়ার ঝুঁকি নিয়ন্ত্রণ করতে, একটি অপেক্ষাকৃত সহনশীল স্টপ লস ব্যাপ্তি গৃহীত হয়, এবং সীমাবদ্ধ লাভের সেটিংও এই ঝুঁকি হ্রাস করতে সহায়তা করে। যখন স্টপ লস ট্রিগার হয়, তখন প্রবণতা দিকটি পুনরায় প্রবেশ করার বিষয়টিও বিবেচনা করা সম্ভব।
এই কৌশলটির জন্য বেশ কয়েকটি অপ্টিমাইজেশান দিক রয়েছেঃ প্রথমত, সর্বোত্তম পরামিতিগুলি খুঁজে পেতে ইএমএ সময়কাল এবং অবস্থান বিলম্ব বারগুলির মতো বিভিন্ন প্যারামিটার সংমিশ্রণ পরীক্ষা করা যেতে পারে; দ্বিতীয়ত, সিগন্যালের গুণমান উন্নত করতে সিগন্যাল ফিল্টারিংয়ের জন্য এমএসিডি এবং বিওএলএল এর মতো আরও সহায়ক সূচক প্রবর্তন করা যেতে পারে; তৃতীয়ত, স্টপ লস এবং লাভের লজিকটি অপ্টিমাইজ করা যেতে পারে, যেমন টাইম স্টপ লস এবং দোলানো স্টপ লস এর মতো অন্যান্য স্টপ লস পদ্ধতি গ্রহণ করা; চতুর্থত, কৌশল ট্রেডিং সংকেতগুলি ট্রিগার করার জন্য আরও বাজার শর্তগুলি একত্রিত করা যেতে পারে, যেমন কেবল নির্দিষ্ট সময়কাল বা ওঠানামা ব্যাপ্তির সময় সংকেতগুলি ট্রিগার করা।
এই 10EMA ডাবল ক্রস ট্রেন্ড ট্র্যাকিং কৌশলটি ইএমএ গোল্ডেন ক্রস এবং ডেথ ক্রসগুলির মাধ্যমে বর্তমান প্রবণতা দিকটি বিচার করে, মুনাফা এবং নিয়ন্ত্রণ ঝুঁকিগুলি লক করার জন্য ট্র্যাকিং স্টপ লস এবং লিমিট মুনাফা গ্রহণ সেট আপ করে, সিগন্যালগুলি ফিল্টার করতে এবং সংকেতের গুণমান উন্নত করার জন্য সহায়ক সূচকগুলি একত্রিত করে। একক সূচক এবং traditionalতিহ্যবাহী স্টপ লস কৌশলগুলির তুলনায়, এই কৌশলটির সুনির্দিষ্ট বিচার, অনুকূলিত স্টপ লস প্রক্রিয়া ইত্যাদির মতো সুবিধা রয়েছে। এটি ঝুঁকিগুলি নিয়ন্ত্রণ করার সময় প্রবণতা লাভগুলি কার্যকরভাবে ক্যাপচার করতে পারে, এটি প্রচলিত ট্রেডিং অ্যাকাউন্টগুলির জন্য উপযুক্ত করে তোলে। অবশ্যই এই কৌশলটির জন্য এখনও উন্নতির সুযোগ রয়েছে, যেমন প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে কৌশল পারফরম্যান্স আরও উন্নত করা এবং আরও সহায়ক সূচক প্রবর্তন করা।
/*backtest start: 2022-12-22 00:00:00 end: 2023-12-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("10ema Strat 9", overlay=true, format=format.price) //#region // inputs for candles //time t1 = time(timeframe.period,"0930-1500") //last hour of market is not ideal for trading // candle status bullish = close > open and barstate.isconfirmed bearish = open > close and barstate.isconfirmed bullcandle = ta.valuewhen(bullish, close, 0) bearcandle = ta.valuewhen(bearish, close, 0) ema1 = input.int(10, minval=1, title="short ema") ema2 = input.int(50, minval=1, title="long ema") ema3 = input.int(200, minval=1, title="hourly 10 ema") //@variable Input for source src = input(close, title="Source") offsetema = input.int(title="Offset", defval=0, minval=-500, maxval=500) sema = ta.ema(src, ema1)//@variable Input for smaller ema1 lema = ta.ema(src, ema2)//@variable Input for longer ema2 hema = ta.ema(src, ema3)// @variable Input for hourly ema3 bullcrosscount = ta.barssince(ta.crossover(sema,lema)) //@variable Input 10/50 cross higher bearcrosscount = ta.barssince(ta.crossunder(sema,lema)) //@variable Input 10/50 cross lower ideallong = bullcrosscount <= 5 //number of candles after the cross idealshort = bearcrosscount <= 5 //number of candles after the cross emabull = (sema > lema) and bearish and close > sema and close > hema and ideallong and t1 and barstate.isconfirmed xemabull = ta.barssince(emabull) dbullema = emabull and emabull[1] and xemabull <=1 bullentry = if dbullema ta.valuewhen(emabull[1], high + 0.05, 0) else ta.valuewhen(emabull, high + 0.05, 0) bullentryh = dbullema ? bullentry[1] : bullentry bullentrylow = ta.valuewhen(emabull, low - 0.05, 0) bullstop = (bullentryh - bullentrylow) <= 1.00 ? bullentryh - 1.00 : (bullentryh - bullentrylow) <= 10.40 ? bullentrylow : na bulltarget = (bullentryh - bullstop) * 1.62 + bullentryh // bear setup emabear = (sema < lema) and bullish and close < sema and close < hema and idealshort and t1 and barstate.isconfirmed xemabear = ta.barssince(emabear) dbearema = emabear and emabear [1] and xemabear <=1 bearentry = if dbearema ta.valuewhen(emabear[1], low - 0.05, 0) else ta.valuewhen(emabear, low - 0.05, 0) bearentryh = dbearema ? bearentry[1] : bearentry bearentryhigh = ta.valuewhen(emabear, high + 0.05, 0) bearstop = (bearentryhigh - bearentryh) <= 1.00 ? bearentryh + 1.00 : (bearentryh - bearentryhigh) <= 10.40 ? bearentryhigh : na beartarget = bearentryh - (bearstop-bearentryh) * 1.62 bullclose = (xemabull <=7) and bullish and bullcrosscount >=1 and barstate.isconfirmed //number of candles for a close above bearclose = (xemabear <=7) and bearish and bearcrosscount >=1 and barstate.isconfirmed //number of candles for a close below buyzone = ta.barssince(bullclose) shortzone = ta.barssince(bearclose) idealbuy = close >= bullentryh and bullclose and (buyzone<=7) idealsell = close <= bearentryh and bearclose and (shortzone<=7) // // bull setup on chart // if sema > lema and xemabull < 50 // var line line_bullentry = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1) // if emabull // line.set_xy1(line_bullentry, x=bar_index, y=bullentryh) // line.set_xy2(line_bullentry, x=bar_index, y=bullentryh) // alert("EMA-bullish", alert.freq_once_per_bar_close) // line.set_x2(line_bullentry, x=bar_index) // var line line_bullstop = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1) // if emabull // line.set_xy1(line_bullstop, x=bar_index, y=bullstop) // line.set_xy2(line_bullstop, x=bar_index, y=bullstop) // line.set_x2(line_bullstop, x=bar_index) // var line line_bulltarget = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1) // if emabull // line.set_xy1(line_bulltarget, x=bar_index, y=bulltarget) // line.set_xy2(line_bulltarget, x=bar_index, y=bulltarget) // line.set_x2(line_bulltarget, x=bar_index) // //bear setup on chart // if sema < lema and xemabear < 50 // var line line_bearentry = line.new(bar_index, na, bar_index, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1) // if emabear // line.set_xy1(line_bearentry, x=bar_index, y=bearentryh) // line.set_xy2(line_bearentry, x=bar_index, y=bearentryh) // alert("EMA-bearish", alert.freq_once_per_bar_close) // line.set_x2(line_bearentry, x=bar_index) // var line line_bearstop = line.new(bar_index, na, bar_index, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1) // if emabear // line.set_xy1(line_bearstop, x=bar_index, y=bearstop) // line.set_xy2(line_bearstop, x=bar_index, y=bearstop) // line.set_x2(line_bearstop, x=bar_index) // var line line_beartarget = line.new(bar_index, na, bar_index, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1) // if emabear // line.set_xy1(line_beartarget, x=bar_index, y=beartarget) // line.set_xy2(line_beartarget, x=bar_index, y=beartarget) // line.set_x2(line_beartarget, x=bar_index) //#endregion //execution if idealbuy strategy.close("sell", comment=na) strategy.entry("buy", strategy.long, limit=bullentryh, stop=bullstop, comment="buy") strategy.exit("exit","buy", trail_points = low, trail_offset = 5, qty_percent=100, limit=bulltarget, stop=bullstop) if idealsell strategy.close("buy",comment=na) strategy.entry("sell", strategy.short, limit=bearentryh, stop=bearstop, comment="sell") strategy.exit("exit","sell", trail_points = low, trail_offset = 5, qty_percent=100, limit=beartarget, stop=bearstop) // strategy.close_all(time == close_day) //#region // graphical analysis //Plots plotshape(emabull, location=location.belowbar, title='emabull') plotshape(idealbuy, style=shape.circle, color=color.green, title="bull close") plotshape(emabear, title='emabear') plotshape(idealsell, location=location.belowbar, style=shape.circle, color=color.red, title="bear close") // //Dashboard // var label id = na // label.delete(id) // Delete last label // i_offsetLabel = input(15, "Data Dashboard Offset") // offset = i_offsetLabel * (time - time[1]) // dynamicText = "= Bull Setup =" // id := label.new(x=time + offset, y=open, xloc=xloc.bar_time, text=dynamicText, color=color.rgb(255, 255, 255), size=size.normal) // label.set_textcolor(id, color.rgb(0, 0, 0)) // label.set_text(id=id, text=dynamicText) // label.set_textalign(id, text.align_left) // label.set_text(id=id, text=dynamicText) // f_round( _val, _decimals) => // _p = math.pow(10, _decimals) // math.round(math.abs(_val) * _p) / _p * math.sign(_val) // dynamicText := dynamicText + "\n" + str.tostring(f_round(bulltarget,2)) + " :Target" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + str.tostring(f_round(bullentryh,2)) + " :Entry" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + str.tostring(f_round(bullstop,2)) + " :Stop" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + "= Bear Setup =" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + str.tostring(f_round(bearstop,2)) + " :Stop" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + str.tostring(f_round(bearentryh,2)) + " :Entry" // label.set_text(id=id, text=dynamicText) // dynamicText := dynamicText + "\n" + str.tostring(f_round(beartarget,2)) + " :Target" // label.set_text(id=id, text=dynamicText) // //#endregion