최근 두 일 동안, 텔레그램 그룹 사용자들은 "나는 새로운 전략을 세우는 데 필요한 디자인 사례를 참조하기를 바랍니다".라고 사유했습니다.
예를 들어, 현재 어떤 거래소, 어떤 거래 쌍: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函数并发下单。下单之后就循环检测当前挂单的状态。策略没有经过实际测试,这里只是给出一个代码设计参考,有兴趣的可以修改、添加功能使用。