वारेन बफेट के संरक्षक बेंजामिन ग्राहम ने पुस्तक
व्यापार का तरीका बहुत सरल हैः -धन का 50% शेयर फंड में और शेष 50% बांड फंड में निवेश करें। अर्थात, शेयर और बांड एक दूसरे के आधे हिस्से हैं। -निश्चित अंतराल या बाजार परिवर्तनों के अनुसार, स्टॉक परिसंपत्तियों और बांड परिसंपत्तियों के अनुपात को मूल 1:1 पर बहाल करने के लिए परिसंपत्ति पुनर्वित्त करना। यह पूरी रणनीति का तर्क है, जिसमें कब खरीदना और बेचना और कितना खरीदना और बेचना शामिल है। यह काफी आसान है!
इस पद्धति में, बांड फंड की अस्थिरता वास्तव में बहुत कम है, स्टॉक की अस्थिरता से बहुत कम है, इसलिए बांड का उपयोग यहाँ
ब्लॉकचेन परिसंपत्ति बीटीसी में गतिशील संतुलन रणनीति
रणनीतिक तर्क
इस तरह, कोई फर्क नहीं पड़ता कि बीटीसी मूल्यवर्धन या अवमूल्यन करता है, हम हमेशा खाते के संतुलन और बीटीसी के बाजार मूल्य को गतिशील रूप से बराबर रखते हैं। यदि बीटीसी अवमूल्यन करता है, तो हम खरीदते हैं, और यदि यह फिर से बढ़ता है, तो हम कुछ बेचते हैं, जैसे संतुलन।
तो, इसे कोड में कैसे लागू करें? हम उदाहरण के रूप में एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म लेते हैं, आइए पहले रणनीति ढांचे पर एक नज़र डालेंः
// function to cancel orders
function CancelPendingOrders() {}
// function to place an order
function onTick() {}
// main function
function main() {
// filter non-important information
SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
while (true) { // polling mode
if (onTick()) { // execute onTick function
CancelPendingOrders(); // cancel the outstanding pending orders
Log(_C(exchange.GetAccount)); // print the current account information
}
Sleep(LoopInterval * 1000); // sleep
}
}
संपूर्ण रणनीति ढांचा वास्तव में बहुत सरल है, जिसमें एक मुख्य कार्य, एक ऑनटिक ऑर्डर-प्लेसिंग कार्य, एक कैंसलपेंडिंगऑर्डर कार्य और आवश्यक पैरामीटर शामिल हैं।
// order-placing function
function onTick() {
var acc = _C(exchange.GetAccount); // obtain account information
var ticker = _C(exchange.GetTicker); // obtain Tick data
var spread = ticker.Sell - ticker.Buy; // obtain bid ask spread of Tick data
// 0.5 times of the difference between the account balance and the current position value
var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
var ratio = diffAsset / acc.Balance; // diffAsset / account balance
LogStatus('ratio:', ratio, _D()); // Print ratio and current time
if (Math.abs(ratio) < threshold) { // If the absolute value of the ratio is less than the specified threshold
return false; // return false
}
if (ratio > 0) { // if ratio > 0
var buyPrice = _N(ticker.Sell + spread, ZPrecision); // Calculate the price of an order
var buyAmount = _N(diffAsset / buyPrice, XPrecision); // Calculate the order quantity
if (buyAmount < MinStock) { // If the order quantity is less than the minimum transaction quantity
return false; // return false
}
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // Purchase order
} else {
var sellPrice = _N(ticker.Buy - spread, ZPrecision); // Calculate the price of an order
var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // Calculate the order quantity
if (sellAmount < MinStock) { // If the order quantity is less than the minimum transaction quantity
return false; // return false
}
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // Sell and place an order
}
return true; // return true
}
ऑर्डर ट्रेडिंग तर्क अच्छी तरह से संगठित है, और सभी टिप्पणियों कोड में लिखा गया है. आप ज़ूम इन करने के लिए छवि पर क्लिक कर सकते हैं.
मुख्य प्रक्रिया इस प्रकार है:
// Withdrawal function
function CancelPendingOrders() {
Sleep(1000); // Sleep for 1 second
var ret = false;
while (true) {
var orders = null;
// Obtain the unsettled order array continuously. If an exception is returned, continue to obtain
while (!(orders = exchange.GetOrders())) {
Sleep(1000); // Sleep for 1 second
}
if (orders.length == 0) { // If the order array is empty
return ret; // Return to order withdrawal status
}
for (var j = 0; j < orders.length; j++) { // Iterate through the array of unfilled orders
exchange.CancelOrder(orders[j].Id); // Cancel unfilled orders in sequence
ret = true;
if (j < (orders.length - 1)) {
Sleep(1000); // Sleep for 1 second
}
}
}
}
निकासी मॉड्यूल सरल है। चरण निम्नलिखित हैंः
// Backtest environment
/*backtest
start: 2018-01-01 00:00:00
end: 2018-08-01 11:00:00
period: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
// Order withdrawal function
function CancelPendingOrders() {
Sleep(1000); // Sleep for 1 second
var ret = false;
while (true) {
var orders = null;
// Obtain the unsettled order array continuously. If an exception is returned, continue to obtain
while (!(orders = exchange.GetOrders())) {
Sleep(1000); // Sleep for 1 second
}
if (orders.length == 0) { // If the order array is empty
return ret; // Return to order withdrawal status
}
for (var j = 0; j < orders.length; j++) { // Iterate through the array of unfilled orders
exchange.CancelOrder(orders[j].Id); // Cancel unfilled orders in sequence
ret = true;
if (j < (orders.length - 1)) {
Sleep(1000); // Sleep for 1 second
}
}
}
}
// Order function
function onTick() {
var acc = _C(exchange.GetAccount); // obtain account information
var ticker = _C(exchange.GetTicker); // obtain Tick data
var spread = ticker.Sell - ticker.Buy; // obtain bid ask spread of Tick data
// 0.5 times of the difference between the account balance and the current position value
var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
var ratio = diffAsset / acc.Balance; // diffAsset / account balance
LogStatus('ratio:', ratio, _D()); // Print ratio and current time
if (Math.abs(ratio) < threshold) { // If the absolute value of ratio is less than the specified threshold
return false; // return false
}
if (ratio > 0) { // if ratio > 0
var buyPrice = _N(ticker.Sell + spread, ZPrecision); // Calculate the order price
var buyAmount = _N(diffAsset / buyPrice, XPrecision); // Calculate the order quantity
if (buyAmount < MinStock) { // If the order quantity is less than the minimum trading quantity
return false; // return false
}
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // buy order
} else {
var sellPrice = _N(ticker.Buy - spread, ZPrecision); // Calculate the order price
var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // Calculate the order quantity
if (sellAmount < MinStock) { // If the order quantity is less than the minimum trading quantity
return false; // return false
}
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // sell order
}
return true; // return true
}
// main function
function main() {
// Filter non-important information
SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
while (true) { // Polling mode
if (onTick()) { // Execute onTick function
CancelPendingOrders(); // Cancel pending orders
Log(_C(exchange.GetAccount)); // Print current account information
}
Sleep(LoopInterval * 1000); // sleep
}
}
बाह्य मापदंड
इसके बाद, यह देखने के लिए इस सरल गतिशील संतुलन रणनीति का परीक्षण करें कि क्या यह काम करता है। निम्नलिखित केवल संदर्भ के लिए बीटीसी के ऐतिहासिक डेटा पर एक बैकटेस्ट है।
बैकटेस्टिंग वातावरण
बैकटेस्टिंग प्रदर्शन
बैकटेस्टिंग वक्र
बैकटेस्ट अवधि के दौरान, बीटीसी ने 8 महीने तक गिरावट जारी रखी है, यहां तक कि 70% से अधिक की अधिकतम गिरावट के साथ, जिससे कई निवेशकों ने ब्लॉकचेन परिसंपत्तियों में विश्वास खो दिया। इस रणनीति का संचयी रिटर्न 160% तक है, और वार्षिक रिटर्न जोखिम अनुपात 5 से अधिक है। इस तरह की सरल निवेश रणनीति के लिए, निवेश पर रिटर्न की दर अधिकांश लोगों की तुलना में अधिक है जो पूर्ण स्थिति में हैं।
रणनीति का स्रोत कोड एफएमजेड क्वांट की आधिकारिक वेबसाइट पर प्रकाशित किया गया हैःhttps://www.fmz.com/strategy/110545. कॉन्फ़िगर करने की कोई आवश्यकता नहीं है, आप सीधे ऑनलाइन बैकटेस्टिंग कर सकते हैं.
इस लेख में गतिशील संतुलन रणनीति में केवल एक मुख्य पैरामीटर (सीमा) है, जो एक बहुत ही सरल निवेश विधि है। यह जो आगे बढ़ता है वह अधिक रिटर्न नहीं है, बल्कि स्थिर रिटर्न है। प्रवृत्ति रणनीति के विपरीत, गतिशील संतुलन रणनीति प्रवृत्ति के खिलाफ है। लेकिन गतिशील संतुलन रणनीति बिल्कुल विपरीत है। जब बाजार लोकप्रिय है, स्थिति को कम करना, जबकि जब बाजार अप्रिय है, स्थिति में स्केलिंग, जो मैक्रोइकॉनॉमिक विनियमन के समान है।
वास्तव में, गतिशील संतुलन रणनीति एक ऐसा शिल्प है जो अप्रत्याशित कीमतों की अवधारणा को विरासत में लेता है और एक ही समय में मूल्य उतार-चढ़ाव को कैप्चर करता है। गतिशील संतुलन रणनीति का मूल संपत्ति आवंटन अनुपात, साथ ही ट्रिगर थ्रेशोल्ड को सेट और समायोजित करना है। लंबाई को देखते हुए, एक लेख व्यापक नहीं हो सकता है। आपको पता होना चाहिए कि शब्दों से परे, एक दिल है। गतिशील संतुलन रणनीति का सबसे महत्वपूर्ण हिस्सा निवेश विचार है। आप इस लेख में व्यक्तिगत बीटीसी परिसंपत्तियों को ब्लॉकचेन परिसंपत्ति पोर्टफोलियो की टोकरी के साथ भी बदल सकते हैं।
अंत में, आइए इस लेख को बेंजामिन ग्राहम की पुस्तक में प्रसिद्ध शब्दों के साथ समाप्त करें बुद्धिमान निवेशक: शेयर बाजार एक वजन मशीन नहीं है जो मूल्य को सटीक रूप से माप सकती है, बल्कि एक मतदान मशीन है अनगिनत लोगों द्वारा किए गए निर्णय तर्क और संवेदनशीलता का मिश्रण हैं। कई बार ये निर्णय तर्कसंगत मूल्य निर्णयों से बहुत दूर हैं। निवेश का रहस्य तब निवेश करना है जब कीमत आंतरिक मूल्य से बहुत कम हो, और विश्वास करें कि बाजार का रुझान उबर जाएगा।