এই কৌশলটি প্রবণতা অনুসরণের জন্য ক্লাসিক ডুয়াল ইএমএ ক্রসওভার সিস্টেম ব্যবহার করে, এটিআর এবং এডিএক্স সূচক থেকে অতিরিক্ত ফিল্টার সহ, শক্তিশালী প্রবণতা ট্র্যাক করতে এবং সংহতকরণের সময় ঝুঁকি নিয়ন্ত্রণ করতে।
কৌশলটি মূলত নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করেঃ
ক্রসওভার সিগন্যাল তৈরি করতে একটি দ্রুত 8 পেরিওড ইএমএ এবং একটি ধীর 20 পেরিওড ইএমএ ব্যবহার করুন। ইএমএগুলির নিজস্ব প্রবণতা অনুসরণকারী বৈশিষ্ট্য রয়েছে।
এটিআর সূচক সাম্প্রতিক অস্থিরতা প্রতিফলিত করে। এটিআরকে স্বাভাবিককরণ করা EMA ক্রসওভার ফিল্টার অবস্থার গতিশীল সমন্বয়, শক্তিশালী প্রবণতার সময় প্রয়োজনীয়তা হ্রাস এবং ঝুঁকি নিয়ন্ত্রণের জন্য একীকরণের সময় বাড়ানোর অনুমতি দেয়।
ADX সূচক প্রবণতা শক্তি নির্ধারণ করে। 30 এর উপরে একটি ADX রিডিং একটি শক্তিশালী প্রবণতা প্রস্তাব করে, সময়মত স্টপ লস প্ররোচিত করে।
দীর্ঘ / সংক্ষিপ্ত প্রবেশের সময় নির্ধারণের জন্য ষাঁড় / ভালুক প্রবণতার সাথে একত্রিত করুন। একটি ষাঁড় বাজারে সোনার ক্রসগুলিতে দীর্ঘ এবং একটি ভালুক বাজারে মৃত্যুর ক্রসগুলিতে সংক্ষিপ্ত যান।
ভলিউম প্রসারিত হলে ভলিউম ফিল্টার প্রবেশ করতে হবে।
মার্কিন ডলারের শক্তি নির্ধারণের জন্য একটি সহজ ইউএসডি সূচক ব্যবহার করুন, শক্তিশালী ইউএসডি চলাকালীন স্টপ এবং লাভের পরিসীমা প্রসারিত করুন।
অতিরিক্ত দীর্ঘ/স্বল্পমেয়াদী সহায়তার জন্য সুপারট্রেন্ড সূচকটি ব্যবহার করে সামগ্রিক বাজারের দিকনির্দেশনা নির্ধারণ করুন।
কৌশলটি প্রবণতা এবং দোলন সূচকগুলিকে একত্রিত করে গতিশীলভাবে পরামিতিগুলি সামঞ্জস্য করে, ঝুঁকি নিয়ন্ত্রণের সময় প্রবণতা ট্র্যাক করে।
ডুয়াল ইএমএ সিস্টেম প্রবণতা নির্ধারণ করে, ইএমএ মসৃণতা মিথ্যা বিরতি ফিল্টার করে।
এটিআর-ন্যরমালাইজড ফিল্টারগুলি বিভিন্ন বাজারের পরিবেশের জন্য নমনীয়তা প্রদান করে।
ADX এবং ভলিউম সংহতকরণের সময় whipsaws এড়ানোর জন্য অতিরিক্ত চেক প্রদান করে।
ইউএসডি এবং সুপারট্রেন্ড বিবেচনা করে ম্যাক্রো ট্রেন্ডের সিদ্ধান্তের নির্ভুলতা উন্নত হয়।
মার্কিন ডলারের শক্তির ভিত্তিতে ঝুঁকি ব্যবস্থাপনা স্বয়ংক্রিয়ভাবে অভিযোজিত হয়।
সহজ গোল্ডেন/ডেড ক্রস সিগন্যাল এবং স্টপ/টেক মুনাফা লজিক এটি বাস্তবায়ন এবং ব্যাকটেস্ট করা সহজ করে তোলে।
ডুয়াল ইএমএ ট্রেন্ড টার্নিং পয়েন্ট সনাক্ত করতে বিলম্ব করে।
দুর্বল এটিআর পরামিতি নির্বাচন খুব আক্রমণাত্মক বা সংরক্ষণশীল হতে পারে।
ADX পরামিতি অপ্টিমাইজেশান প্রয়োজন, ভুলভাবে সেট উচ্চ পয়েন্ট প্রবণতা মিস করতে পারে।
ইউএসডি এবং সুপারট্রেন্ডের প্রবণতা নির্ধারণ ভুল হতে পারে।
স্টপ লস খুব টাইট হ্রাস বৃদ্ধি, খুব প্রশস্ত ঝুঁকি whipsaws.
টার্নওভার পয়েন্ট সনাক্তকরণের জন্য এমএসিডি এর মতো সূচক যুক্ত করার কথা বিবেচনা করুন।
আরো ঐতিহাসিক তথ্যের উপর ATR পরামিতি অপ্টিমাইজ করুন.
বিভিন্ন ADX পরামিতি পরীক্ষা করুন এবং উচ্চ পয়েন্ট থ্রেশহোল্ডগুলি অপ্টিমাইজ করুন।
মার্কিন ডলার এবং বাজার প্রবণতা বিশ্লেষণের জন্য আরও ভেরিয়েবল যুক্ত করুন।
ব্যাকটেস্টের পরিসংখ্যান থেকে সর্বোত্তম স্টপ লস শতাংশ গণনা করুন।
ট্রেলিং বা চ্যান্ডেলিয়ার স্টপ দিয়ে পরীক্ষা করুন।
এন্ট্রি আকার এবং ধরে রাখার সময়কাল অপ্টিমাইজ করা চালিয়ে যান।
এই কৌশলটি ক্লাসিক ডুয়াল ইএমএ সিস্টেমকে একাধিক সহায়ক সূচকগুলির সাথে একীভূত করে, একটি মোটামুটি শক্তিশালী প্রবণতা অনুসরণ পদ্ধতির জন্য প্যারামিটারাইজড অপ্টিমাইজেশন ব্যবহার করে। এটি ঝুঁকি নিয়ন্ত্রণের সময় পরিবর্তিত বাজারের পরিবেশে নমনীয়ভাবে অভিযোজিত হয়, ঝুঁকি নিয়ন্ত্রণের সাথে প্রবণতা ট্র্যাক করে। স্টপ এবং সূচক পরামিতিগুলির আরও পরীক্ষা এবং অপ্টিমাইজেশান ফলাফলগুলি উন্নত করবে। ধারণাগুলি থেকে শিখতে এবং উন্নত করার মূল্যবান।
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true) // Initialize variables to track if a buy order has been placed and number of periods since the last buy var bool hasBought = false var int barCountSinceBuy = 0 // Define EMA periods emaShort = ta.ema(close, 8) emaLong = ta.ema(close, 20) // Define ATR period and normalization atrLength = 14 atrValue = ta.atr(atrLength) maxHistoricalATR = ta.highest(atrValue, 20) minHistoricalATR = ta.lowest(atrValue, 20) normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR) // Define ADX parameters adxValue = ta.rma(close, 14) adxHighLevel = 30 isADXHigh = adxValue > adxHighLevel // Initialize risk management variables var float stopLossPercent = na var float takeProfitPercent = na var float trailingStop = na // Calculate USD strength (simplified) usd_strength = close / ta.ema(close, 50) - 1 // Adjust risk parameters based on USD strength if (usd_strength > 0) stopLossPercent := 3 takeProfitPercent := 6 else stopLossPercent := 4 takeProfitPercent := 8 // Initialize position variable var float positionPrice = na // Volume filter minVolume = ta.sma(volume, 14) * 1.5 isVolumeHigh = volume > minVolume // Piyasa yönü için süper trend göstergesi [supertrendValue, supertrendDirection] = ta.supertrend(4, 14) // Use a factor of 3 and ATR period of 10 bool isBullMarket = supertrendDirection < 0 bool isBearMarket = supertrendDirection > 0 // Yükselen piyasa için alım koşulu buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2 // Düşen piyasa için alım koşulu buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5 // Genel alım koşulu buyCondition = buyConditionBull or buyConditionBear // Yükselen ve düşen piyasalar için farklı satış koşulları sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh) sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh) // Genel satış koşulu sellCondition = sellConditionBull or sellConditionBear // Buy condition if (buyCondition) strategy.entry("Buy", strategy.long) positionPrice := close hasBought := true // Set the flag to true when a buy order is placed barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed // Increase the bar counter if a buy has been executed if (hasBought) barCountSinceBuy := barCountSinceBuy + 1 // Calculate stop-loss and take-profit levels longStopLoss = positionPrice * (1 - stopLossPercent / 100) longTakeProfit = positionPrice * (1 + takeProfitPercent / 100) // Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh if (finalSellCondition) strategy.close("Buy") positionPrice := na hasBought := false // Reset the flag when a sell order is placed barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed // Implement stop-loss, take-profit, and trailing stop strategy.exit("Stop Loss", "Buy", stop=longStopLoss) strategy.exit("Take Profit", "Buy", limit=longTakeProfit) //strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100) var label l = na if (buyCondition) l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength)) label.delete(l[1]) if (finalSellCondition) l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength)) label.delete(l[1]) // Plot signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")