Để đáp ứng nhu cầu của người dùng, gần đây nền tảng FMZ đã hỗ trợ sàn giao dịch phi tập trung dYdX. Những người có chiến lược có thể khai thác dYdX một cách thú vị. Cách đây rất lâu, tôi đã muốn viết một chiến lược giao dịch ngẫu nhiên, kiếm tiền và thua tiền không có mục đích là thực hành, chỉ cần dạy một chút chiến lược. Vì vậy, tiếp theo chúng tôi cùng nhau thiết kế một chiến lược sàn giao dịch ngẫu nhiên, chiến lược có hiệu quả hay không, chúng tôi có quyền và học chiến lược thiết kế.
Các chiến lược khai thác trong bài viết này.
Bạn bè có ý tưởng chiến lược khai thác tốt cũng được chào đón để lại ý kiến!
Chúng ta hãy suy nghĩ một chút! Hãy lên kế hoạch thiết kế một chiến lược không nhìn vào các chỉ số, không nhìn vào giá cả, chỉ cần làm nhiều, làm trống, và tất cả những gì chúng ta làm là xác suất.
Làm nhiều điều kiện: số ngẫu nhiên từ 1 đến 50. Điều kiện làm trống: số ngẫu nhiên từ 51 đến 100.
Trong giao dịch, chúng ta sẽ thiết lập một tiêu chuẩn dừng dừng, dừng lỗ cố định như một tiêu chuẩn thua hoặc thua. Ngừng dừng là thắng, dừng lỗ là thua. Về mức độ dừng dừng, dừng lỗ phù hợp như thế nào, điều này thực sự ảnh hưởng đến tỷ lệ lỗ, đúng vậy! cũng ảnh hưởng đến tỷ lệ thắng!
Việc giao dịch không phải là không tốn kém, những yếu tố như điểm trượt, chi phí thủ tục là đủ để kéo tỷ lệ thắng của chúng tôi xuống dưới 50%. Vì vậy, tôi muốn thiết kế giao dịch đầu tiên với số lượng đơn nhỏ, có thể càng nhỏ càng nhỏ. Sau đó, nếu bạn thua, hãy tăng số lượng tiếp theo và tiếp tục đặt đơn ngẫu nhiên.
Được rồi, chiến lược chỉ đơn giản như thế thôi.
Nguồn mã thiết kế:
var openPrice = 0
var ratio = 1
var totalEq = null
var nowEq = null
function cancelAll() {
while (1) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(500)
}
Sleep(500)
}
}
function main() {
if (isReset) {
_G(null)
LogReset(1)
LogProfitReset()
LogVacuum()
Log("重置所有数据", "#FF0000")
}
exchange.SetContractType(ct)
var initPos = _C(exchange.GetPosition)
if (initPos.length != 0) {
throw "策略启动时有持仓!"
}
exchange.SetPrecision(pricePrecision, amountPrecision)
Log("设置精度", pricePrecision, amountPrecision)
if (!IsVirtual()) {
var recoverTotalEq = _G("totalEq")
if (!recoverTotalEq) {
var currTotalEq = _C(exchange.GetAccount).Balance // equity
if (currTotalEq) {
totalEq = currTotalEq
_G("totalEq", currTotalEq)
} else {
throw "获取初始权益失败"
}
} else {
totalEq = recoverTotalEq
}
} else {
totalEq = _C(exchange.GetAccount).Balance
}
while (1) {
if (openPrice == 0) {
// 更新账户信息,计算收益
var nowAcc = _C(exchange.GetAccount)
nowEq = IsVirtual() ? nowAcc.Balance : nowAcc.Balance // equity
LogProfit(nowEq - totalEq, nowAcc)
var direction = Math.floor((Math.random()*100)+1) // 1~50 , 51~100
var depth = _C(exchange.GetDepth)
if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
Sleep(1000)
continue
}
if (direction > 50) {
// long
openPrice = depth.Bids[1].Price
exchange.SetDirection("buy")
exchange.Buy(Math.abs(openPrice) + slidePrice, amount * ratio)
} else {
// short
openPrice = -depth.Asks[1].Price
exchange.SetDirection("sell")
exchange.Sell(Math.abs(openPrice) - slidePrice, amount * ratio)
}
Log("下", direction > 50 ? "买单" : "卖单", ",价格:", Math.abs(openPrice))
continue
}
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
var pos = _C(exchange.GetPosition)
if (pos.length == 0) {
openPrice = 0
continue
}
// 平仓检测
while (1) {
var depth = _C(exchange.GetDepth)
if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
Sleep(1000)
continue
}
var stopLossPrice = openPrice > 0 ? Math.abs(openPrice) - stopLoss : Math.abs(openPrice) + stopLoss
var stopProfitPrice = openPrice > 0 ? Math.abs(openPrice) + stopProfit : Math.abs(openPrice) - stopProfit
var winOrLoss = 0 // 1 win , -1 loss
// 画线
$.PlotLine("bid", depth.Bids[0].Price)
$.PlotLine("ask", depth.Asks[0].Price)
// 止损
if (openPrice > 0 && depth.Bids[0].Price < stopLossPrice) {
exchange.SetDirection("closebuy")
exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)
winOrLoss = -1
} else if (openPrice < 0 && depth.Asks[0].Price > stopLossPrice) {
exchange.SetDirection("closesell")
exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
winOrLoss = -1
}
// 止盈
if (openPrice > 0 && depth.Bids[0].Price > stopProfitPrice) {
exchange.SetDirection("closebuy")
exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)
winOrLoss = 1
} else if (openPrice < 0 && depth.Asks[0].Price < stopProfitPrice) {
exchange.SetDirection("closesell")
exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
winOrLoss = 1
}
// 检测挂单
Sleep(2000)
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
pos = _C(exchange.GetPosition)
if (pos.length == 0) {
if (winOrLoss == -1) {
ratio++
} else if (winOrLoss == 1) {
ratio = 1
}
break
}
} else {
// 撤销挂单
cancelAll()
Sleep(2000)
pos = _C(exchange.GetPosition)
// 撤销后更新持仓,需要再次检查
if (pos.length == 0) {
if (winOrLoss == -1) {
ratio++
} else if (winOrLoss == 1) {
ratio = 1
}
break
}
}
var tbl = {
"type" : "table",
"title" : "info",
"cols" : ["totalEq", "nowEq", "openPrice", "bid1Price", "ask1Price", "ratio", "pos.length"],
"rows" : [],
}
tbl.rows.push([totalEq, nowEq, Math.abs(openPrice), depth.Bids[0].Price, depth.Asks[0].Price, ratio, pos.length])
tbl.rows.push(["pos", "type", "amount", "price", "--", "--", "--"])
for (var j = 0 ; j < pos.length ; j++) {
tbl.rows.push([j, pos[j].Type, pos[j].Amount, pos[j].Price, "--", "--", "--"])
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
}
} else {
// 撤销挂单
// 重置openPrice
cancelAll()
openPrice = 0
}
Sleep(1000)
}
}
Các tham số chiến lược:
Bạn có thể đặt tên cho công cụ này là "đánh giá kích thước" (dYdX version) hay "đánh giá kích thước" (dYdX version).
Đánh giá lại chỉ để tham khảo, >_
Kết thúc kiểm tra, không có BUG. Nhưng tôi cảm thấy mình có phù hợp với hệ thống kiểm tra không... T_T, thực sự đang chạy và chơi.
Các chiến lược này chỉ dành cho mục đích học tập, tham khảo, và nghiên cứu.Không.~Không.Đừng sử dụng đĩa thật!
XionglonghuiBạn có thể hỏi, liệu sàn giao dịch phi tập trung dydx hiện nay có hỗ trợ giao dịch trực tiếp không? Hay chỉ có hợp đồng vĩnh viễn? Không bao giờ sử dụng sàn giao dịch phi tập trung, nếu sàn giao dịch phi tập trung dydx hỗ trợ giao dịch trực tiếp, bạn có thể xem xét một chiến lược giao dịch lưới giao dịch trực tiếp.
hyc1743Một người da trắng, xin vui lòng hỏi tại sao anh không chạy lên.
Những nhà phát minh định lượng - những giấc mơ nhỏDYdX là công khai của tôi có một đĩa thật, hợp đồng vĩnh viễn.
Những nhà phát minh định lượng - những giấc mơ nhỏMã nguồn chiến lược chỉ là mã chiến lược, và các tham số được cấu hình trên đó. Các tham số có hình ảnh chụp trong bài viết.