কৌশল অনুসারে মাল্টি-ফ্যাক্টর চলমান গড় প্রবণতা

লেখক:চাওঝাং, তারিখঃ 2024-01-18 12:07:52
ট্যাগঃ

img

সারসংক্ষেপ

এটি বিটকয়েন এবং ইথেরিয়ামের জন্য উপযুক্ত একটি সহজ চলমান গড় প্রবণতা অনুসরণকারী কৌশল। এটি প্রবণতার দিক নির্ধারণের জন্য চলমান গড়, এমএসিডি এবং আরএসআইয়ের মতো একাধিক সূচককে একত্রিত করে এবং দীর্ঘমেয়াদী প্রবণতা ট্র্যাকিংয়ের জন্য স্থির অবস্থানের আকার গ্রহণ করে।

কৌশলগত যুক্তি

কৌশলটির মূল যুক্তি হ'ল যখন 20-দিনের ইএমএ 100-দিনের এসএমএ এর উপরে এবং 100-দিনের এসএমএ 200-দিনের এসএমএ এর উপরে ক্রস করে তখন দীর্ঘ যেতে হবে; যখন 20-দিনের ইএমএ 100-দিনের এসএমএ এর নীচে ক্রস করে তখন অবস্থান বন্ধ করুন। অর্থাৎ, প্রবণতা দিক নির্ধারণের জন্য বিভিন্ন সময়ের তিনটি চলমান গড় ব্যবহার করুন।

বিশেষত, কৌশলটি 20 দিনের ইএমএ, 100 দিনের এসএমএ এবং 200 দিনের এসএমএর মান গণনা করে এবং প্রবণতা বিচার করার জন্য তাদের মাত্রা সম্পর্ক তুলনা করে। যখন 20 দিনের ইএমএ 100 দিনের এসএমএর উপরে অতিক্রম করে, এর অর্থ হল যে দামগুলি বাড়তে শুরু করেছে। এই মুহুর্তে, যদি 100 দিনের এসএমএ 200 দিনের এসএমএর চেয়েও বেশি হয় তবে এটি নির্দেশ করে যে মাঝারি এবং দীর্ঘমেয়াদী প্রবণতাও বাড়ছে। এটি একটি শক্তিশালী দীর্ঘ সংকেত।

লং পজিশনে প্রবেশের পর, কৌশলটি প্রবণতা অনুসরণ করার জন্য অবস্থানটি ধরে রাখবে। যখন 20 দিনের ইএমএ আবার 100 দিনের এসএমএর নীচে অতিক্রম করে, এটি নির্দেশ করে যে একটি স্বল্পমেয়াদী প্রবণতা বিপরীত সংকেত ঘটেছে। এই মুহুর্তে, কৌশলটি ক্ষতি বন্ধ করার জন্য অবস্থানগুলি বন্ধ করতে বেছে নেবে।

এছাড়াও, কৌশলটি প্রবণতা নিশ্চিত করার জন্য MACD এবং RSI এর মতো সূচকগুলিও অন্তর্ভুক্ত করে। শুধুমাত্র যখন MACD এর DIF লাইন, DEMA লাইন এবং HIST বার লাইন সবগুলিই বৃদ্ধি পাচ্ছে এবং RSI সূচকটি 50 এর উপরে থাকে, তখনই এটি লং পজিশন খুলতে বেছে নেবে।

সুবিধা

এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে এটি স্পষ্ট ট্রেন্ড ট্রেডিং নিয়ম তৈরি করে যা মধ্যম ও দীর্ঘমেয়াদী প্রবণতা কার্যকরভাবে ট্র্যাক করতে পারে। নির্দিষ্ট সুবিধাগুলি নিম্নরূপঃ

  1. প্রবণতা বিচার করার জন্য একাধিক চলমান গড় ব্যবহার করুন, যা তুলনামূলকভাবে নির্ভরযোগ্য।

  2. স্বল্পমেয়াদী বাজার ওঠানামা দ্বারা বিরক্ত না হয়ে প্রবণতা আন্দোলন ট্র্যাক করার জন্য দীর্ঘমেয়াদী হোল্ডিং পজিশন গ্রহণ করুন।

  3. কৌশল সংকেত নিশ্চিতকরণের জন্য MACD এবং RSI এর মতো সূচকগুলির সংমিশ্রণ মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে পারে।

  4. এএমএ এবং এসএমএ লাইনের গোল্ডেন ক্রস এবং ডেথ ক্রস ব্যবহার করে প্রবেশ এবং প্রস্থান পয়েন্টগুলি নির্ধারণ করার নিয়মগুলি সহজ এবং পরিষ্কার।

  5. স্টপ লসের মাধ্যমে ক্ষতির পরিমাণ সীমিত করে ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করতে পারে।

ঝুঁকি এবং সমাধান

এই কৌশলটির কিছু ঝুঁকিও রয়েছে। মূল সমস্যাটি হ'ল এটি প্রবণতা বিপরীত হওয়ার সময় সময়মতো ক্ষতি বন্ধ করতে পারে না। নির্দিষ্ট ঝুঁকি এবং সমাধানগুলি নিম্নরূপঃ

  1. সময়মতো প্রবণতা বিপরীত পয়েন্টগুলি ট্র্যাক করতে অক্ষমঃ চলমান গড় চক্রগুলি সংক্ষিপ্ত করুন, বা বিস্তৃত বিচারের জন্য আরও সূচক যুক্ত করুন।

  2. দীর্ঘ সময় ধরে রাখা সহজেই বৃহত্তর ক্ষতির দিকে পরিচালিত করতে পারেঃ সময়মতো স্টপ লস পেতে সঠিকভাবে আউটপুট লাইনগুলি সংক্ষিপ্ত করুন।

  3. চলমান গড় সূচকগুলি বিলম্বিত হতে থাকেঃ সক্রিয় স্টপ লসের জন্য স্টপ লস লাইনের একটি নির্দিষ্ট শতাংশ যুক্ত করুন।

অপ্টিমাইজেশান নির্দেশাবলী

এই কৌশলটি নিম্নলিখিত দিকগুলিতেও অপ্টিমাইজ করা যেতে পারেঃ

  1. সর্বোত্তম পরামিতি খুঁজে পেতে চলমান গড় চক্রের আরও সংমিশ্রণ পরীক্ষা করুন।

  2. প্রবণতা এবং প্রবেশের সময় নির্ধারণের জন্য অন্যান্য সূচক বা মডেল ব্যবহার করুন। যেমন বোলিঞ্জার ব্যান্ড, কেডি সূচক ইত্যাদি।

  3. মেশিন লার্নিং এবং অন্যান্য পদ্ধতিগুলি ব্যবহার করুন গতিশীলভাবে পরামিতিগুলি অনুকূলিত করতে। উদাহরণস্বরূপ, স্টপ লস প্রশস্ততা সামঞ্জস্য করতে রিইনফোর্সমেন্ট লার্নিং ব্যবহার করুন।

  4. মিথ্যা ব্রেকআউট এড়াতে ট্রেডিং ভলিউম সূচক অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, ব্যালেন্স ভলিউম, লেনদেনের ভলিউম ইত্যাদি

  5. স্বয়ংক্রিয় স্টপ লস এবং ট্র্যাকিং স্টপ লস সিস্টেম তৈরি করুন যা বাজারের অবস্থার উপর ভিত্তি করে স্টপ লস অবস্থানগুলি সামঞ্জস্য করতে পারে।

সিদ্ধান্ত

সংক্ষেপে, এই কৌশলটি একটি সহজ এবং সরল প্রবণতা অনুসরণকারী কৌশল। এটি প্রবণতা দিক নির্ধারণের জন্য চলমান গড়, এমএসিডি এবং আরএসআইকে সংকেতগুলি ফিল্টার করতে ব্যবহার করে। প্রবণতা আন্দোলনগুলি ট্র্যাক করার জন্য তুলনামূলকভাবে দীর্ঘ ধরে রাখার সময় গ্রহণ করুন। এটি কার্যকরভাবে মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা সুযোগগুলি ক্যাপচার করতে পারে। একই সাথে, প্রবণতা বিপরীত চিহ্নিতকরণে পিছিয়ে যাওয়ার ঝুঁকিও রয়েছে। ভবিষ্যতের উন্নতি এবং আপগ্রেডগুলি পরামিতি অপ্টিমাইজেশান, সূচক যুক্ত করা ইত্যাদির মাধ্যমে করা যেতে পারে।


/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BTC_Long_Only_TV01_200507", overlay=true)

//////////// !!!!!!!!!!!!!!!! WORK BEST IN 2 HOURS for BTC, ETH and ETHXBT !!!!!!!!!!!!!!!!!!! /////////////////////
//280820 - After long esting this is the best script for ETHUSD in 4 hours. From 01/01/2020 til 28/08/2020


[macdLine, macdSignalLine, macdHist] = macd(close, 12, 26, 7)  

//_rsi_len = input(14, title="RSI length")
_rsi_len = 14 
  
NewValue = 0
PreviousValue = 0
leverage = 1

smaPercentageIncrease = 0.0
SMA_PERCENT_INCREASE = 0.0
float atrValue = 0
bool bPositionOpened = false
float stockPositionSize = 0 
float volatilityPercentage = 0.0
bool bDisplayArrow = false 
bool bEMAIsRising = false
bool bSMAIsRising = false
bool bSMASlowIsRising = false
bool bMACDIsRising = false
bool bMACDHistIsRising = false
bool bMACDSignalIsRising = false

float stopLoss = input (5, "StopLoss in %", type=input.float) //StopLoss associated with the order
//Best for alt versus BTC float stopLoss = input (3, "StopLoss in %", type=input.float) //StopLoss associated with the order 
float positionSize = 1000
float currentPrice = close 
float stopLossPrice = 0
float entryPrice = 0


//-----------------------------------------------------------


// === INPUT BACKTEST RANGE ONE YEAR 
//FromDay   = input(defval = 01, title = "From Day", minval = 1, maxval = 31)
//FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12)
//FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
FromDay   = 01
FromMonth = 01
FromYear  = 2020

//ToDay     = input(defval = 01, title = "To Day", minval = 1, maxval = 31)
//ToMonth   = input(defval = 01, title = "To Month", minval = 1, maxval = 12)
//ToYear    = input(defval = 2023, title = "To Year", minval = 2017)
ToDay     = 14
ToMonth   = 05
ToYear    = 2029

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


//FUNCTION DEFINITIONS
//----------------------
IsRising(data, loopBack) =>
    bIsRising = true
    for n = 1 to loopBack
        if data[n] > data[n-1]
            bIsRising := false
        continue
    bIsRising
    
IsFalling(data, loopBack) =>
    bIsFalling = true
    for n = 1 to loopBack
        if data[n] < data[n-1]
            bIsFalling := false
        continue
    bIsFalling
    
// END OF FUNCTION DEFINITIONS //


emaLength = 20
smaLength = 100
smaSlowLength = 200
 
ema = ema(close, emaLength) 
sma = sma(close, smaLength)
smaSlow = sma(close, smaSlowLength)

plot(sma, color=color.green)
plot(smaSlow, color=color.orange)
plot(ema, color=color.yellow)

//reload previous values
stopLossPrice := na(stopLossPrice[1]) ? 0.0 : stopLossPrice[1]
entryPrice := na(entryPrice[1]) ? 0.0 : entryPrice[1]
bPositionOpened := na(bPositionOpened[1]) ? false : bPositionOpened[1]
positionSize := na(positionSize[1]) ? 1000 : positionSize[1]
stockPositionSize := na(stockPositionSize[1]) ? 0 : stockPositionSize[1]
//leverage := na(leverage[1]) ? 1 : leverage[1]

bEMAIsRising := IsRising(ema, 2) 
bSMAIsRising := IsRising(sma, 3)
bMACDIsRising := IsRising(macdLine, 3)
bMACDHistIsRising := IsRising(macdHist, 1)
bSMASlowIsRising := IsRising(smaSlow, 10)
bMACDSignalIsRising := IsRising(macdSignalLine, 3)


atrValue := atr(14)
volatilityPercentage := (atrValue/currentPrice)*100 //calcute the volatility. Percentage of the actual price

 
if (window()) 
    //Check if we can open a LONG
    if (bPositionOpened == false and bSMASlowIsRising == true and bMACDIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[0] > sma[0] and sma[0] < currentPrice)
        //Enter in short position 
        stockPositionSize := (positionSize*leverage)/currentPrice //Calculate the position size based on the actual price and the position Size (in $) configured.
        
        //calculate exit values
        stopLossPrice := currentPrice*(1-stopLoss/100) 
        strategy.entry("myPosition", strategy.long, qty=stockPositionSize, comment="BUY at " + tostring(currentPrice))
        entryPrice := currentPrice //store the entry price
        bPositionOpened := true  
        bDisplayArrow := true 
        
    if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1])))
        strategy.close("myPosition", comment="" + tostring(currentPrice) ) //Stop
        //uncomment the below line to make the bot investing the full portfolio amount to test compounding effect.
        //positionSize := positionSize + ((stockPositionSize * currentPrice) - (positionSize*leverage)) 
        //reset some flags 
        bPositionOpened := false 
        bDisplayArrow := true 
        entryPrice := 0.0
        


আরো