2
ध्यान केंद्रित करना
319
समर्थक

इन्वेंटर प्लेटफ़ॉर्म गोल्ड रश: एक अत्यधिक लचीले पायथन ट्रेंड ट्रेडिंग फ्रेमवर्क का व्यावहारिक विश्लेषण

में बनाया: 2025-08-22 17:25:52, को अपडेट: 2025-08-26 09:56:27
comments   0
hits   468

मैं अक्सर आविष्कारक मंच पर घूमता रहता हूँ और हमेशा कुछ न कुछ नया खोजता रहता हूँ। आज मुझे एक 21 साल का लड़का मिला।रुझान रणनीतिमैं मूल लेखक की उत्तम और उत्तम कोड संरचना की प्रशंसा करता हूँ, और इसमें उच्च लचीलापन है। मूल रणनीति JS संस्करण है, जिसे पायथन मित्रों की सुविधा के लिए फिर से लिखा गया है।

सच कहूँ तो, कई शुरुआती लोग क्वांटिटेटिव ट्रेडिंग में कदम रखते समय कई तरह के चक्कर लगाते हैं। उन्हें अक्सर असफल ऑर्डर, खराब जोखिम प्रबंधन से होने वाले नुकसान और रणनीति को दोबारा शुरू करने पर डेटा हानि जैसी समस्याओं का सामना करना पड़ता है। बाद में, मुझे धीरे-धीरे एक अच्छे फ्रेमवर्क के महत्व का एहसास हुआ, जो हमें कई नुकसानों से बचने में मदद कर सकता है। यह ट्रेंड स्ट्रैटेजी फ्रेमवर्क एक बेहद मूल्यवान उपकरण है। यह सिर्फ़ एक साधारण ट्रेडिंग रणनीति से कहीं बढ़कर है; यह एक टूलबॉक्स की तरह है, जो आपको ऑर्डर प्लेसमेंट, स्टॉप-लॉस ऑर्डर और डेटा प्रबंधन जैसे बुनियादी लेकिन ज़रूरी काम प्रदान करता है। आपको बस “कब खरीदें” और “कब बेचें” जैसे मुख्य सवालों पर ध्यान केंद्रित करने की ज़रूरत है। इसके अलावा, यह फ्रेमवर्क बहुत ही खुला-समाप्त है, जिससे आप आसानी से EMA को MACD, RSI, या अपनी पसंद के किसी भी अन्य संकेतक से बदल सकते हैं। क्या आप रुझानों का अनुसरण करना चाहते हैं? कोई बात नहीं। क्या आप मीन रिवर्सन आज़माना चाहते हैं? क्या आप कई संकेतकों को मिलाना भी चाहते हैं? बिल्कुल। यह लचीलापन अविश्वसनीय रूप से उपयोगी है; आप अलग-अलग विचारों के साथ प्रयोग करने के लिए एक ही कोड को संशोधित कर सकते हैं।

मैं आज यह फ्रेमवर्क साझा कर रहा हूँ, उम्मीद है कि यह मात्रात्मक निवेश की खोज करने वालों के लिए मददगार होगा। नीचे इस फ्रेमवर्क के प्रत्येक घटक का विस्तृत परिचय दिया गया है, जो मुझे विश्वास है कि आपको उपयोगी लगेगा।

फ्रेमवर्क संरचना और कार्य

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

आरंभीकरण और सेटअप

init फ़ंक्शन

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

initDatas फ़ंक्शन

  • कार्य: रणनीति चलने पर डेटा को आरंभ करता है, जिसमें खाता परिसंपत्तियां, लाभ आंकड़े आदि शामिल हैं।
  • कदम
    1. नीति निष्पादन समय बचाएँ.
    2. स्थानीय उपयोगकर्ता डेटा पढ़ें.
    3. खाता परिसंपत्तियां, आय आंकड़े और अन्य डेटा आरंभ करें।
    4. जाँचता है कि क्या लाभ लेना और कॉलबैक लाभ लेना एक ही समय पर सक्षम हैं।

डेटा प्रबंधन और भंडारण

saveStrategyRunTime फ़ंक्शन

  • कार्य: आगामी आंकड़ों और निगरानी के लिए नीति का आरंभ समय सहेजें।
  • कदम
    1. जांचें कि क्या चलने का समय स्थानीय रूप से सहेजा गया है।
    2. यदि सहेजा नहीं गया है, तो वर्तमान समय रिकॉर्ड करें और उसे स्थानीय रूप से सहेजें।
    3. यदि इसे सहेजा गया है, तो स्थानीय रूप से सहेजे गए समय को पढ़ें।

setStrategyRunTime फ़ंक्शन

  • कार्य: नीति के लिए प्रारंभ समय निर्धारित करें और उसे स्थानीय संग्रहण में सहेजें.
  • कदम
    1. प्लेटफ़ॉर्म का उपयोग करना_Gफ़ंक्शन पास किए गए टाइमस्टैम्प को स्थानीय रूप से सहेजता है।
    2. नीति डेटा में प्रारंभ रन समय को अद्यतन करें.

getDaysFromTimeStamp फ़ंक्शन

  • कार्य: नीति निष्पादन की अवधि की गणना करने के लिए दो टाइमस्टैम्प के बीच दिनों के अंतर की गणना करता है।
  • कदम
    1. जाँचता है कि क्या समाप्ति समय, प्रारंभ समय से पहले है, और यदि ऐसा है तो 0 लौटाता है।
    2. दो टाइमस्टैम्प के बीच सेकंड में अंतर की गणना करता है और इसे दिनों में परिवर्तित करता है।
    3. दिनों में अंतर लौटाता है.

saveUserDatasLocal फ़ंक्शन

  • कार्य: नीति निष्पादन के दौरान मुख्य डेटा को स्थानीय कंप्यूटर पर सहेजें ताकि नीति को पुनः आरंभ करने पर उसे पुनर्स्थापित किया जा सके।
  • कदम
    1. पैकेज डेटा जैसे खाता परिसंपत्तियां और आय आंकड़े।
    2. प्लेटफ़ॉर्म का उपयोग करना_Gयह फ़ंक्शन डेटा को स्थानीय रूप से सहेजता है।

readUserDataLocal फ़ंक्शन

  • कार्य: नीति को पुनः आरंभ करने पर डेटा पुनर्प्राप्ति के लिए स्थानीय रूप से सहेजे गए उपयोगकर्ता डेटा को पढ़ें।
  • कदम
    1. जांचें कि क्या कोई डेटा स्थानीय रूप से सहेजा गया है।
    2. यदि नहीं, तो डेटा को आरंभीकृत करें और उसे स्थानीय रूप से सहेजें।
    3. यदि ऐसा है, तो इसे पढ़ा जाता है और पॉलिसी में लोड किया जाता है।

clearUserDataLocal फ़ंक्शन

  • कार्य: स्थानीय रूप से सहेजे गए उपयोगकर्ता डेटा को साफ़ करें, जिसका उपयोग आमतौर पर नीति रीसेट या डीबगिंग के लिए किया जाता है।
  • कदम
    1. प्लेटफ़ॉर्म का उपयोग करना_Gफ़ंक्शन स्थानीय डेटा साफ़ करता है.
    2. लॉग समाशोधन कार्य.

नीतिगत अंतःक्रिया और आदेश प्रसंस्करण

runCmd फ़ंक्शन

  • कार्य: इंटरैक्टिव इंटरफ़ेस के माध्यम से उपयोगकर्ताओं द्वारा भेजे गए आदेशों को संसाधित करता है, जैसे स्थानीय डेटा साफ़ करना, ऑर्डर मात्रा को संशोधित करना, आदि।
  • कदम
    1. उपयोगकर्ता द्वारा भेजा गया आदेश प्राप्त करें.
    2. कमांड प्रकार के आधार पर संबंधित ऑपरेशन निष्पादित करें, जैसे स्थानीय डेटा साफ़ करना, ऑर्डर मात्रा संशोधित करना आदि।
    3. कमांड निष्पादन परिणाम रिकॉर्ड करें.

व्यापार और आदेश प्रबंधन

ऑर्डरडायरेक्टली फ़ंक्शन

  • कार्य: दिशा और मूल्य के आधार पर सीधे ऑर्डर दें, आरंभिक और समापन परिचालन का समर्थन करें।
  • कदम
    1. दिशा (खरीद या बिक्री) के अनुसार ट्रेडिंग फ़ंक्शन का चयन करें।
    2. व्यापार की दिशा निर्धारित करें.
    3. ऑर्डर ऑपरेशन निष्पादित करें और परिणाम लौटाएं.

openLong फ़ंक्शन

  • कार्य: एक लंबी स्थिति खोलें और मूल्य और मात्रा के आधार पर एक ऑर्डर दें।
  • कदम
    1. वास्तविक ऑर्डर मात्रा की गणना करें.
    2. पुकारनाorderDirectlyयह फ़ंक्शन एक खरीद ऑपरेशन निष्पादित करता है।

openShort फ़ंक्शन

  • कार्य:एक छोटी स्थिति खोलें और मूल्य और मात्रा के आधार पर एक ऑर्डर दें।
  • कदम
    1. वास्तविक ऑर्डर मात्रा की गणना करें.
    2. पुकारनाorderDirectlyयह फ़ंक्शन विक्रय ऑपरेशन निष्पादित करता है।

कवरलॉन्ग फ़ंक्शन

  • कार्य:लंबी स्थिति को बंद करें और मूल्य और मात्रा के आधार पर ऑर्डर दें।
  • कदम
    1. पुकारनाorderDirectlyयह फ़ंक्शन विक्रय ऑपरेशन निष्पादित करता है।

कवरशॉर्ट फ़ंक्शन

  • कार्य:लघु स्थिति को बंद करें और मूल्य और मात्रा के आधार पर ऑर्डर दें।
  • कदम
    1. पुकारनाorderDirectlyयह फ़ंक्शन एक खरीद ऑपरेशन निष्पादित करता है।

getRealOrderSize फ़ंक्शन

  • कार्य: मूल्य और मात्रा के आधार पर वास्तविक ऑर्डर मात्रा की पुनर्गणना करें, और मार्जिन अनुपात के आधार पर ऑर्डर देने का समर्थन करें।
  • कदम
    1. मार्जिन अनुपात के अनुसार ऑर्डर दिया गया है या नहीं, इसके आधार पर वास्तविक ऑर्डर मात्रा की गणना करें।
    2. गणना की गई ऑर्डर मात्रा लौटाता है.

जोखिम प्रबंधन और रिटर्न सांख्यिकी

getSinglePositionMargin फ़ंक्शन

  • कार्य: एकल स्थिति द्वारा व्याप्त मार्जिन की गणना करें।
  • कदम
    1. मार्जिन की गणना स्थिति की दिशा और मात्रा के आधार पर की जाती है।
    2. गणना परिणाम लौटाता है.

getSinglePositionProfit फ़ंक्शन

  • कार्य: एकल स्थिति की आय और उपज की गणना करें।
  • कदम
    1. स्थिति दिशा और वर्तमान मूल्य के आधार पर लाभ की गणना करें।
    2. आय और उपज लौटाता है।

calculateForcedPrice फ़ंक्शन

  • कार्य: किसी स्थिति के परिसमापन मूल्य की गणना करता है।
  • कदम
    1. परिसमापन मूल्य की गणना स्थिति दिशा और खाता शेष के आधार पर की जाती है।
    2. गणना परिणाम लौटाता है.

getMaxOrderSize फ़ंक्शन

  • कार्य: अधिकतम ऑर्डर मात्रा की गणना करें.
  • कदम
    1. अधिकतम ऑर्डर मात्रा की गणना खाते की शेष राशि और उत्तोलन के आधार पर की जाती है।
    2. गणना परिणाम लौटाता है.

getAccountAsset फ़ंक्शन

  • कार्य: स्थिति और उपलब्ध शेष सहित कुल खाता परिसंपत्तियों की गणना करता है।
  • कदम
    1. स्थिति और खाता शेष के आधार पर कुल इक्विटी की गणना करें।
    2. गणना परिणाम लौटाता है.

calculateProfit फ़ंक्शन

  • कार्य: रणनीति के रिटर्न की गणना करें और रिकॉर्ड करें।
  • कदम
    1. वर्तमान कुल रिटर्न और प्रारंभिक परिसंपत्तियों के बीच अंतर की गणना करें।
    2. लाभ रिकॉर्ड करें और सांख्यिकीय चर को अद्यतन करें।
    3. आय डेटा को स्थानीय स्तर पर सहेजें.

isEnoughAssetToOrder फ़ंक्शन

  • कार्य: जांचें कि क्या खाते में धनराशि ऑर्डर देने के लिए पर्याप्त है।
  • कदम
    1. खाते की शेष राशि की जानकारी प्राप्त करें.
    2. लेनदेन मुद्रा प्रकार (USDT-आधारित या सिक्का-आधारित) के आधार पर आवश्यक धनराशि की गणना करें।
    3. जाँच करें कि खाता शेष ऑर्डर आवश्यकताओं को पूरा करता है या नहीं।
    4. एक बूलियन मान लौटाता है जो यह बताता है कि धनराशि पर्याप्त है या नहीं।

प्रवृत्ति निर्णय और व्यापारिक तर्क

runInKLinePeriod फ़ंक्शन

  • कार्य: निर्धारित करें कि K-लाइन चक्र के आधार पर रणनीति तर्क को निष्पादित किया जाए या नहीं।
  • कदम
    1. जाँच करें कि क्या वर्तमान K-लाइन संसाधित की गई है।
    2. यदि संसाधित नहीं हुआ है, तो इसे संसाधित के रूप में चिह्नित करें और वापस लौटा देंTrueअन्यथा वापस लौटेंFalse

ट्रेंड जजमेंट फ़ंक्शन (कोर ट्रेंड जजमेंट मॉड्यूल)

  • कार्यतकनीकी संकेतकों के आधार पर वर्तमान रुझान निर्धारित करें। यह पूरे ढांचे में सबसे लचीला मॉड्यूल है। उपयोगकर्ता अपनी आवश्यकताओं के अनुसार रुझान निर्धारित करने के लिए विभिन्न तकनीकी संकेतकों को बदल सकते हैं।
  • वर्तमान कार्यान्वयन: प्रवृत्ति निर्धारित करने के लिए मानक विचलन के साथ संयुक्त EMA (एक्सपोनेंशियल मूविंग एवरेज) का उपयोग करें
  • अनुमापकतायह फ़ंक्शन एक प्लग करने योग्य मॉड्यूल के रूप में डिज़ाइन किया गया है, और उपयोगकर्ता इसे आसानी से अन्य तकनीकी संकेतकों के साथ बदल सकते हैं, जैसे:
    • आरएसआई (सापेक्ष शक्ति सूचकांक):अति-खरीदी और अति-बिक्री की स्थिति का आकलन करना
    • एमएसीडी (मूविंग एवरेज कन्वर्जेंस डाइवर्जेंस): प्रवृत्ति के मोड़ों की पहचान करें
    • बोलिंगर बैंड:मूल्य अस्थिरता के आधार पर प्रवृत्ति निर्णय
    • केडीजे सूचक:गति और प्रवृत्ति का संयुक्त निर्णय
    • बहुआयामी पोर्टफोलियो: अधिक सटीक प्रवृत्ति निर्णय के लिए कई संकेतकों को संयोजित किया जा सकता है
  • कदम
    1. ईएमए सूचक की गणना करें और निर्धारित करें कि क्या कीमत इसे पार करती है।
    2. मानक विचलन के आधार पर निर्धारित करें कि क्या यह प्रवृत्ति में है।
    3. वर्तमान प्रवृत्ति (दीर्घ, लघु या सीमा) लौटाता है।

स्टॉपलॉस फ़ंक्शन

  • कार्यस्टॉप-लॉस नियमों के अनुसार स्टॉप-लॉस ऑपरेशन निष्पादित करें।
  • कदम
    1. जांचें कि क्या स्थिति स्टॉप लॉस की स्थिति तक पहुंचती है।
    2. यदि यह सीमा पार हो जाती है, तो स्थिति बंद कर दी जाएगी और स्टॉप लॉस की जानकारी दर्ज कर ली जाएगी।

takeProfit फ़ंक्शन

  • कार्य:लाभ-प्राप्ति नियमों के अनुसार लाभ-प्राप्ति संचालन निष्पादित करें।
  • कदम
    1. जाँच करें कि क्या स्थिति लाभ लेने की शर्तों को पूरा करती है।
    2. यदि यह सीमा पार हो जाती है, तो स्थिति बंद कर दी जाएगी और लाभ लेने की जानकारी दर्ज कर ली जाएगी।

ट्रैकिंगटेकप्रॉफिट फ़ंक्शन

  • कार्य: कॉलबैक टेक-प्रॉफिट नियमों के अनुसार टेक-प्रॉफिट ऑपरेशन निष्पादित करें।
  • कदम
    1. जाँच करें कि क्या स्थिति कॉलबैक लाभ ट्रिगर शर्तों को पूरा करती है।
    2. यदि यह सीमा पार हो जाती है, तो स्थिति बंद कर दी जाएगी और लाभ लेने की जानकारी दर्ज कर ली जाएगी।

ऑर्डर फ़ंक्शन

  • कार्य: प्रवृत्ति निर्णय परिणामों के आधार पर आदेश संचालन निष्पादित करें।
  • कदम
    1. वर्तमान स्थिति की जाँच करें.
    2. प्रवृत्ति निर्णय परिणामों के आधार पर स्थिति खोलें या बंद करें।

रणनीति का मूल तर्क

ट्रेंडस्ट्रेटेजी फ़ंक्शन

  • कार्यरणनीति का मुख्य तर्क कार्य, प्रवृत्ति निर्णय, स्टॉप लॉस और लाभ लेना, कॉलबैक लाभ लेना और ऑर्डर संचालन को क्रियान्वित करने के लिए जिम्मेदार।
  • कदम
    1. बाज़ार डेटा प्राप्त करें: वर्तमान बाजार जानकारी, स्थिति जानकारी, खाता जानकारी और के-लाइन डेटा प्राप्त करें।
    2. पदों की जाँच करें: सुनिश्चित करें कि कोई भी लॉन्ग या शॉर्ट पोजीशन एक साथ न रखी जाए, अन्यथा अपवाद उत्पन्न हो जाएगा।
    3. रणनीतिक बातचीत: इंटरैक्टिव इंटरफ़ेस के माध्यम से उपयोगकर्ताओं द्वारा भेजे गए आदेशों को संसाधित करता है।
    4. स्थिति पट्टी सूचना मुद्रण: रणनीति संचालन स्थिति, खाता जानकारी और स्थिति स्थिति को अद्यतन और प्रिंट करें।
    5. रोकनास्टॉप-लॉस नियमों के अनुसार स्टॉप-लॉस संचालन की जांच और निष्पादन करें।
    6. थकावट: लाभ लेने के नियमों के अनुसार लाभ लेने के संचालन की जांच और निष्पादन करें।
    7. कॉलबैक पर लाभ लें: कॉलबैक टेक-प्रॉफिट नियमों के अनुसार टेक-प्रॉफिट संचालन की जाँच करें और उसे निष्पादित करें।
    8. के-लाइन चक्र जांच: सुनिश्चित करें कि रणनीति तर्क K-लाइन चक्र के अनुसार निष्पादित किया जाता है।
    9. रुझानों का आकलन करनातकनीकी संकेतकों के आधार पर वर्तमान प्रवृत्ति (दीर्घ, लघु या दोलनशील) का निर्धारण करें।
    10. एक आदेश दें: प्रवृत्ति निर्णय परिणामों के आधार पर एक स्थिति खोलें या बंद करें।

स्थिति निगरानी और लॉग आउटपुट

प्रिंटलॉगस्टेटस फ़ंक्शन

  • कार्य: रणनीति संचालन स्थिति, खाता जानकारी और स्थिति स्थिति प्रिंट करें।
  • कदम
    1. रणनीति अवलोकन, खाता निधि और स्थिति का सारणीबद्ध डेटा बनाएं।
    2. उपयोगLogStatusयह फ़ंक्शन तालिका डेटा को स्टेटस बार पर आउटपुट करता है।

मुख्य कार्य और रणनीति निष्पादन

मुख्य समारोह

  • कार्य: रणनीति का मुख्य कार्य, रणनीति को आरंभ करने और रणनीति तर्क के माध्यम से लूपिंग के लिए जिम्मेदार।
  • कदम
    1. एक्सचेंज सिमुलेशन वातावरण को आरंभ करें.
    2. एक रणनीति उदाहरण बनाएं और डेटा आरंभ करें.
    3. रणनीति तर्क को एक लूप में क्रियान्वित किया जाता है, बाजार की स्थिति की जांच की जाती है और नियमित अंतराल पर व्यापारिक परिचालनों को क्रियान्वित किया जाता है।

फ्रेमवर्क सुविधाएँ

  1. लचीला प्रवृत्ति निर्णय: ईएमए और मानक विचलन का उपयोग करके, यह रणनीति लचीले ढंग से बाज़ार के रुझानों का निर्धारण कर सकती है और विभिन्न बाज़ार परिवेशों पर लागू होती है। यह फ़ंक्शन केवल एक उदाहरण है; उपयोगकर्ता आवश्यकतानुसार रुझानों का निर्धारण करने के लिए विभिन्न तकनीकी संकेतकों (जैसे आरएसआई, एमएसीडी, बोलिंगर बैंड, आदि) का उपयोग कर सकते हैं।
  2. विविध स्टॉप-लॉस और टेक-प्रॉफिट तंत्रविभिन्न जोखिम वरीयताओं वाले व्यापारियों की जरूरतों को पूरा करने के लिए निश्चित प्रतिशत स्टॉप लॉस, लाभ लेने और कॉलबैक लाभ लेने का समर्थन करता है।
  3. स्थानीय डेटा प्रबंधननीति संचालन डेटा और उपयोगकर्ता डेटा को स्थानीय रूप से सहेजा जाता है ताकि यह सुनिश्चित किया जा सके कि पुनः आरंभ करने के बाद नीति को उसकी पिछली स्थिति में बहाल किया जा सके।
  4. इंटरैक्टिव कमांड: कमांड लाइन के माध्यम से नीतियों के साथ बातचीत का समर्थन करता है, जिससे उपयोगकर्ताओं के लिए नीति मापदंडों को समायोजित करना या विशिष्ट संचालन करना आसान हो जाता है।

प्रयोज्यता

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

  1. हाजिर बाजार समर्थनवर्तमान में, यह ढांचा मुख्य रूप से अनुबंध बाजार पर लक्षित है, और भविष्य में इसे हाजिर बाजार में व्यापारिक रणनीतियों का समर्थन करने के लिए विस्तारित किया जा सकता है।
  2. बहु-उत्पाद अनुबंध: कई अनुबंधों के लिए समर्थन जोड़कर, रणनीतियाँ एक साथ कई डिजिटल मुद्राओं की निगरानी और व्यापार कर सकती हैं, जिससे पूंजी उपयोग में सुधार होता है।
  3. मशीन लर्निंग एकीकरणमशीन लर्निंग एल्गोरिदम के साथ संयुक्त, यह प्रवृत्ति निर्णय की सटीकता और रणनीतियों के खुफिया स्तर को और बेहतर बनाता है।
  4. जोखिम प्रबंधन अनुकूलनरणनीति की मजबूती में सुधार करने के लिए जोखिम प्रबंधन तंत्र को और अधिक अनुकूलित करें, जैसे कि लीवरेज अनुपात, बहु-स्तरीय स्टॉप-लॉस और टेक-प्रॉफिट तंत्र को गतिशील रूप से समायोजित करना।

संक्षेप

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

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

”`python “‘backtest start: 2024-11-26 00:00:00 end: 2024-12-03 00:00:00 period: 1d basePeriod: 1d exchanges: [{“eid”:“Futures_Binance”,“currency”:“BTC_USDT”}] “’

import json, talib import numpy as np

class TrendStrategy: def init(self): # 基本设置 self._Currency = TradeCurrency self._Interval = Interval self._UseQuarter = UseQuarter self._UseContract = TradeCurrency + (‘.swap’ if self._UseQuarter else ‘.quarter’) self._OnlyTrendJudgment = OnlyTrendJudgment self._EnableMessageSend = EnableMessageSend # 趋势判断 self._RunInKLinePeriod = RunInKLinePeriod self._KLinePeriod = KLinePeriod self._EmaLength = EmaLength self._EmaCoefficient = EmaCoefficient self._UseStddev = UseStddev self._UseRecordsMiddleValue = UseRecordsMiddleValue self._StddevLength = StddevLength self._StddevDeviations = StddevDeviations # 下单设置 self._MarginLevel = MarginLevel self._OrderSize = OrderSize self._OrderByMargin = OrderByMargin self._OrderMarginPercent = OrderMarginPercent self._PricePrecision = None self._AmountPrecision = None self._OneSizeInCurrentCoin = None self._QuarterOneSizeValue = None # 止盈止损 self._UseStopLoss = UseStopLoss self._StopLossPercent = StopLossPercent self._UseTakeProfit = UseTakeProfit self._TakeProfitPercent = TakeProfitPercent self._UseTrackingTakeProfit = UseTrackingTakeProfit self._UsePositionRetracement = UsePositionRetracement self._TakeProfitTriggerPercent = TakeProfitTriggerPercent self._CallBakcPercent = CallBakcPercent

    # 策略变量
    self._LastBarTime = 0
    self._TrendWhenTakeProfitOrStopLoss = 0
    self._HadStopLoss = False
    self._TriggeredTakeProfit = False
    self._PeakPriceInPosition = 0
    self._HadTakeProfit = False
    self._PriceCrossEMAStatus = 0

    # 统计变量
    self._InitAsset = 0
    self._ProfitLocal = 0
    self._TakeProfitCount = 0
    self._TradeCount = 0
    self.StrategyRunTimeStampString = "strategy_run_time"
    self._StrategyDatas = {"start_run_timestamp": 0, "others": ""}
    self._UserDatas = None

    # 相对固定参数
    self._MaintenanceMarginRate = 0.004
    self._TakerFee = 0.0005
    self._IsUsdtStandard = False

    # 获取合约信息
    ticker = _C(exchange.GetTicker, self._UseContract)
    marketInfo = exchange.GetMarkets()[self._UseContract]
    Log('获取市场信息:', marketInfo)
    self._PricePrecision = marketInfo['PricePrecision']
    self._AmountPrecision = marketInfo['AmountPrecision']
    self._OneSizeInCurrentCoin = marketInfo['CtVal']
    self._QuarterOneSizeValue = marketInfo['CtVal']

    exchange.SetCurrency(self._Currency)
    exchange.SetMarginLevel(self._UseContract, self._MarginLevel)
    exchange.SetPrecision(self._PricePrecision, self._AmountPrecision)

    # 初始化数据
def initDatas(self):

    self.saveStrategyRunTime()
    self.readUserDataLocal()

    self._InitAsset = self._UserDatas["init_assets"]
    self._ProfitLocal = self._UserDatas["profit_local"]
    self._TakeProfitCount = self._UserDatas["take_profit_count"]
    self._TradeCount = self._UserDatas["trade_count"]

    if self._OrderByMargin:
        self.getRealOrderSize(-1, self._OrderSize)
        Log("已经重新计算下单张数:", self._OrderSize)
    if self._UseTakeProfit and self._UseTrackingTakeProfit:
        raise Exception("止盈和回调止盈不能同时使用!")

# 设置合约
def setContract(self):
    self._IsUsdtStandard = "USDT" in self._Currency

    exchange.SetCurrency(self._Currency)
    if self._UseQuarter:
        exchange.SetContractType("quarter")
    else:
        exchange.SetContractType("swap")

# 保存程序起始运行时间 秒级时间戳
def saveStrategyRunTime(self):
    local_data_strategy_run_time = _G(self.StrategyRunTimeStampString)

    if local_data_strategy_run_time is None:
        self._StrategyDatas["start_run_timestamp"] = Unix()
        _G(self.StrategyRunTimeStampString, self._StrategyDatas["start_run_timestamp"])
    else:
        self._StrategyDatas["start_run_timestamp"] = local_data_strategy_run_time

# 设置程序起始运行时间 秒级时间戳
def setStrategyRunTime(self, timestamp):
    _G(self.StrategyRunTimeStampString, timestamp)
    self._StrategyDatas["start_run_timestamp"] = timestamp

# 计算两个时间戳之间的天数,参数是秒级时间戳
def getDaysFromTimeStamp(self, start_time, end_time):
    if end_time < start_time:
        return 0

    return (end_time - start_time) // (60 * 60 * 24)

# 保存数据到本地
def saveUserDatasLocal(self):
    self._UserDatas = {
        "init_assets": self._InitAsset,
        "profit_local": self._ProfitLocal,
        "take_profit_count": self._TakeProfitCount,
        "trade_count": self._TradeCount
    }
    # 存储到本地
    _G(exchange.GetLabel(), self._UserDatas)
    Log("已把所有数据保存到本地.")

# 读取用户本地数据,程序启动时候运行一次
def readUserDataLocal(self):
    user_data = _G(exchange.GetLabel())
    if user_data is None:
        self._InitAsset = self.getAccountAsset(_C(exchange.GetPosition), _C(exchange.GetAccount), _C(exchange.GetTicker))
        self._UserDatas = {
            "init_assets": self._InitAsset,
            "profit_local": 0,
            "take_profit_count": 0,
            "trade_count": 0
        }
    else:
        self._UserDatas = user_data

# 清除用户本地数据,交互按钮点击运行
def clearUserDataLocal(self):
    _G(exchange.GetLabel(), None)
    Log(exchange.GetLabel(), ":已清除本地数据.")

# 策略交互
def runCmd(self):
    cmd = GetCommand()

    if cmd:
        # 检测交互命令
        Log("接收到的命令:", cmd, "#FF1CAE")
        if cmd.startswith("ClearLocalData:"):
            # 清除本地数据
            self.clearUserDataLocal()
        elif cmd.startswith("SaveLocalData:"):
            # 保存数据到本地
            self.saveUserDatasLocal()
        elif cmd.startswith("ClearLog:"):
            # 清除日志
            log_reserve = cmd.replace("ClearLog:", "")
            LogReset(int(log_reserve))
        elif cmd.startswith("OrderSize:"):
            # 修改下单张数
            if self._OrderByMargin:
                Log("已经使用保证金数量来下单,无法直接修改下单数量!")
            else:
                order_size = int(cmd.replace("OrderSize:", ""))
                self._OrderSize = order_size
                Log("下单张数已经修改为:", self._OrderSize)
        elif cmd.startswith("OrderMarginPercent:"):
            # 修改下单保证金百分比
            if self._OrderByMargin:
                order_margin_percent = float(cmd.replace("OrderMarginPercent:", ""))
                self._OrderMarginPercent = order_margin_percent
                Log("下单保证金百分比:", self._OrderMarginPercent, "%")
            else:
                Log("没有打开根据保证金数量下单,无法修改下单保证金百分比!")

# 交易函数
def orderDirectly(self, distance, price, amount):
    tradeFunc = None

    if amount <= 0:
        raise Exception("设置的参数有误,下单数量已经小于0!")

    if distance == "buy":
        tradeFunc = exchange.Buy
    elif distance == "sell":
        tradeFunc = exchange.Sell
    elif distance == "closebuy":
        tradeFunc = exchange.Sell
    else:
        tradeFunc = exchange.Buy

    exchange.SetDirection(distance)
    return tradeFunc(price, amount)

def openLong(self, price, amount):
    real_amount = self.getRealOrderSize(price, amount)
    return self.orderDirectly("buy", price, real_amount)

def openShort(self, price, amount):
    real_amount = self.getRealOrderSize(price, amount)
    return self.orderDirectly("sell", price, real_amount)

def coverLong(self, price, amount):
    return self.orderDirectly("closebuy", price, amount)

def coverShort(self, price, amount):
    return self.orderDirectly("closesell", price, amount)

# 重新计算下单数量
def getRealOrderSize(self, price, amount):
    real_price = price if price != -1 else _C(exchange.GetTicker).Last
    if self._OrderByMargin:
        if self._IsUsdtStandard:

            self._OrderSize = _N(self._InitAsset * (self._OrderMarginPercent / 100) / real_price * self._MarginLevel / self._OneSizeInCurrentCoin, self._AmountPrecision)  # u本位数量(杠杆放大数量)

        else:
            self._OrderSize = _N(self._InitAsset * (self._Ord