Disco en vivo:https://www.fmz.com/m/robot/26018Esta estrategia es adecuada para el cerebro paralítico de los optimistas de Bitcoin a largo plazo, que utilizan una estrategia de promedio de valor para hacer apuestas fijas que pueden resistir eficazmente las fluctuaciones del mercado.
La idea básica es pensar cuánto dinero quieres invertir cada mes (variable estratégica: MoneyEveryMonth) y luego decidir cuánto tiempo debes invertir una vez, y no se recomienda que el intervalo entre las transacciones sea menor de 5 minutos (parámetro estratégico: InvestInternal).
En el caso de los negocios, el precio de venta es el precio de compra, y el precio de venta es el precio de venta. Supongamos que un cliente quiere comprar bitcoins de 72,000 yuan (es fácil de calcular) al mes, y que se realiza una transacción por hora, es decir, se planea realizar transacciones 24*30 = 720 veces al mes, y el valor de cada inversión planeada es de 72,000/720 = 100 yuan (variable A).
La hora B, cuando el precio era C, había invertido dinero D, había comprado el número de monedas E, ahora el valor de la moneda es F, esta vez invertido dinero G, esta vez comprado el número de monedas 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
El resultado final es invertir 300 dólares y comprar 0.8 bitcoins (valor de 400 dólares), con un precio promedio de 375 dólares.
Explicación: el programa comprueba cada vez los fondos y bitcoins en la cuenta y la diferencia con el inicio para calcular el número de compras que se necesitan cada vez, por lo que no se debe usar otra computadora para publicar una cuenta, ni realizar manualmente operaciones de compra y venta. Si se realizan todas las recargas y realizaciones en la transacción, se debe completar en la parte interactiva del programa, de lo contrario el programa calculará errores.
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@'); }
¿Qué haces?¿Todavía estás corriendo?
- ¿ Qué?Gracias por compartir. Muy bien, espero que continúe.
El hombre de NingGracias por compartir.
- ¿ Qué pasa?¿Hay alguien libre que vea el código?
No hay nada¡Gracias por compartir, la inversión fija es una estrategia de inversión confiable y a largo plazo, con el tiempo como peso!