وارن بفیٹ کے سرپرست بنجمن گراہم نے کتاب
تجارتی موڈ بہت آسان ہے: 50 فیصد فنڈز اسٹاک فنڈز میں اور باقی 50 فیصد بانڈ فنڈز میں لگائیں۔ یعنی اسٹاک اور بانڈز ایک دوسرے کے نصف ہیں۔ - مقررہ وقفہ یا مارکیٹ کی تبدیلیوں کے مطابق، اسٹاک اثاثوں اور بانڈ اثاثوں کے تناسب کو اصل 1: 1 پر بحال کرنے کے لئے اثاثوں کا دوبارہ توازن کریں. یہ پوری حکمت عملی کا منطق ہے، بشمول کب خریدنا اور بیچنا اور کتنا خریدنا اور بیچنا۔ یہ کافی آسان ہے!
اس طریقہ کار میں ، بانڈ فنڈز کی اتار چڑھاؤ دراصل بہت کم ہے ، اسٹاک کی اتار چڑھاؤ سے بہت کم ہے ، لہذا یہاں بانڈز کو "ریفرنس اینکرز" کے طور پر استعمال کیا جاتا ہے ، یعنی یہ اندازہ لگانے کے لئے کہ آیا بانڈز کے ذریعہ اسٹاک میں بہت زیادہ اضافہ ہوا ہے یا بہت کم۔ اگر اسٹاک کی قیمت میں اضافہ ہوتا ہے تو ، اسٹاک کی مارکیٹ ویلیو بانڈز کی مارکیٹ ویلیو سے زیادہ ہوگی۔ جب ان دونوں کا مارکیٹ ویلیو تناسب مقررہ حد سے تجاوز کر جاتا ہے تو ، کل پوزیشن کو دوبارہ ایڈجسٹ کیا جائے گا ، اسٹاک فروخت کیے جائیں گے ، اور بانڈز خریدے جائیں گے ، تاکہ اسٹاک اور بانڈز کی مارکیٹ ویلیو تناسب اصل 1: 1 پر واپس آجائے۔ اس کے برعکس ، اگر اسٹاک کی قیمت میں کمی واقع ہوتی ہے تو ، اسٹاک کی مارکیٹ ویلیو بانڈز کی مارکیٹ ویلیو سے کم ہوگی۔ جب ان دونوں کی مارکیٹ ویلیو کا تناسب مقررہ حد سے تجاوز کر جاتا ہے تو ، کل پوزیشن کو دوبارہ ایڈجسٹ کیا جائے گا ، اسٹاک خریدے جائیں گے ، اور بانڈز فروخت کیے جائیں گے ، تاکہ اسٹاک اور بانڈز کی مارکیٹ ویلیو کا تناسب اصل 1: 1 پر واپس آجائے۔ اس طرح ، ہم اسٹاک کی نمو کے پھلوں سے لطف اندوز ہوسکتے ہیں اور اسٹاک اور بانڈز کے درمیان تناسب کو متحرک طور پر متوازن کرکے اثاثوں کی اتار چڑھاؤ کو کم کرسکتے ہیں۔ ویلیو انویسٹمنٹ کے سرخیل کی حیثیت سے ، گراہم نے ہمیں ایک اچھا خیال فراہم کیا ہے۔ چونکہ یہ ایک مکمل حکمت عملی ہے ، لہذا ہم اسے ڈیجیٹل کرنسی میں کیوں نہیں استعمال کرتے ہیں؟
بلاکچین اثاثہ BTC میں متحرک توازن کی حکمت عملی
حکمت عملی کا منطق
اس طرح ، اس سے کوئی فرق نہیں پڑتا ہے کہ بی ٹی سی کی قدر بڑھتی ہے یا کم ہوتی ہے ، ہم ہمیشہ اکاؤنٹ بیلنس اور بی ٹی سی کی مارکیٹ ویلیو کو متحرک طور پر برابر رکھتے ہیں۔ اگر بی ٹی سی کی قدر کم ہوتی ہے تو ، ہم خریدتے ہیں ، اور اگر یہ دوبارہ بڑھتا ہے تو ، ہم کچھ بیچتے ہیں ، بالکل بیلنس کی طرح۔
تو ، اسے کوڈ میں کیسے لاگو کیا جائے؟ ہم مثال کے طور پر ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم لیتے ہیں ، آئیے پہلے اسٹریٹجک فریم ورک پر ایک نظر ڈالیں:
// 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
}
}
پوری حکمت عملی فریم ورک اصل میں بہت آسان ہے، ایک اہم تقریب، ایک onTick آرڈر رکھنے کی تقریب، ایک منسوخ pendingOrders تقریب، اور ضروری پیرامیٹرز بھی شامل ہے.
// 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. ترتیب دینے کی ضرورت نہیں ہے، آپ کو براہ راست آن لائن backtesting کر سکتے ہیں.
اس مضمون میں متحرک توازن کی حکمت عملی میں صرف ایک بنیادی پیرامیٹر (حد) ہے ، جو ایک بہت ہی آسان سرمایہ کاری کا طریقہ ہے۔ اس کا پیچھا زیادہ منافع نہیں ہے ، بلکہ مستحکم منافع ہے۔ رجحان کی حکمت عملی کے برعکس ، متحرک توازن کی حکمت عملی رجحان کے خلاف ہے۔ لیکن متحرک توازن کی حکمت عملی بالکل اس کے برعکس ہے۔ جب مارکیٹ مقبول ہے تو ، پوزیشن کو کم کرنا ، جبکہ جب مارکیٹ غیر مقبول ہے تو ، پوزیشن میں پیمانہ بندی کرنا ، جو میکرو اکنامک ریگولیشن کی طرح ہے۔
اصل میں ، متحرک توازن کی حکمت عملی ایک ایسا ہنر ہے جو غیر متوقع قیمتوں کے تصور کو وراثت میں لیتا ہے اور ایک ہی وقت میں قیمتوں میں اتار چڑھاؤ کو پکڑتا ہے۔ متحرک توازن کی حکمت عملی کا بنیادی مقصد اثاثوں کی الاٹمنٹ تناسب ، نیز ٹرگر کی حد کو مرتب کرنا اور ایڈجسٹ کرنا ہے۔ لمبائی کے پیش نظر ، ایک مضمون جامع نہیں ہوسکتا ہے۔ آپ کو معلوم ہونا چاہئے کہ الفاظ سے آگے ، دل ہے۔ متحرک توازن کی حکمت عملی کا سب سے اہم حصہ سرمایہ کاری کا خیال ہے۔ آپ اس مضمون میں انفرادی بی ٹی سی اثاثوں کو بلاکچین اثاثہ پورٹ فولیو کی ایک ٹوکری سے بھی تبدیل کرسکتے ہیں۔
آخر میں ، آئیے اس مضمون کو بنجمن گراہم کے مشہور الفاظ کے ساتھ ختم کرتے ہیں کتاب