বাস্তব চিত্রঃhttps://www.fmz.com/m/robot/26018এই কৌশলটি দীর্ঘমেয়াদী আশাবাদী বিটকয়েনের মস্তিষ্কের পঙ্গুদের জন্য উপযুক্ত, যা মূল্যের গড় কৌশলটি ব্যবহার করে বাজারের ওঠানামা কার্যকরভাবে প্রতিরোধ করতে পারে।
মূল ধারণাটি হ'ল আপনি প্রতি মাসে কত টাকা ইনভেস্ট করতে চান তা চিন্তা করুন (কৌশলগত পরিবর্তনশীলঃ MoneyEveryMonth) এবং তারপরে সিদ্ধান্ত নিন যে আপনি একবারে কতক্ষণ ট্রেড করবেন, ট্রেডিংয়ের ব্যবধানটি 5 মিনিটের চেয়ে কম নয় (কৌশলগত পরামিতিঃ ইনভেস্ট ইন্টারনাল) ।
এখানে একটি উদাহরণ রয়েছে যা কৌশলগত চিন্তাভাবনা এবং কেনার সময়কে ব্যাখ্যা করেঃ ধরুন, আপনি প্রতি মাসে ৭২০০০ ইউয়ান মূল্যের বিটকয়েন কিনতে চান (এটি গণনা করা সহজ) এবং প্রতি ঘন্টায় একবার লেনদেন করেন, যা প্রতি মাসে ২৪*৩০=৭২০ লেনদেনের পরিকল্পনা করে, প্রতিবার বিনিয়োগের পরিকল্পনা করা অর্থের মূল্য ৭২০০০/720=১০০ ইউয়ান (ভেরিয়েবল এ) ।
ঘন্টা B, তখন দাম C, টাকা D, কয়েন E কেনা হয়েছে, এখন কয়েন F, এই সময় টাকা G, এই সময় কয়েন H কেনা হয়েছে
1 400 0 0 সেলসিয়াসE=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
শেষ পরিণতি হচ্ছে, ৩০০ টাকা বিনিয়োগ করে ০.৮টি বিটকয়েন (৪০০ ইউএস ডলার মূল্য) কেনা, যার গড় মূল্য ৩৭৫ ইউএস ডলার।
ব্যাখ্যাঃ প্রোগ্রামটি প্রতিটি অ্যাকাউন্টে তহবিল এবং বিটকয়েন পরীক্ষা করে এবং শুরু করার সময় ব্যবধান গণনা করে, যাতে প্রতিটি ক্রয়ের জন্য প্রয়োজনীয় পরিমাণ গণনা করা যায়, তাই অন্য বটকে একটি অ্যাকাউন্ট প্রকাশ করবেন না বা ম্যানুয়ালি ক্রয়-বিক্রয় অপারেশন করবেন না। যদি লেনদেনের সময় সমস্ত রিফিল এবং রূপান্তরিত হয় তবে প্রোগ্রামের ইন্টারেক্টিভ অংশে পূরণ করা উচিত, অন্যথায় প্রোগ্রামটি ভুল গণনা করবে।
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@'); }
অলসআপনি কি এখনও দৌড়াচ্ছেন?
শাওয়ানচুয়ানধন্যবাদ শেয়ার করার জন্য, ভালো লাগলো, আশা করি চালিয়ে যাবেন।
নিং ডেকোধন্যবাদ শেয়ার করার জন্য।
লিজাকোডটি দেখুন।
শূন্যধন্যবাদ শেয়ার করার জন্য, স্থির বিনিয়োগ একটি দীর্ঘমেয়াদী বিনিয়োগের সমতুল্য, যা সময়কে গুরুত্ব দেয়, এটি একটি নির্ভরযোগ্য বিনিয়োগ কৌশল!