Ertragsstatistik

Schriftsteller:Der Junge., Datum: 2016-08-01
Tags:Werkzeug

Statistische Renditen

Die Ertragsstatistiken von BotVS können nur eine Kurve erfassen. Es kann keine technische Analyse durchgeführt werden. Diese Vorlage kann automatisch die Erträge, Erträge, monatliche Erträge, jährliche Erträge und die maximalen Rückgänge für den letzten 1, letzten 1, letzten 7, letzten 7, letzten 30, letzten 30 und alle Zeiten erfassen.

Verwendung: Die LogProfit-Funktion, die ursprünglich als $.LogProfit verwendet wurde, wird in diese Vorlage eingeführt. Anstelle von $.LogProfit wird in LogStatus die Rücksendung von $.ProfitSummary (beginnende Kapital) hinzugefügt.

Zum Beispiel: Funktion main (() { while ((true) {) ist ein Var t = exchange.GetTicker ((); Sie werden von der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website der Website. LogStatus (($.ProfitSummary ((10000)); Schlaf ((3600000); Wir sind hier. Wir sind hier.

Die Ergebnisse zeigen:

1. Tag: Einnahme von 78,44 Yuan (−0,537%), Monatisierung von 16,781%, Jahreszeit von 204,169%, Rücknahme von 1,106% Vor einem Tag: Einnahmen von 176,08 Yuan (± 1,221%), Monatisierung von 38,226%, Jahreszeit von 465,087%, Rückzug von 1,236% 7. Tag: Einnahme von 771.74 Yuan (5,599%), Monatisierung von 24,141%, Jahreszeit von 293,719%, Rücknahme von 1,517% Am vergangenen 7. Tag: Einnahmen von 223,15 Yuan ((1,64%), Monatsveränderung von 7,071%, Jahresveränderung von 86,039%, Rückzug von 0,9% 30. Tag: Einnahme von 1570.31 Yuan ((12.094%), Monatlich 12.111%, Jahreszeitlich 147.352%, Rücknahme von 3.251% Am 30. Tag: Einnahme von 200.12 Yuan (± 1.565%), Monatsveränderung von 1.567%, Jahresveränderung von 19.076%, Rücknahme von 1.521% Insgesamt: 4554.11 Yuan ((45.541%), maximal 3.251%, Statistikzeit 74 Tage 23 Stunden


$.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);
    }
}

Verwandt

Mehr

Zunfeng91Mit dieser Vorlage ist die Wiederholungsgeschwindigkeit sehr langsam.

nxtplayerVielen Dank.

- Das ist logisch.Oder Sie können die Kontaktliste anfordern.

YWXDanke, genau das brauche ich.

MoxUnterstützung