2018-12-08 12:40:55 +08:00
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Name
|
2018-12-08 12:40:55 +08:00
|
|
|
|
2023-04-18 23:12:35 +08:00
|
|
|
对冲27收益率统计系统-支持多组账号统计
|
2018-12-08 12:40:55 +08:00
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Author
|
2018-12-08 12:40:55 +08:00
|
|
|
|
|
|
|
|
Zero
|
|
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Strategy Description
|
2016-07-25 18:05:35 +08:00
|
|
|
|
|
|
|
|
对冲2.7收益率统计系统 支持多组账号统计, 添加偶数长度的交易所即可开始统计, 每两个为一组进行添加
|
|
|
|
|
币价会取第一个交易所的买一做为参考值
|
|
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Strategy Arguments
|
2016-07-25 18:05:35 +08:00
|
|
|
|
|
|
|
|
|
2018-12-08 12:40:55 +08:00
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
|Argument|Default|Description|
|
2018-12-08 12:40:55 +08:00
|
|
|
|----|----|----|
|
|
|
|
|
|Interval|60|统计间隔(秒)|
|
|
|
|
|
|InitMode|0|统计初始资金的模式: 自动统计|手动输入|
|
|
|
|
|
|InitBalance|false|初始总钱|
|
|
|
|
|
|InitStocks|false|初始总币|
|
|
|
|
|
|
|
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Source (javascript)
|
2018-12-08 12:40:55 +08:00
|
|
|
|
|
|
|
|
``` javascript
|
2016-07-25 18:05:35 +08:00
|
|
|
//
|
|
|
|
|
|
|
|
|
|
function main() {
|
|
|
|
|
if (exchanges.length == 0 || exchanges.length % 2 !== 0) {
|
|
|
|
|
throw "交易所参数必须是2的整数";
|
|
|
|
|
}
|
|
|
|
|
var cfg = {
|
|
|
|
|
__isStock: true,
|
|
|
|
|
tooltip: {
|
|
|
|
|
xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
|
|
|
|
|
},
|
|
|
|
|
title: {
|
|
|
|
|
text: '多平台收益率统计'
|
|
|
|
|
},
|
|
|
|
|
subtitle: {
|
|
|
|
|
text: '正在统计...'
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'datetime'
|
|
|
|
|
},
|
|
|
|
|
legend: {
|
|
|
|
|
enabled: true,
|
|
|
|
|
},
|
|
|
|
|
rangeSelector: {
|
|
|
|
|
buttons: [{
|
|
|
|
|
type: 'hour',
|
|
|
|
|
count: 1,
|
|
|
|
|
text: '1h'
|
|
|
|
|
}, {
|
|
|
|
|
type: 'hour',
|
|
|
|
|
count: 3,
|
|
|
|
|
text: '3h'
|
|
|
|
|
}, {
|
|
|
|
|
type: 'hour',
|
|
|
|
|
count: 8,
|
|
|
|
|
text: '8h'
|
|
|
|
|
}, {
|
|
|
|
|
type: 'all',
|
|
|
|
|
text: 'All'
|
|
|
|
|
}],
|
|
|
|
|
selected: 0,
|
|
|
|
|
inputEnabled: false
|
|
|
|
|
},
|
|
|
|
|
series: []
|
|
|
|
|
};
|
|
|
|
|
var i = 0;
|
|
|
|
|
for (i = 0; i < exchanges.length; i += 2) {
|
|
|
|
|
cfg.series.push({
|
|
|
|
|
name: exchanges[i].GetLabel() + '/' + exchanges[i + 1].GetLabel(),
|
|
|
|
|
data: [],
|
|
|
|
|
tooltip: {
|
|
|
|
|
valueDecimals: 4
|
|
|
|
|
}
|
2016-08-17 10:47:48 +08:00
|
|
|
});
|
2016-07-25 18:05:35 +08:00
|
|
|
}
|
|
|
|
|
var chart = Chart(cfg);
|
|
|
|
|
var counter = 0;
|
|
|
|
|
var getAccounts = function() {
|
|
|
|
|
var accounts = [];
|
|
|
|
|
for (var i = 0; i < exchanges.length; i++) {
|
|
|
|
|
accounts.push(_C(exchanges[i].GetAccount));
|
|
|
|
|
}
|
|
|
|
|
return accounts;
|
|
|
|
|
};
|
|
|
|
|
var initAccounts = getAccounts();
|
|
|
|
|
if (InitMode == 1) {
|
|
|
|
|
Log("初始总资金手动指定为, 钱: ", InitBalance, "币:", InitStocks);
|
|
|
|
|
} else {
|
|
|
|
|
InitBalance = 0;
|
|
|
|
|
InitStocks = 0;
|
|
|
|
|
for (var i = 0; i < initAccounts.length; i++) {
|
|
|
|
|
InitBalance += initAccounts[i].Balance + initAccounts[i].FrozenBalance;
|
|
|
|
|
InitStocks += initAccounts[i].Stocks + initAccounts[i].FrozenStocks;
|
|
|
|
|
}
|
|
|
|
|
Log("初始总资金自动指定为, 钱: ", InitBalance, "币:", InitStocks);
|
|
|
|
|
}
|
|
|
|
|
while (true) {
|
|
|
|
|
if (counter > 0) {
|
|
|
|
|
Sleep(Interval * 1000);
|
|
|
|
|
}
|
|
|
|
|
counter++;
|
|
|
|
|
var tbl = {
|
|
|
|
|
type: 'table',
|
|
|
|
|
title: '账户信息',
|
|
|
|
|
cols: ['交易所', '当前组收益', '初始钱', '初始币', '当前钱', '当前币'],
|
|
|
|
|
rows: []
|
|
|
|
|
};
|
|
|
|
|
var ticker = _C(exchange.GetTicker);
|
|
|
|
|
var accounts = getAccounts();
|
|
|
|
|
var ts = new Date().getTime();
|
|
|
|
|
var allBalance = 0;
|
|
|
|
|
var allStocks = 0;
|
|
|
|
|
for (i = 0; i < accounts.length; i += 2) {
|
|
|
|
|
var profit = (accounts[i].Balance + accounts[i].FrozenBalance + accounts[i + 1].Balance + accounts[i + 1].FrozenBalance) - (initAccounts[i].Balance + initAccounts[i].FrozenBalance + initAccounts[i + 1].Balance + initAccounts[i + 1].FrozenBalance) + (((accounts[i].Stocks + accounts[i].FrozenStocks + accounts[i + 1].Stocks + accounts[i + 1].FrozenStocks) - (initAccounts[i].Stocks + initAccounts[i].FrozenStocks + initAccounts[i + 1].Stocks + initAccounts[i + 1].FrozenStocks)) * ticker.Buy);
|
|
|
|
|
chart.add(i / 2, [ts, _N(profit)]);
|
|
|
|
|
for (var j = i; j < (i+2); j++) {
|
|
|
|
|
tbl.rows.push([exchanges[j].GetLabel(), j % 2 == 0 ? _N(profit, 4) : '--', initAccounts[j].Balance + (initAccounts[j].FrozenBalance > 0 ? ' ( 冻结: ' + initAccounts[j].FrozenBalance + ' )' : ''), initAccounts[j].Stocks+ (initAccounts[j].FrozenStocks > 0 ? ' ( 冻结: ' + initAccounts[j].FrozenStocks + ' )' : ''), accounts[j].Balance+ (accounts[j].FrozenBalance > 0 ? ' ( 冻结: ' + accounts[j].FrozenBalance + ' )' : ''), accounts[j].Stocks+ (accounts[j].FrozenStocks > 0 ? ' ( 冻结: ' + accounts[j].FrozenStocks + ' )' : '')]);
|
|
|
|
|
allBalance += accounts[j].Balance + accounts[j].FrozenBalance;
|
|
|
|
|
allStocks += accounts[j].Stocks + accounts[j].FrozenStocks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
cfg.subtitle.text = "初始总钱: " + _N(InitBalance) + ", 初始总币: " + _N(InitStocks) + ", 当前总钱: " + _N(allBalance) + ", 当前总币: " + _N(allStocks) + ", 买一价: " + ticker.Last + ", 总利润: " + _N((allBalance-InitBalance) + ((allStocks-InitStocks) * ticker.Buy)) + " 元";
|
|
|
|
|
chart.update(cfg);
|
|
|
|
|
LogStatus('`' + JSON.stringify(tbl) + '`');
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-12-08 12:40:55 +08:00
|
|
|
```
|
|
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Detail
|
2018-12-08 12:40:55 +08:00
|
|
|
|
|
|
|
|
https://www.fmz.com/strategy/18678
|
|
|
|
|
|
2023-07-14 18:39:48 +08:00
|
|
|
> Last Modified
|
2018-12-08 12:40:55 +08:00
|
|
|
|
|
|
|
|
2016-08-13 18:32:22
|