Tỷ lệ lợi nhuận thống kê
BotVS chỉ ghi lại một đường cong. Không có phân tích kỹ thuật. Mẫu này có thể tự động tính toán thu nhập, lợi nhuận, tỷ lệ thu nhập hàng tháng, tỷ lệ thu nhập hàng năm, và tối đa thu hồi.
Cách sử dụng: Tạo mẫu này, thay thế chính sách trước đó với hàm LogProfit là $.LogProfit. Và thêm vào chuỗi trả về $.ProfitSummary (đồng tiền ban đầu) ở vị trí LogStatus.
Ví dụ:
function main (() {
while ((true) {
var t = exchange.GetTicker ();
$t.Last; $t.LogProfit
LogStatus (($.ProfitSummary ((10000));
Ngủ ((3600000);
Hiển thị kết quả:
Ngày 1: Thu nhập -78.44 yuan ((-0.537%), tháng hóa-16.781%, năm hóa-204.169%, rút lại 1.106% Ngày 1: Thu nhập 176.08 yuan (tương đương 1.221%), chuyển đổi 38.226% vào tháng, chuyển đổi 465.087%, rút lại 1.236% Ngày 7: Thu nhập 771.74 đô la ((5.599%), chuyển đổi 24.141% vào tháng, chuyển đổi 293.719% vào năm, rút lại 1.517% Ngày 7 vừa qua: Thu nhập 223.15 yuan ((1.64%), biến đổi 7.071%, biến đổi 86.039%, rút lại 0.9% Ngày 30: thu được 1570.31 nhân ((12.094%), biến đổi 12.111% theo tháng, biến đổi 147.352% theo năm, rút lại 3.251% 30 ngày qua: Thu nhập 200.12 yuan ((1.565%), 1.567% theo tháng, 19.076%, 1.521% theo năm Tổng: thu được 4554.11 đô la ((45.541%), tối đa là 3.251%, thời gian thống kê là 74 ngày 23 giờ
$.LogProfit = function(profit) { var args = Array.prototype.slice.call(arguments); if (SYS_LOGPROFIT) { LogProfit.apply(this, args); } else { args.unshift('收益'); Log.apply(this,args); } var _history = $.GetAllProfit(); _history.push([ Math.floor(new Date().getTime()/1000), profit]); _G('profit_history', JSON.stringify(_history)); }; $.GetAllProfit = function() { var old = _G('profit_history') || '[]'; try { var _history = JSON.parse(old); return _history; } catch(e) { _G('profit_history', null); return []; } }; function filterProfit(from, to) { var arr = $.GetAllProfit(); if (!arr || arr.length === 0) return; var re, maxdrawback=0, lastProfit=0, maxProfit=false, maxdrawbackProfit=0; var earlest, latest; for(var i=0;i<arr.length;i++) { if (!arr[i]) continue; if (arr[i][0] > from && arr[i][0] <= to) { var profit = arr[i][1]; if (!earlest) earlest = arr[i]; latest = arr[i]; if (!lastProfit) lastProfit = profit; if (maxProfit === false || maxProfit < profit) maxProfit = profit; var drawback = maxProfit - profit; if (drawback > maxdrawback) { maxdrawback = drawback; maxdrawbackProfit = maxProfit; } } } if (!earlest || !latest) return; return [earlest, latest, maxdrawback, maxdrawbackProfit]; } function daysProfit(offset, days) { var from = getDaySecond( -offset+days); var to = getDaySecond(-offset); var arr = filterProfit( from, to ); if (!arr || !arr[0] || !arr[1]) return; var profitTime = arr[1][0] - arr[0][0]; if (!profitTime) return; var periodTime = to - from; var profit = arr[1][1] - arr[0][1]; var realPercent = profitTime*100 / periodTime; var expectedProfit = profit * 100 / realPercent; return { profit:profit, expectedProfit:expectedProfit, profitTime:profitTime, periodTime:periodTime, open: arr[0][1], close: arr[1][1], drawback: arr[2], drawbackProfit: arr[3] }; } function getDaySecond(days) { var d = new Date(); var now = d.getTime(); now -= days*86400000; d.setTime(now); return Math.floor(d.getTime() / 1000); } $.DaysProfit = function(days) { return filterProfit(days)[2]; }; $.ProfitSummary = function(initialBalance) { if (!initialBalance) return '没有传入初始资金'; var day = daysProfit(0, 1); var lastDay = daysProfit(-1, 1); var week = daysProfit(0,7); var lastWeek = daysProfit(-7,7); var month = daysProfit(0,30); var lastMonth = daysProfit(-30,30); var all = daysProfit(0, 10000); if (!all) return ''; var _days = Math.floor(all.profitTime / 86400); var text = []; var t = profitSummary(day, initialBalance); if (t) text.push('1日: '+t); t = profitSummary(lastDay, initialBalance); if (t) text.push('上1日: '+t); t = profitSummary(week, initialBalance); if (t && _days >= 7) text.push('7日: '+t); t = profitSummary(lastWeek, initialBalance); if (t) text.push('上7日: '+t); t = profitSummary(month, initialBalance); if (t && _days>=30) text.push('30日: '+t); t = profitSummary(lastMonth, initialBalance); if (t) text.push('上30日: '+t); if (all) { var _days = Math.floor(all.profitTime / 86400); all.profitTime %= 86400; var _hours = Math.floor(all.profitTime / 3600); var drawback = _N( all.drawback*100/(all.drawbackProfit+initialBalance), 3 )+'%'; text.push('总: 收'+_N(all.close,2)+'元('+_N(all.close*100/initialBalance,3)+'%),最大回撤'+drawback+',统计时间'+_days+'天'+_hours+'小时'); } return text.join('\n'); }; function profitSummary(p, base) { if (!p) return ''; var text = []; text.push('收'+_N(p.profit,2)+'元('+_N(p.profit*100/(base+p.open), 3)+'%)'); var month = expectProfit(p, 30, base); if (month) { text.push('月化'+month.percent+'%'); } var year = expectProfit(p, 365, base); if (year) { text.push('年化'+year.percent+'%'); } text.push('回撤'+ _N( p.drawback*100/(p.drawbackProfit+base), 3 )+'%' ); return text.join(','); } function expectProfit(p, days, base) { var expectSeconds = days*86400; if (expectSeconds < p.profitTime) return; return { profit: _N(p.profit * expectSeconds / p.profitTime, 2), percent: _N(p.profit * expectSeconds *100 / (p.profitTime * (base+p.open)),3) }; } function main() { while(true) { var t = exchange.GetTicker(); $.LogProfit(t.Last); LogStatus($.ProfitSummary(10000)); Sleep(3600000); } }
xunfeng91Sử dụng mẫu này, tốc độ truy cập lại rất chậm.
nxtplayerCảm ơn rất nhiều.
LogaBạn có thể sử dụng liên lạc của chúng tôi.
ywxCảm ơn, tôi cần điều đó.
momoxHỗ trợ