
過去 2 日間、Telegram グループのユーザーから、IPO 戦略の設計例を希望するプライベート メッセージが私に送信されました。取引所が新しいコインをリストしたとき、そのいくつかを手に入れたいと思うことがあります。この記事では、シンプルな新しいコイン戦略を設計します。
たとえば、現在、特定の取引所では、特定の取引ペア XXX_USDT がまだ取引所に上場されていません。しかし、もうすぐオンラインになります。この取引所の XXX_USDT 市場を監視するにはプログラムが必要です。この取引ペアの上限に達すると、取引が可能になります。次に、10 個の指値買い注文を発行し、数量を指定して注文を出し、コインを取得します。購入するとタスクが完了します。購入できない場合は、すべての注文が実行されてコインを購入するまで保留にしておいてください。
要件は非常にシンプルですが、暗号通貨界隈でプログラミングの基礎知識がない人にとっては、どこから始めればよいのかわからないかもしれません。次に、この要件の実現に取り組みます。
戦略パラメータの定義:
ここでは、注文の配置などの操作を制御するためのいくつかのパラメータを定義します。

コード実装:
function pendingOrders(ordersNum, price, amount, deltaPrice, deltaAmount) {
var routineOrders = []
var ordersIDs = []
for (var i = 0 ; i < ordersNum ; i++) {
var routine = exchange.Go("Buy", price + i * deltaPrice, amount + i * deltaAmount)
routineOrders.push(routine)
Sleep(ApiReqInterval)
}
for (var i = 0 ; i < routineOrders.length ; i++) {
var orderId = routineOrders[i].wait()
if (orderId) {
ordersIDs.push(orderId)
Log("成功挂单", orderId)
}
}
return ordersIDs
}
function main() {
if (symbol == "null" || pendingPrice == -1 || pendingAmount == -1 || pendingPrice == -1 || deltaPrice == -1 || deltaAmount == -1) {
throw "参数设置错误"
}
exchange.SetCurrency(symbol)
// 屏蔽错误信息
SetErrorFilter("GetDepth")
while (true) {
var msg = ""
var depth = exchange.GetDepth()
if (!depth || (depth.Bids.length == 0 && depth.Asks.length == 0)) {
// 没有深度
msg = "没有深度数据,等待!"
Sleep(500)
} else {
// 获取到深度
Log("并发下单!")
var ordersIDs = pendingOrders(ordersNum, pendingPrice, pendingAmount, deltaPrice, deltaAmount)
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
Log("当前挂单个数0,停止运行")
return
}
var tbl = {
type: "table",
title: "当前挂单",
cols: ["id", "价格", "数量"],
rows: []
}
_.each(orders, function(order) {
tbl.rows.push([order.Id, order.Price, order.Amount])
})
LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
Sleep(500)
}
}
LogStatus(_D(), msg)
}
}
この戦略は、取引所 API と注文書インターフェースを検出します。注文書データが利用可能になると、この戦略は exchange.Go 関数を使用して注文を出します。注文を行った後、現在の保留中の注文のステータスがループでチェックされます。この戦略は実際にテストされていません。これはコード設計の参考資料にすぎません。興味のある方は、変更したり機能を追加したりして使用することができます。