सक्रिय धन प्रवाह पर आधारित व्यापारिक रणनीति

लेखक:अच्छाई, बनाया गयाः 2020-08-01 09:50:44, अद्यतन किया गयाः 2023-10-11 19:56:26

img

सारांश

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

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

पूंजी प्रवाह का उपयोग क्यों करें

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

पहले सोचिए, कीमत क्यों बढ़ रही है?

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

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

निधि प्रवाह सिद्धांत

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

यह पढ़ने के बाद, कुछ लोग सोच सकते हैं कि वास्तविक लेनदेन में, एक सौदा केवल तभी किया जाएगा जब कोई खरीदता है और कोई बेचता है। लेनदेन के आदेश में बिक्री की मात्रा जितनी ही होनी चाहिए जितनी खरीद की मात्रा है, और धनराशि एक ही राशि में और बाहर होनी चाहिए। पूंजी का प्रवाह और बहिर्वाह कहां से आता है? वास्तव में, सख्ती से बोलते हुए, प्रत्येक खरीद आदेश को एक संबंधित बिक्री आदेश के अनुरूप होना चाहिए, और पूंजी प्रवाह और पूंजी बहिर्वाह बराबर होना चाहिए। यदि हम यह गणना करना चाहते हैं कि कौन से आदेश सक्रिय रूप से खरीदे जाते हैं और कौन से आदेश सक्रिय रूप से बेचे जाते हैं, तो हम केवल एक समझौता विधि का उपयोग कर सकते हैं, लेनदेन की मात्रा और मूल्य के आधार पर K लाइन बार डेटा का उपयोग करते हुए।

निधि प्रवाह गणना विधि

धन के प्रवाह में परिवर्तन वास्तविक समय के बाजार व्यवहार से सटीक रूप से मेल खाता है, और धन के शुद्ध प्रवाह की गणना वास्तविक समय में k लाइन बार डेटा को एकीकृत करके की जाती है। धन के सक्रिय प्रवाह की गणना के लिए दो एल्गोरिदम हैंः

सबसे पहले, यदि मौजूदा ऑर्डर की वर्तमान लेनदेन की कीमत प्रतिपक्ष की कीमत पर या अधिक कीमत पर निष्पादित की जाती है, तो खरीद लेनदेन की कीमत >= बिक्री लेनदेन की कीमत, जिसका अर्थ है कि खरीदार अधिक मूल्य पर लेनदेन को पूरा करने के लिए तैयार है, जो सक्रिय धन प्रवाह में शामिल है।

दूसरा, यदि वर्तमान लेन-देन की कीमत पिछले लेन-देन की कीमत से अधिक है, तो यह समझा जा सकता है कि वर्तमान लेन-देन की मात्रा सक्रिय रूप से मूल्य वृद्धि को बढ़ाती है, जो धन के सक्रिय प्रवाह में शामिल है।

उपरोक्त दूसरे एल्गोरिथ्म को उदाहरण के रूप में लें:

10:00 पर एक निश्चित उत्पाद का समापन मूल्य 3450 है, और 11:00 पर समापन मूल्य 3455 है, इसलिए हम 10:00 और 11:00 के बीच लेनदेन की मात्रा को सक्रिय पूंजी प्रवाह के रूप में शामिल करेंगे। अन्यथा, यह धन के पहल बहिर्वाह में शामिल है। यह लेख मूल्य अस्थिरता के कारक को जोड़कर दूसरी विधि पर आधारित है। k लाइन बार समापन मूल्य की तुलना करके और बाद में, बढ़ते या गिरते k लाइन बार * अस्थिरता की मात्रा को एक अनुक्रम में शामिल किया जाता है, और फिर अनुक्रम के अनुसार आगे धन के सक्रिय प्रवाह अनुपात की गणना करें।

व्यापारिक तर्क

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

मूल्य वृद्धि और प्रति यूनिट समय सक्रिय शुद्ध धन प्रवाहः यह स्थिति मजबूत है और भविष्य की कीमत में वृद्धि जारी रहने की अधिक संभावना है;

शेयर की कीमत बढ़ जाती है, और प्रति यूनिट समय के लिए सक्रिय निवल धन की बहिर्वाहः इस मामले में यह एक मध्यम-मजबूत स्थिति है, और भविष्य की कीमतों में वृद्धि की दर बहुत कम हो जाएगी;

स्टॉक की कीमत गिरती है, जबकि प्रति यूनिट समय सक्रिय शुद्ध धन प्रवाहः यह एक कमजोर स्थिति है, और भविष्य की कीमत गिरने की संभावना अधिक है;

शेयर की कीमत गिरती है, और साथ ही प्रति यूनिट समय के लिए सक्रिय निवल धन की बहिर्वाहः इस मामले में, यह एक मध्यम रूप से कमजोर स्थिति है, और भविष्य की कीमतों में गिरावट की दर काफी कम हो जाएगी;

मुख्य चर निम्नलिखित हैंः

पिछला निम्न स्तर (ll) पिछला उच्च (hh) सक्रिय खरीद (बाइन) सक्रिय बिक्री (बारआउट) धन के सक्रिय प्रवाह और धन के सक्रिय प्रवाह का अनुपात (barRatio) खोलने की स्थिति की सीमा (openValve) वर्तमान धारण स्थिति (myAmount) अंतिम K-लाइन समापन मूल्य (बंद)

प्रवेश और बाहर निकलने की शर्तें

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

  • लंबी स्थिति खोलनाः यदि कोई वर्तमान होल्डिंग स्थिति नहीं है, और barRatio > openValve, लंबी स्थिति खोलें;

  • शॉर्ट पोजीशन खोलना: यदि कोई वर्तमान होल्डिंग पोजीशन और बार रेशियो < 1 / ओपनवॉल्व नहीं है, तो शॉर्ट पोजीशन खोलें;

  • लंबी स्थिति बंद करनाः यदि वर्तमान लंबी स्थिति रखी जाती है और बंद हो जाती है, तो लंबी स्थिति को बेचें और बंद करें;

  • शॉर्ट पोजीशन बंद करनाः यदि वर्तमान शॉर्ट पोजीशन को पकड़कर बंद किया जाता है > hh, तो शॉर्ट पोजीशन खरीदें और बंद करें;

रणनीति स्रोत कोड लिखना

डेटा प्राप्त करना और गणना करना

function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //Get K line bar data
    if (bars.length < len * 2) { //Control the length of the K line bar data array
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //Calculate the difference between the current closing price and the previous K line bar closing price
        if (barSub_1 > 0) { //If the price rises, add a positive number to the array
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //If the price drops, add a negative number to the array
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //Free up excess data
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //Consolidate all active inflows funds
        } else {
            self.barOut -= barVol[v]; //Consolidate all active outflow funds
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //Calculate the ratio of active inflows to active outflows
    bars.pop(); //Delete unfinished K line bar data
    self.close = bars[bars.length - 1].Close; //Get the closing price of the pervious bar
    self.hh = TA.Highest(bars, hgLen, 'High'); //Get the previous high price
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //Get the previous low price
    return self;
}

सीधे के लाइन बार डेटा प्राप्त करेंGetRecordsएफएमजेड एपीआई में विधि. इसमें उच्चतम मूल्य, निम्नतम मूल्य, उद्घाटन मूल्य, समापन मूल्य, मात्रा, और मानक टाइमस्टैम्प होता है। यदि नवीनतम लेनदेन मूल्य अंतिम लेनदेन मूल्य से अधिक है, तो नवीनतम लेनदेन मात्रा * (उच्चतम मूल्य-सबसे कम मूल्य) सक्रिय खरीद में शामिल है; यदि नवीनतम लेनदेन मूल्य अंतिम लेनदेन मूल्य से कम है, तो नवीनतम मात्रा * (उच्चतम मूल्य-सबसे कम मूल्य) सक्रिय बिक्री में शामिल है;

स्थिति डेटा प्राप्त करें

function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //Get positions
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //Position data processing
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

मूल स्थिति डेटा प्राप्त करेंGetPositionएफएमजेड प्लेटफार्म एपीआई में विधि, और आगे बुनियादी डेटा संसाधित करें। यदि वर्तमान लंबी स्थिति रखी जाती है, तो सकारात्मक स्थिति मात्रा लौटाई जाती है; यदि वर्तमान स्थिति छोटी है, तो नकारात्मक स्थिति मात्रा लौटाई जाती है। इसका उद्देश्य पदों के उद्घाटन और समापन के तर्क की गणना को सुविधाजनक बनाना है।

आदेश देना

function trade() {
    var myData = data(); //Execute data function
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //Get position information
    var myAmount = mp.amount; //Get the number of positions
    var myProfit = mp.profit; //Get floating profit and loss
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //close long position
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //close short position
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //open long position
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //open short position
        }
    }
}

रणनीतिक विशेषताएं

  • विशेषताएं:

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

  • सुधार:

होल्डिंग पोजीशन की शर्तें जोड़नाः एक तरफ़ा (स्टॉक) बाजार में धन का प्रवाह मूल्य उतार-चढ़ाव और व्यापारिक मात्रा जैसे कारकों के आधार पर धन के प्रवाह या बहिर्वाह को परिभाषित कर सकता है। हालांकि, क्योंकि रणनीति में होल्डिंग पोजीशन की शर्त शामिल नहीं है, सांख्यिकीय सक्रिय पूंजी प्रवाह विकृत हो सकता है।

मानक विचलन की शर्त जोड़ना: केवल धन के प्रवाह पर निर्भर होकर स्थिति खोलने की शर्त के रूप में, अक्सर झूठे संकेत हो सकते हैं, जिसके परिणामस्वरूप अक्सर पद खोले और बंद हो सकते हैं। निर्दिष्ट समय के भीतर धन के शुद्ध बहिर्वाह के औसत मूल्य की गणना करके और मानक विचलन को ऊपर और नीचे जोड़कर झूठे संकेतों को फ़िल्टर करें।

पूर्ण रणनीति स्रोत कोडः

/*backtest
start: 2016-01-01 09:00:00
end: 2019-12-31 15:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

var p = $.NewPositionManager(); //Call commodity futures trading library

//Holding Position data processing
function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //Get positions
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //Holding Position data processing
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

//Market data processing function
function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //Get K line bar data
    if (bars.length < len * 2) { //Control the length of the K line bar data array
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //Calculate the difference between the current closing price and the previous K line bar closing price
        if (barSub_1 > 0) { //If the price rises, add a positive number to the array
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //If the price drops, add a negative number to the array
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //Free up excess data
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //Consolidate all active inflows funds
        } else {
            self.barOut -= barVol[v]; //Consolidate all active outflow funds
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //Calculate the ratio of active inflows to active outflows
    bars.pop(); //Delete unfinished K line bar data
    self.close = bars[bars.length - 1].Close; //Get the closing price of the last K line bar
    self.hh = TA.Highest(bars, hgLen, 'High'); //Get the previous high price
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //Get the previous low price
    return self;
}

//Trading function
function trade() {
    var myData = data(); //Execute data function
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //Get position information
    var myAmount = mp.amount; //Get the number of positions
    var myProfit = mp.profit; //Get floating profit and loss
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //close long position
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //close short position
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //open long position
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //open short position
        }
    }
}

//The main entrance of the program, start from here
function main() {
    while (true) { //Enter the loop
        if (exchange.IO("status")) { //If it is the market opening time
            _C(exchange.SetContractType, contractType); //Subscription contract
            trade(); //Execute trade function
        }
    }
}

रणनीतिक पता:https://www.fmz.com/strategy/87698

रणनीति बैकटेस्ट

रणनीति विन्यासः

img

बैकटेस्ट प्रदर्शनः

img

संक्षेप में

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

यह ध्यान दिया जाना चाहिए कि इस लेख में धन के प्रवाह का उल्लेख धन के सक्रिय प्रवाह को संदर्भित करता है। यह बाजार में विक्रेता और खरीदार की ताकत को संदर्भित करता है, न कि धन के प्रवेश या निकास को। बाजार में खरीदारों और विक्रेताओं के व्यवहार का विश्लेषण करके भविष्य की कीमतों का न्याय करने का कोई अल्पकालिक संदर्भ महत्व नहीं है।


संबंधित

अधिक