Rekod sebenar:https://www.fmz.com/m/robot/26018Strategi ini sesuai untuk orang yang lama menjadi optimis terhadap Bitcoin, menggunakan strategi purata nilai untuk membuat pertaruhan yang berkesan untuk melawan turun naik pasaran.
Idea asasnya adalah untuk memikirkan berapa banyak wang yang ingin anda letakkan setiap bulan (variabel strategi: MoneyEveryMonth) dan kemudian memutuskan berapa lama untuk berdagang sekali, selang perdagangan tidak disyorkan kurang dari 5 minit (parameter strategi: InvestInternal).
Di bawah ini adalah satu contoh untuk menunjukkan idea strategi dan masa untuk membeli dan menjual: Misalkan anda ingin membeli Bitcoin bernilai RM72000 sebulan (mudah dikira), berdagang sekali setiap jam, anda merancang untuk berdagang 24 * 30 = 720 kali sebulan, dan setiap kali anda merancang untuk memasukkan nilai dana adalah RM72000/720 = 100 (variabel A).
Jam B, ketika harga C, telah memasukkan dana D, telah membeli jumlah duit E, kini nilai duit F, kali ini dana G, kali ini membeli jumlah duit 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
Hasil akhirnya ialah, dengan menginvestasikan $300, mereka membeli 0.8 bitcoin (bernilai $400), dengan harga purata $375.
Jelaskan: Program akan memeriksa setiap kali dana dan Bitcoin dalam akaun dan perbezaan pada masa permulaan untuk mengira jumlah yang diperlukan untuk membeli setiap kali, jadi jangan menggunakan bot lain untuk mendedahkan akaun, atau melakukan pembelian dan penjualan secara manual. Jika semua isi ulang dan manifestasi dalam transaksi, harus diisi di bahagian interaksi program, jika tidak, program akan mengira kesilapan.
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@'); }
pemalasAdakah anda masih berlari?
xuanxuanTerima kasih kerana berkongsi.
Lelaki NingTerima kasih kerana berkongsi.
LizzaAda sesiapa yang mahu lihat kodnya?
SifarTerima kasih kerana berkongsi, pelaburan tetap adalah strategi pelaburan yang boleh dipercayai dan bernilai jangka panjang yang diberi berat oleh masa!