मल्टी टाइमफ्रेम डायनेमिक बैकटेस्टिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-21 17:07:17
टैगः

img

अवलोकन

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

रणनीति तर्क

रणनीति कस्टम फ़ंक्शन f_get_htfHighLow को कॉल करके विभिन्न समय सीमाओं में उच्चतम मूल्य (nhigh) और निम्नतम मूल्य (nlow) प्राप्त करती है। विशेष रूप से, उपयोगकर्ता द्वारा परिभाषित इनपुट जैसे समय अवधि संकल्प, समय अवधि गुणक HTFMultiplier, बैकटेस्टिंग पैरामीटर लुकहेड और अंतराल, और ऑफसेट के आधार पर, यह विभिन्न समय सीमाओं पर उच्चतम और निम्नतम मूल्य प्राप्त करने के लिए सुरक्षा फ़ंक्शन को बुलाता है।

उदाहरण के लिए, 0 का ऑफसेट वर्तमान पट्टी के उच्चतम और निम्नतम मूल्य प्राप्त करता है, जबकि 1 का ऑफसेट पिछले पट्टी से उन कीमतों को प्राप्त करता है। पट्टी के बीच मूल्य परिवर्तन की तुलना करके, प्रवृत्ति की दिशा निर्धारित की जाती है।

यदि उच्चतम और निम्नतम दोनों कीमतें बढ़ती हैं, तो एक तेजी की प्रवृत्ति की पहचान की जाती है। यदि दोनों कीमतें गिरती हैं, तो एक मंदी की प्रवृत्ति देखी जाती है। आर्बिट्रेज ट्रेडों को लागू करने के लिए प्रवृत्ति की दिशा के आधार पर लॉन्गिंग या शॉर्टिंग स्थिति ली जाती है।

लाभ

  1. मल्टी टाइमफ्रेम विश्लेषण के माध्यम से बढ़ी हुई सटीकता
  2. गतिशील बैकटेस्टिंग के माध्यम से फिर से पेंटिंग से बचता है
  3. लचीले मापदंड बाजार परिवर्तनों को समायोजित करते हैं
  4. केवल स्पष्ट रुझानों में स्थितियों के साथ कम जोखिम

जोखिम

  1. कई समय सीमाओं पर गलत आकलन
  2. गलत बैकटेस्टिंग मापदंडों से रीपेंटिंग
  3. अत्यधिक व्यापार से उच्च लागत और फिसलन

समाधान:

  1. सटीकता के लिए समय अवधि का अनुकूलन करें
  2. पुनः चित्रण को रोकने के लिए सख्ती से परीक्षण पैरामीटर
  3. नियंत्रण आवृत्ति के लिए मध्यम प्रवेश स्थितियां

बढ़ोतरी के अवसर

  1. रुझानों के लिए एआई का लाभ उठाने के लिए एमएल जोड़ें
  2. गतिशील स्थिति आकार के लिए अस्थिरता फ़िल्टर शामिल करें
  3. घाटे को प्रभावी ढंग से सीमित करने के लिए स्टॉप लागू करें

निष्कर्ष

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


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("HTF High/Low Repaint Strategy", overlay=true, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

resolution = input("3M", type=input.resolution)
HTFMultiplier = input(22, minval=1, step=1)
offset = input(0, minval=0, step=1)
lookahead = input(true)
gaps = false

f_secureSecurity_on_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_on)
f_secureSecurity_on_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off)
f_secureSecurity_off_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_on)
f_secureSecurity_off_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_off)

f_multiple_resolution(HTFMultiplier) => 
    target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
      timeframe.isseconds   ? 1. / 60. :
      timeframe.isminutes   ? 1. :
      timeframe.isdaily     ? 1440. :
      timeframe.isweekly    ? 7. * 24. * 60. :
      timeframe.ismonthly   ? 30.417 * 24. * 60. : na)

    target_Res_In_Min     <= 0.0417       ? "1S"  :
      target_Res_In_Min   <= 0.167        ? "5S"  :
      target_Res_In_Min   <= 0.376        ? "15S" :
      target_Res_In_Min   <= 0.751        ? "30S" :
      target_Res_In_Min   <= 1440         ? tostring(round(target_Res_In_Min)) :
      tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"

f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)=>
    derivedResolution = resolution == ""?f_multiple_resolution(HTFMultiplier):resolution
    nhigh_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh = lookahead and gaps ? nhigh_on_on :
             lookahead and not gaps ? nhigh_on_off :
             not lookahead and gaps ? nhigh_off_on :
             not lookahead and not gaps ? nhigh_off_off : na
    nlow = lookahead and gaps ? nlow_on_on :
             lookahead and not gaps ? nlow_on_off :
             not lookahead and gaps ? nlow_off_on :
             not lookahead and not gaps ? nlow_off_off : na
    [nhigh, nlow]
    
[nhigh, nlow] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)
[nhighlast, nlowlast] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset+1)
plot(nhigh , title="HTF High",style=plot.style_circles, color=color.green, linewidth=1) 
plot(nlow , title="HTF Low",style=plot.style_circles, color=color.red, linewidth=1)

buyCondition = nhigh > nhighlast and nlow > nlowlast
sellCondition = nhigh < nhighlast and nlow < nlowlast

strategy.entry("Buy", strategy.long, when= buyCondition and inDateRange, oca_name="oca_buy")
strategy.entry("Sell", strategy.short, when= sellCondition and inDateRange, oca_name="oca_sell")


अधिक