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); // 轮询间隔,控制 策略运转频率 } }
Cuchillo de huesoEn el video de tutoriales se dice que es una estrategia muy frecuente, pero ¿no es demasiado el tiempo de sueño por defecto de 300 segundos?
13036897450Vend ((50.19165, 50.01): error de precisión del precio del pedido, escala: `4` ¿Cuál es la razón?
Cuchillo de huesoEstá bien. Gracias.
Los inventores cuantifican - sueños pequeñosEs 300 milisegundos, pero está mal escrito en los parámetros de la política.
Los inventores cuantifican - sueños pequeñosError de precisión del precio del pedido, escala: 4 `` ` /upload/asset/cb89c1f8070d7a04d8447f9a38029f2b.png /upload/asset/cb89c1f8070d7a04d8447f9a38029f2b.png /upload/asset/cb89c1f8070d7a04d8447f9a38029f2b.png Esto significa que hay demasiados dígitos mínimos en el precio del pedido, hasta 4 dígitos.