实际交易数量与exchange.Buy设置的数量不符。

Author: mlnotes, Created: 2018-03-05 18:18:47, Updated: 2018-03-05 18:19:29

下面是我用的测试大吗,非常简单,每个小时以市价购入10个ETH,初试价格是10000,但是在模拟回测的时候发现每次都显示交易成功,但是交易的量都不是10.

function onTick() {
    var id = exchange.Buy(-1, 10);
    Log("Order Id:", id);
    Log(exchange.GetOrder(id));
    Log(exchange.GetTrades());
    Log(exchange.GetAccount());
}

function main() {
    Log(exchange.GetAccount());
    while (true) {
        onTick();
        Sleep(3600 * 1000);
    }
}

这次其中一次交易的Log

2018-03-05 06:00:25		信息	{"Balance":9699.61809,"Stocks":0.33250049999999987,"FrozenBalance":0,"FrozenStocks":0}
2018-03-05 06:00:24		信息	[{"Id":31,"Time":1520200824800,"Price":900,"Amount":1,"Type":1}]
2018-03-05 06:00:24		信息	{"Id":31,"Price":-1,"Amount":10,"DealAmount":10,"Type":0,"Status":1,"AvgPrice":900.01}
2018-03-05 06:00:24		信息	Order Id: 31
2018-03-05 06:00:24	OKCoin_EN	买入	市价	10

大家知道是什么原因吗?


More

dyhhu 如果我兜里有100元钱,要赶紧买币,你让我在临时算算能买多少币,我还真没时间。

mlnotes 厉害,你说对了!不过我觉得这样很容易让人混淆,如果设置了价格,第二个参数就是ETH的数量,如果市价,第二个参数就是美金,这个API设计得不好。

小小梦 这里用 市价单 传入的 10 ,指的不是 10个 ETH 币, 而是 10美元, 您把这个 var id = exchange.Buy(-1, 10); 数量 10 改成 900 试下 ,看买入后 Stocks 会不会多 将近1个 ETH 。

小小梦 这样设计 也是为了 对接交易所的 API 设计, 比如 OKEX 的市价单, OKEX 的API 接口 设计的就是 如果是市价买入, 不接收 下单量,只要下单价格(即 计价币 代表的 金额,根据这个金额买入,不确定操作币量多少), 卖出 只要求传入 下单量(操作币个数) ,不要求 价格。 所以 BotVS 的市价单 模式 要和交易所统一(大部分交易所市价单都是这个模式)。