Tài nguyên đang được tải lên... tải...

Máy tính phản lực (giảng dạy)

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Ngày: 2018-09-27 15:56:48
Tags:Nghiên cứu


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);                               // 轮询间隔,控制 策略运转频率
    }
}

Có liên quan

Thêm nữa

Dao xươngTrong video hướng dẫn, họ nói rằng đây là một chiến lược rất phổ biến, nhưng mặc định 300 giây ngủ là quá nhiều không?

13036897450Sell ((50.19165, 50.01): order price precision error, scale: `4` Tại sao bạn hỏi?

Dao xươngTốt. Cảm ơn.

Những nhà phát minh định lượng - những giấc mơ nhỏTrong khi đó, một số công ty khác cũng cho rằng, chỉ có 300 millisecond là không đúng.

Những nhà phát minh định lượng - những giấc mơ nhỏ```order price precision error, scale: 4 ``` /upload/asset/cb89c1f8070d7a04d8447f9a38029f2b.png Điều này có nghĩa là giá đặt hàng có quá nhiều chữ số nhỏ, tối đa 4 chữ số.