- Square
- 闪崩机器人 (教学)
闪崩机器人 (教学)
Author:
发明者量化-小小梦, Date: 2018-09-27 15:56:48
Tags:
Study
function CancelPendingOrders(orders) { // 取消所有订单
for (var j = 0; j < orders.length; j++) { // 根据参数传来的 未完成订单数组 , 逐个取消订单。
exchange.CancelOrder(orders[j].Id, orders[j]);
Sleep(300); // 间隔 300 毫秒
}
}
function LogOrders(orders){ // 组织用于显示的数据,显示在 机器人 页面的状态栏上。
var buyString = ''; // 用于显示的买单数据字符串
var sellString = ''; // 用于显示的卖单数据字符串
orders.sort(function(x, y){return x.Price - y.Price;}); // 排序 , orders 根据订单的 Price 属性, 从大到小
for (var j = 0; j < orders.length; j++) { // 遍历 orders , 注意已经排过序
if (orders[j].Type == ORDER_TYPE_SELL){ // 如果 订单是 卖单,则执行{} 内代码。
sellString += String(orders[j].Price) + ' ' + String(orders[j].Amount) + '|'; // 储存在 字符串 sellString , 用 | 间隔
}else{
buyString += String(orders[j].Price) + ' ' + String(orders[j].Amount) + '|'; // 储存在 字符串 buyString , 用 | 间隔
}
}
LogStatus('买单:' + buyString + '\n' + '卖单:' + sellString); // 在状态栏 输出这些 订单 信息。
}
function main() { // 主函数
while(true){ // 主循环
var orders = _C(exchange.GetOrders); // 获取所有 未完成 挂单信息,orders 为一个 数组。
CancelPendingOrders(orders); // 取消所有未完成挂单
var ticker = _C(exchange.GetTicker); // 获取最新行情信息
var account = _C(exchange.GetAccount); // 获取 当前账户信息
var midPrice = (ticker.Buy + ticker.Sell) / 2; // 计算 盘口空隙中间的位置的价格。
var buyAmount = 0; // 声明 buyAmount ,用于累计计划买入数量, 初始化 0
var sellAmount = 0; // 声明 sellAmount , 用于累计计划卖出数量, 初始化 0
var amount = OrderSize; // OrderSize 每单下单量大小, 赋值给 amount
var buyPrice = midPrice - Spread; // 在盘口中间位置 上下 一定 挂单价格间隔, 挂单,设置挂买单价 buyPrice
var sellPrice = midPrice + Spread; // ....
while((buyAmount < TotalBuy) && (account.Balance > amount*buyPrice) && buyPrice > 0){ // 当 计划买入数量 小于 总买单量, 并且 账户可用计价币(资金)大于 本次计划下单使用的资金,并且 下单价格大于0(防止 midPrice - Spread 小于0)
if(exchange.Buy(buyPrice, amount)){ // 下单,如果返回 null 执行 else 内代码块, 如果返回id 执行 if 代码块
buyAmount += amount; // 累计买单挂单量
account.Balance -= amount*buyPrice; // 更新账户 计价币数量
buyPrice -= Spread; // 更新挂单价格
amount = amount * SpreadTimes; // 更新订单下单量,根据参数 SpreadTimes 设置进行递增。
}else{ // 下单失败,更新账户信息,用于 当前while 循环条件判断
account = _C(exchange.GetAccount);
}
Sleep(500); // 用于控制 挂单频率
}
amount = OrderSize; // 重置 amount 变量为 OrderSize
while((sellAmount < TotalSell) && (account.Stocks*(1-fee/100) > amount)){ // 当 计划卖出的量 小于 总卖单量, 并且 账户可用 币数 扣除 交易手续费后 大于每单数量,执行while 循环
if(exchange.Sell(sellPrice, amount)){ // 下卖单, 返回订单ID ,更新相关 变量。
sellAmount += amount; // 累计 挂出的卖单的量
account.Stocks -= amount; // 更新 可用币数
sellPrice += Spread; // 更新下单价格 位置
amount = amount * SpreadTimes; // 更新订单下单量,根据参数 SpreadTimes 设置进行递增。
}else{
account = _C(exchange.GetAccount); // 如果下单失败 更新账户信息
}
Sleep(500);
}
orders = _C(exchange.GetOrders); // 获取 挂单信息
LogOrders(orders); // 输出挂单信息 在状态栏
Sleep(Interval*1000); // 轮询间隔,控制 策略运转频率
}
}
template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6