এই কৌশলটি ক্রয় এবং বিক্রয় সংকেত হিসাবে দুটি এক্সপোনেন্সিয়াল চলমান গড় (ইএমএ) এর ক্রসওভার ব্যবহার করে। যখন স্বল্প-মেয়াদী ইএমএ নীচে থেকে দীর্ঘ-মেয়াদী ইএমএর উপরে অতিক্রম করে, এটি একটি ক্রয় সংকেত উত্পন্ন করে; বিপরীতভাবে, যখন স্বল্প-মেয়াদী ইএমএ উপরে থেকে দীর্ঘ-মেয়াদী ইএমএর নীচে অতিক্রম করে, এটি একটি বিক্রয় সংকেত উত্পন্ন করে। অতিরিক্তভাবে, কৌশলটি নির্ধারণ করে যে ক্রসওভার পয়েন্টটি ট্রেন্ডের শক্তি নিশ্চিত করার জন্য গত 10 টি ট্রেডিং সময়ের মধ্যে সর্বোচ্চ বা সর্বনিম্ন মূল্য কিনা। যদি ক্রসওভার পয়েন্টটি সর্বোচ্চ মূল্য হয় তবে পটভূমি সবুজ রঙের হবে; যদি এটি সর্বনিম্ন মূল্য হয় তবে এটি লাল রঙের হবে। উপরন্তু, কৌশলটি চার্টে ক্রসওভার পয়েন্টের মূল্য প্রদর্শন করে।
এই কৌশলটি তার মূল যুক্তি হিসাবে এক্সপোনেন্সিয়াল চলমান গড় ক্রসওভার ব্যবহার করে, সাম্প্রতিক সময়ের ক্রসওভার পয়েন্টের দামের আপেক্ষিক অবস্থান বিবেচনা করে প্রবণতা শক্তি নির্ধারণ করে। সামগ্রিকভাবে, কৌশল যুক্তি পরিষ্কার, এবং সুবিধাগুলি সুস্পষ্ট, তবে এর কিছু সীমাবদ্ধতা এবং ঝুঁকিও রয়েছে। আরও সহায়ক বিচার সূচক প্রবর্তন করে, যুক্তিসঙ্গত ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা স্থাপন করে এবং মূল পরামিতিগুলি অনুকূল করে, এই কৌশলটির স্থায়িত্ব এবং লাভজনকতা আরও উন্নত করা যেতে পারে।
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 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/ // © ZenAndTheArtOfTrading // @version=5 strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Get user input emaLength1 = input.int(title="EMA #1 Length", defval=5) emaLength2 = input.int(title="EMA #2 Length", defval=10) // Get MAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) // Draw MAs plot(ema1, color=color.blue, title="EMA 1") plot(ema2, color=color.red, title="EMA 2") // Detect crossovers bool crossOver = ta.crossover(ema1, ema2) bool crossUnder = ta.crossunder(ema1, ema2) bool cross = crossOver or crossUnder //float crossPrice = ta.valuewhen(cross, close, 0) float crossPrice = cross ? close : na // Check if the crossover price is the highest price over the past 10 bars bool highestPrice = crossOver for i = 1 to 10 if crossPrice <= close[i] highestPrice := false break // Check if the crossover price is the lowest price over the past 10 bars bool lowestPrice = crossUnder for i = 1 to 10 if crossPrice >= close[i] lowestPrice := false break // Flag the bar if it is a high/low close bgcolor(highestPrice ? color.new(color.green, 50) : na) bgcolor(lowestPrice ? color.new(color.red, 50) : na) // Display crossover price if cross highestEmaPrice = ema1 > ema2 ? ema1 : ema2 label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white) if highestPrice and strategy.position_size == 0 strategy.entry(id="Buy", direction=strategy.long) if lowestPrice and strategy.position_size == 0 strategy.entry(id="Sell", direction=strategy.short) // Exit trades when short-term EMA is breached if strategy.position_size > 0 and crossUnder strategy.close("Buy") if strategy.position_size < 0 and crossOver strategy.close("Sell")