
এই কৌশলটি ট্রেন্ডের দিক নির্ধারণের জন্য বিভিন্ন পিরিয়ডের ইএমএ গড়ের ক্রসিংয়ের উপর ভিত্তি করে এবং এর উপর ভিত্তি করে একটি পল্টু-কমিডিং সংকেত তৈরি করে। প্রধানত 2 টি গড় লাইন ব্যবহার করা হয়, যথাক্রমে 10 তম লাইন এবং 20 তম লাইন। 10 তম লাইনটি যখন 20 তম লাইনটি উপরে থেকে নীচে অতিক্রম করে তখন পল্টু করা হয়; যখন 10 তম লাইনটি নীচে থেকে 20 তম লাইনটি অতিক্রম করে তখন পল্টু করা হয়। এই কৌশলটি মধ্যম লাইন ট্রেডিং কৌশলগুলির মধ্যে পড়ে।
এই কৌশলটি 2 টি ইএমএ গড় লাইন ব্যবহার করে, যার মধ্যে 10 তম এবং 20 তম লাইন রয়েছে। ইএমএ গড় লাইনটি দামের প্রবণতার দিকটি ভালভাবে প্রতিফলিত করে। যখন স্বল্পমেয়াদী ইএমএ লাইনটি নীচে থেকে উপরে দীর্ঘমেয়াদী ইএমএ লাইন অতিক্রম করে, তখন দামের গতিবিধিটি উত্থান থেকে উত্থান পর্যন্ত, এটি একটি মাল্টিসিগন্যাল; যখন স্বল্পমেয়াদী ইএমএ লাইনটি উপরে থেকে নীচে দীর্ঘমেয়াদী ইএমএ লাইন অতিক্রম করে, তখন দামের গতিবিধিটি উত্থান থেকে উত্থান পর্যন্ত, এটি একটি ফাঁকা সংকেত।
এই কৌশলটি একই সময়ে ওঠানামা এবং অস্থিরতার সর্বাধিক মানকে একত্রিত করে যাতে ট্রেডিং সিগন্যালের একটি অংশ ফিল্টার করা যায়। দামের ওঠানামা একটি নির্দিষ্ট মাত্রায় পৌঁছানোর পরে কেবলমাত্র একটি ট্রেডিং সিগন্যাল জারি করা হবে। এটি কিছু পরিমাণে মিথ্যা সংকেতগুলি ফিল্টার করতে পারে।
বিশেষত, এই কৌশলটি মূল্যায়ন করে যে কোনও মূল্য প্রবণতা তৈরি হয়েছে কিনা, দামের সর্বোচ্চ এবং সর্বনিম্নের সময়কাল অনুসরণ করে। প্রকৃত ট্রেডিং সিগন্যালগুলি কেবলমাত্র সর্বোচ্চ বা সর্বনিম্নের নির্দিষ্ট সময় পরে প্রেরণ করা হয়।
এই কৌশলটির বেশ কিছু সুবিধা রয়েছেঃ
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
নিম্নলিখিত উপায়ে ঝুঁকি কমাতে পারেনঃ
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ
ইএমএ ক্রস কৌশলটি সামগ্রিকভাবে একটি সহজ এবং ব্যবহারিক প্রবণতা অনুসরণকারী কৌশল। এটি ইএমএ গড়কে ব্যবহার করে বড় প্রবণতার দিকনির্দেশের জন্য এবং তারপরে দামের ওঠানামা ফিল্টার সংকেতগুলির সাথে মিলিত হয়ে ট্রেডিং সিদ্ধান্ত গঠন করে। এই কৌশলটি সহজেই বোঝা যায় এবং প্যারামিটারগুলিকে সামঞ্জস্য করতে পারে। এটি আরও অপ্টিমাইজ করা যায়, এটি একটি পরিমাণগত কৌশল যা দীর্ঘমেয়াদী ব্যবহারের জন্য উপযুক্ত।
/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("PierceMAStrat", overlay=true)
lenMA0 = input(title="Length 0",defval=2)
lenMA1=input(title="Length 1",defval=10)
lenMA2=input(title="Length 2", defval=20)
lenMA3 = input(title = "Length3", defval =50)
emaLen0 = ema(close, lenMA0)
emaLen1 = ema(close, lenMA1)
emaLen2 = ema(close, lenMA2)
emaLen3 = ema(close, lenMA3)
ascent = if emaLen1[1] < emaLen1[0]
true
else
false
descent = if emaLen1[1] > emaLen1[0]
true
else
false
TimeSinceAscensionStart = if ascent == true
barssince(descent == true)
else
0
StartUp = if TimeSinceAscensionStart < 1
true
else
false
StartDown = if TimeSinceAscensionStart < 1
false
else
true
AscentBarCounter = barssince(StartUp == true)
DescentBarCounter = barssince(StartDown == true)
MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10
true
else
false
MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5
true
else
false
longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3
true
else
false
shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3
true
else
false
//longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3))
//shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3)
if longCond == true
strategy.entry("LONG", strategy.long)
if shortCond == true
strategy.entry("SHORT", strategy.short)
plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small)
plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small)
//plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny)
//plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny)
//plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small)
//plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small)
//plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small)
//plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small)
//plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS")
plot(emaLen1, color=green, transp=0, linewidth=2)
plot(emaLen2, color=red, transp=30, linewidth=2)
plot(emaLen3, color=blue, transp=30, linewidth=2)