आरएसआई रणनीति का बैकटेस्टिंग और अनुकूलन

लेखक:चाओझांग, दिनांकः 2023-11-10 11:59:40
टैगः

img

अवलोकन

यह रणनीति ओवरबॉट और ओवरसोल्ड स्थितियों को निर्धारित करने के लिए आरएसआई (रिलेटिव स्ट्रेंथ इंडेक्स) संकेतक पर आधारित है। यह कम खरीदने और उच्च बेचने के लिए आरएसआई ओवरबॉट या ओवरसोल्ड स्तर तक पहुंचने पर काउंटर ट्रेंड पोजीशन लेता है। यह रणनीति सरल और प्रभावी है, जो बाजार में अल्पकालिक ओवरबॉट और ओवरसोल्ड परिदृश्यों से लाभान्वित होती है।

रणनीति तर्क

यह रणनीति केवल आरएसआई संकेतक को प्रवेश संकेत के रूप में उपयोग करती है। जब आरएसआई निम्न बिंदु (डिफ़ॉल्ट 20) से नीचे जाता है, तो यह लंबा हो जाता है, और जब आरएसआई उच्च बिंदु (डिफ़ॉल्ट 80) से ऊपर जाता है, तो यह छोटा हो जाता है। यह हर बार निश्चित राशि (डिफ़ॉल्ट $ 100) का व्यापार करता है और बाजार की स्थिति के बावजूद 1% लाभ का लक्ष्य रखता है। यदि नुकसान 3% तक पहुंचता है, तो यह बंद हो जाता है। व्यापार आवृत्ति को नियंत्रित करने के लिए, रणनीति एक हारने वाले व्यापार के बाद 24 बार के लिए व्यापार बंद कर देती है।

मूल तर्क यह है:

  1. ओवरबॉट/ओवरसोल्ड का निर्धारण करने के लिए आरएसआई का प्रयोग करें
  2. जब आरएसआई 20 से नीचे जाता है तो लंबे समय तक जाएं
  3. जब आरएसआई 80 से ऊपर जाता है तो शॉर्ट करें
  4. व्यापार हर बार $100 तय
  5. बंद करने के लिए लाभ या स्टॉप लॉस लें
  6. हानि के मामले में, 24 बार के लिए व्यापार को रोकें

जैसा कि हम देख सकते हैं, रणनीति बहुत सरल और यांत्रिक है। पैरामीटर अनुकूलन के लिए शायद ही कोई जगह है। यह विशुद्ध रूप से ओवरबॉट / ओवरसोल्ड क्षेत्रों के आसपास काउंटर ट्रेंड पोजीशन लेने के लिए आरएसआई के गणितीय गुणों का शोषण करता है।

लाभ विश्लेषण

इस रणनीति का सबसे बड़ा लाभ सरलता और दक्षता है।

  1. एकल सूचक आरएसआई का प्रयोग करता है, जटिल तकनीकी विश्लेषण की आवश्यकता नहीं है।
  2. पूरी तरह से यांत्रिक प्रणाली, भावनात्मक हस्तक्षेप से मुक्त।
  3. बाजार की दिशा की भविष्यवाणी किए बिना अल्पकालिक विचलन से लाभ।
  4. स्टॉप लॉस/टेक प्रॉफिट के साथ जोखिम प्रबंधित किया जाता है।

यह मुनाफे को लॉक करने और जोखिमों को नियंत्रित करने के लिए स्टॉप लॉस / टेक प्रॉफिट अनुपात को भी लागू करता है, साथ ही आवृत्ति को कम करने के लिए व्यापार निलंबन भी। यह जोखिमों को कम करते हुए इनाम को अधिकतम करता है।

जोखिम विश्लेषण

इस रणनीति के मुख्य जोखिम निम्नलिखित से आते हैंः

  1. मजबूत रुझान वाले बाजार में मुनाफा नहीं कमा सकता। रुझान जारी रहने पर आरएसआई अधिक खरीदे/बेचे गए क्षेत्र में लंबी अवधि तक रह सकता है।

  2. बहुत व्यापक स्टॉप लॉस अत्यधिक नुकसान का कारण बन सकता है। वर्तमान 3% स्टॉप लॉस को 1-2% तक कम करने की आवश्यकता हो सकती है।

  3. उच्च व्यापार आवृत्ति जीत के बाद अधिक व्यापार का कारण बन सकती है। व्यापार आवृत्ति को सीमित करने की आवश्यकता है।

  4. 100 डॉलर के आकार के जोखिमों पर ध्यान केंद्रित किया जाना चाहिए। पूंजी का प्रतिशत अनुकूलित करना चाहिए।

अनुकूलन दिशाएँ

विश्लेषण के आधार पर, रणनीति में निम्नलिखित तरीकों से सुधार किया जा सकता हैः

  1. ट्रेंड स्पष्ट नहीं होने पर ट्रेडिंग को रोकने के लिए एमए जैसे ट्रेंड फिल्टर जोड़ें.

  2. स्टॉप लॉस/टेक प्रॉफिट अनुपात को अनुकूलित करें। स्टॉप लॉस को 1-2% तक कम करें और गतिशील लाभ लें।

  3. व्यापार की आवृत्ति को सीमित करें, जैसे कि अधिकतम 2 व्यापार प्रति समय अवधि।

  4. 100 डॉलर के बजाय पूंजी के प्रतिशत के आधार पर व्यापार का आकार।

  5. आरएसआई मापदंडों को अनुकूलित करें जैसे कि अवधि, ओवरबॉट/सोल्ड स्तर।

  6. पूंजी में वृद्धि होने पर आकार में वृद्धि न करने के लिए स्थिति आकार जोड़ें।

इन अनुकूलन के साथ जोखिमों को कम किया जा सकता है और स्थिरता में काफी सुधार किया जा सकता है।

निष्कर्ष

संक्षेप में, यह आरएसआई का उपयोग करने के लिए एक सरल और सीधी रणनीति है ओवरबॉट / ओवरसोल्ड शर्तों का व्यापार करने के लिए अल्पकालिक औसत प्रतिगमन के लिए। पेशेवरों सादगी, दक्षता, कोई भविष्यवाणी की आवश्यकता नहीं है, स्पष्ट तर्क, परीक्षण करने में आसान है। विपक्ष मजबूत रुझानों और संभावित नुकसान में लाभ की अक्षमता है। रुझान फ़िल्टर, अनुकूलित मापदंडों, स्थिति आकार आदि जैसे जोड़ों के साथ, इसे स्थिरता और लाभप्रदता के लिए और बढ़ाया जा सकता है। तर्क व्यावहारिक व्यापार के लिए अभिनव और मूल्यवान है यदि ठीक से लागू किया जाता है।


/*backtest
start: 2023-11-02 00:00:00
end: 2023-11-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)

अधिक