वास्तविक डिस्कःhttps://www.fmz.com/m/robot/26018यह रणनीति लंबे समय तक बिटकॉइन के बारे में आशावादी लोगों के लिए उपयुक्त है, जो मूल्य औसत रणनीति का उपयोग करके बाजार में उतार-चढ़ाव का प्रभावी ढंग से सामना करने के लिए निवेश करते हैं।
मूल विचार यह है कि आप प्रति माह कितना निवेश करना चाहते हैं (रणनीति चरःMoneyEveryMonth) और फिर तय करें कि आप एक बार कितना समय तक व्यापार करते हैं, व्यापार के अंतराल को 5 मिनट से कम नहीं करने की सलाह दी जाती है (रणनीति पैरामीटरःInvestInternal) ।
यहां एक उदाहरण दिया गया है जो रणनीतिक विचारों और खरीद-बिक्री के समय को दर्शाता हैः मान लीजिए कि आप 72,000 युआन (यूआन) मूल्य के बिटकॉइन को हर महीने खरीदना चाहते हैं (यह गणना करने में आसान है) और हर घंटे एक बार लेनदेन करते हैं, तो आप प्रति माह 24 * 30 = 720 बार लेनदेन करने की योजना बना रहे हैं, और प्रत्येक बार 72,000 / 720 = 100 युआन (वैकल्पिक ए) का निवेश करने की योजना बना रहे हैं।
घंटे B, जब कीमत C, निवेश किया है धन D, खरीदा है सिक्के की संख्या E, अब सिक्के का मूल्य F, इस बार निवेश किया है धन G, इस बार खरीदा सिक्के की संख्या H
1 400 0 0 CE=0 AB-F=100 G/C=0.25
2 200 100 0.25 2000.25=50 1002-50=150 0.75
3 1000 250 1 1000 1003-1000=-700 -0.7
4 500 -550 0.3 150 1004-150=250 0.5
अंतिम परिणाम यह है कि $300 का निवेश करके 0.8 बिटकॉइन खरीदे जाते हैं (मूल्य $400), जिसकी औसत कीमत $375 है।
स्पष्टीकरणः कार्यक्रम प्रत्येक बार खाते में धन और बिटकॉइन की जांच करता है और स्टार्टअप पर अंतर करता है, ताकि प्रत्येक बार खरीदने के लिए आवश्यक मात्रा की गणना की जा सके, इसलिए किसी अन्य रोबोट के साथ सार्वजनिक खाते का उपयोग न करें और न ही मैन्युअल रूप से खरीद और बिक्री का संचालन करें। यदि लेनदेन में सभी रिचार्ज और प्रदर्शन किए जाते हैं, तो कार्यक्रम के इंटरैक्टिव भाग में भरा जाना चाहिए, अन्यथा गणना में त्रुटि होगी।
var initAccount; var startTime; //unix timestamp var pause = false; //pause execution of strategy or continue var moneyDeposit = 0; // positive means deposit, negative means withdraw var sotckDeposit = 0; // positive means deposit, negative means withdraw function AdjustFloat(v) { return Math.floor(v * 1000)/1000; } function GetAccount() { var account = null; while (!(account = exchange.GetAccount())) { Log('Get Account Error'); Sleep(ErrorInterval); } return account; } function GetCurrentPrice() { var ticker = null; while (!(ticker = exchange.GetTicker())) { Log('Get Ticker Error'); Sleep(ErrorInterval); } return AdjustFloat(ticker.Last); } function GetOrders(){ var orders = null; while (!(orders = exchange.GetOrders())) { Log('Get Orders Error'); Sleep(ErrorInterval); } return orders; } function CancelPendingOrders() { while(true){ var orders = GetOrders(); if (orders.length === 0) { return; } for (var i = 0; i < orders.length; i++) { exchange.CancelOrder(orders[i].Id); if (i < (orders.length-1)) { Sleep(ErrorInterval); } } } } function ProcessCommand() { var command = GetCommand(); if (command !== null) { Log('command:', command); if (command === 'pause') { pause = true; } if (command === 'Continue') { pause = false; } if(command.indexOf('MoneyChange:') === 0){ moneyDeposit += parseFloat(command.replace("MoneyChange:", "")); Log('Deposit Money:', moneyDeposit); } if(command.indexOf('StockChange:') === 0){ stockDeposit += parseFloat(command.replace("StockChange:", "")); Log('Deposit Stock:',stockDeposit); } } } function CaculateMoneyToInvest(currentPrice,investCount) { var moneyEveryInvest = MoneyEveryMonth * InvestInternal / (30 * 24 * 60); var totalStockInvested = 0.0; var totalMoneyInvested = 0.0; var totalValueInvested = 0.0; var moneyToInvestThisTime = 0.0; CancelPendingOrders(); var accountNow = GetAccount(); totalMoneyInvested = initAccount.Balance + initAccount.FrozenBalance + moneyDeposit - accountNow.Balance - accountNow.FrozenBalance; totalStockInvested = accountNow.Stocks + accountNow.FrozenStocks - initAccount.Stocks - initAccount.FrozenStocks - stockDeposit; Log('Total Money Invested:',totalMoneyInvested); Log('Total Stock Invested:',totalStockInvested); totalValueInvested = AdjustFloat(totalStockInvested * currentPrice); Log('Total Value Invested:',totalValueInvested); var averagePrice = 0; if(totalStockInvested !== 0){ averagePrice = AdjustFloat(totalMoneyInvested / totalStockInvested); } moneyToInvestThisTime = AdjustFloat(moneyEveryInvest * investCount - totalValueInvested); Log('Money to Invest This Time:', moneyToInvestThisTime); var profit = totalValueInvested - totalMoneyInvested; var totalValueNow = (accountNow.Stocks + accountNow.FrozenStocks) * currentPrice + accountNow.Balance + accountNow.FrozenBalance; LogStatus('Account Value Now:' + totalValueNow + '\n' + 'Count:',investCount,' Money:', totalMoneyInvested, 'Stock:', totalStockInvested, 'Average:', averagePrice,'Profit:',profit); LogProfit(profit); return moneyToInvestThisTime; } function onTick(investCount) { var currentPrice = GetCurrentPrice(); Log('Current Price', currentPrice); var moneyToInvestThisTime = CaculateMoneyToInvest(currentPrice,investCount); var stockToInvestThisTime = 0; if(moneyToInvestThisTime > 0){ //Buy stockToInvestThisTime = AdjustFloat(moneyToInvestThisTime / (currentPrice + SlidePrice)); }else{ //Sell stockToInvestThisTime = AdjustFloat(moneyToInvestThisTime / (currentPrice - SlidePrice)); } var minPrice = exchange.GetMinPrice(); if(Math.abs(moneyToInvestThisTime) < minPrice){ Log('Invest Less Than MinPrice:', minPrice); return; } var minStock = exchange.GetMinStock(); if(Math.abs(stockToInvestThisTime) < minStock){ Log('Invest Less Than MinStock:',minStock); return; } var account = GetAccount(); if(stockToInvestThisTime > 0){ //Buy if(account.Balance < moneyToInvestThisTime){ Log('Money not Enough.#ff0000@'); return; } }else{ //Sell if(account.Stocks < Math.abs(stockToInvestThisTime)){ Log('Stock not Enough.#ff0000@'); return; } } var orderID = -1; if(stockToInvestThisTime > 0){ //Buy Log('Buy Stock:',stockToInvestThisTime); orderID = exchange.Buy(currentPrice + SlidePrice,stockToInvestThisTime); } if(stockToInvestThisTime < 0){ //Sell Log('Sell Stock:',Math.abs(stockToInvestThisTime)); orderID = exchange.Sell(currentPrice - SlidePrice,Math.abs(stockToInvestThisTime)); } } function main() { //exchange.IO("websocket"); initAccount = _G('InitAccount'); if(initAccount === null){ initAccount = GetAccount(); _G('InitAccount',initAccount); Log('Set Init account.'); Log(exchange.GetName(), exchange.GetCurrency(), initAccount); } else{ Log('Read Init Account:', initAccount); } startTime = _G('StartTime'); if(startTime === null){ startTime = new Date().getTime(); _G('StartTime',startTime); Log('Set Start Time:', startTime); }else{ Log('Read Start Time',new Date().setTime(startTime)); } var investCount = _G('InvestCount' ); if(investCount === null){ investCount = 1; Log('Set Invest Starting from Count 1.'); } else{ Log('Invest Continuing from:', investCount); } moneyDeposit = _G('MoneyDeposit'); if(moneyDeposit === null){ moneyDeposit = 0; Log('Set Money Deposit 0.'); } else{ Log('Read Money Deposit:', moneyDeposit); } stockDeposit = _G('StockDeposit'); if(stockDeposit === null){ stockDeposit = 0; Log('Set Stock Deposit 0.'); } else{ Log('Read Stock Deposit:', stockDeposit); } while (true) { ProcessCommand(); if (!pause) { Log('================================================='); Log('Invest Count', investCount); onTick(investCount); investCount += 1; _G('InvestCount',investCount); } Sleep(InvestInternal * 1000 * 60); } } function onexit(){ _G('MoneyDeposit',moneyDeposit); _G('StockDeposit', stockDeposit); Log('Robot Stopped!#ff0000@'); }
आलसीक्या आप अभी भी दौड़ रहे हैं?
सियानशुआनधन्यवाद, अच्छा लगा, इसे जारी रखें।
नींबूसाझा करने के लिए धन्यवाद
लिज़ाकृपया कोड को देखें।
शून्यधन्यवाद साझा करने के लिए, निश्चित निवेश एक लंबी अवधि के निवेश के बराबर है, समय के साथ वजन, एक विश्वसनीय निवेश रणनीति!