MACD এবং RSI এর উপর ভিত্তি করে দীর্ঘ এবং সংক্ষিপ্ত দ্বিমুখী ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-10-09 15:33:17 অবশেষে সংশোধন করুন: 2023-10-09 15:33:17
অনুলিপি: 0 ক্লিকের সংখ্যা: 701
1
ফোকাস
1617
অনুসারী

ওভারভিউ

এই কৌশলটি MACD এবং RSI দুটি সূচককে একত্রিত করে এবং ট্রেন্ডের দিকনির্দেশনা অস্পষ্ট হলে, অতিরিক্ত লাভের জন্য একই সাথে অতিরিক্ত কুপন ট্রেডিং করা যায়।

কৌশল নীতি

  1. গণনা করুন দ্রুত EMA (১২ দিনের লাইন) এবং ধীর EMA (২৬ দিনের লাইন)
  2. MACD ঘূর্ণন বিচ্যুতি গণনা করুন (দ্রুত EMA বিয়োগ ধীর EMA)
  3. সিগন্যাল লাইন হিসাবে MACD এর 9 দিনের চলমান গড় গণনা করুন
  4. 14 দিনের RSI গণনা
  5. MACD <-0.1, RSI <27 এবং দ্রুত EMA কম হলে, আরও বেশি করুন
  6. যখন MACD>0.125 এবং RSI>81 এবং দ্রুত EMA ধীর EMA এর চেয়ে বেশি হয় তখন খালি করুন
  7. স্টপ, স্টপ লস এবং মুভিং স্টপ লস সেট করুন পজিশন ম্যানেজ করতে

সামর্থ্য বিশ্লেষণ

  1. একই সময়ে ওভারহোল্ডিং ট্রেডিং, ট্রেডিংয়ের বাইরে অতিরিক্ত মুনাফা অর্জন করা
  2. ট্রেন্ড ইমেজ ইএমএ এবং রিভার্স ইন্ডেক্স আরএসআই এর সাথে সংযুক্ত হয়ে সংকেতের গুণমান বাড়িয়ে তুলতে পারে
  3. মুনাফা লক করার জন্য মোবাইল স্টপ ব্যবহার করে ক্ষতির ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করা যায়

ঝুঁকি বিশ্লেষণ

  1. দ্বিপাক্ষিক লেনদেনের জন্য অতিরিক্ত অর্থের প্রয়োজন
  2. “অতিরিক্ত খালি পজিশনের ক্ষতি হতে পারে যখন পরিস্থিতি দ্রুত পরিবর্তিত হয়”
  3. ভুল প্যারামিটার সেট করা খুব ঘন ঘন লেনদেনের কারণ হতে পারে

ঝুঁকি মোকাবিলার উপায়ঃ

  1. পর্যাপ্ত তহবিল সমর্থন, পজিশনের আকার নিয়ন্ত্রণ
  2. যুক্তিসঙ্গতভাবে স্টপডাউন দূরত্ব সেট করুন, খুব ঘন স্টপডাউন এড়ান
  3. অপ্টিমাইজেশান প্যারামিটার, কম ট্রেডিং ফ্রিকোয়েন্সি

অপ্টিমাইজেশান দিক

  1. প্রবেশাধিকার সূচকগুলির সাথে মিলিতভাবে প্রবেশের সময়কে অনুকূলিতকরণ বিবেচনা করা যেতে পারে
  2. বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করে সেরা প্যারামিটার খুঁজুন
  3. বাজারের অবস্থার উপর ভিত্তি করে অপ্টিমাইজ করা যেতে পারে, যেমন স্টপ লস স্টপ
  4. মেশিন লার্নিং অ্যালগরিদম সহ স্বয়ংক্রিয় অপ্টিমাইজেশান প্যারামিটার

সারসংক্ষেপ

এই কৌশলটি MACD এবং RSI এর সমন্বয় দ্বারা দ্বিমুখী বাণিজ্যকে সক্ষম করে। মুনাফা লক করার জন্য মুভিং স্টপ ব্যবহার করে, অ-ট্রেন্ডিং পরিস্থিতিতে অতিরিক্ত লাভ অর্জন করা যায়। এই কৌশলটি আরও স্থিতিশীল অতিরিক্ত লাভ অর্জনের জন্য প্যারামিটার সেটিং, স্টপ-ডাউন কৌশল ইত্যাদি আরও অনুকূল করতে পারে।

কৌশল সোর্স কোড
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? true : false

// === Plot Setting ===

plot(fastMA,color=red)
plot(slowMA,color=blue)
barcolor(color=iff(fastMA > slowMA, yellow, na))
barcolor(color=iff(fastMA < slowMA, black, na))
//barcolor(color=iff(macd > 0.12*close , fuchsia, na))
//barcolor(color=iff(macd < -0.1*close , lime, na))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)