FMZ platform menyokong pertukaran dYdX yang terdesentralisasi. Rakan-rakan yang mempunyai strategi dapat menggali dYdX dengan menyenangkan. Sudah lama saya ingin menulis strategi perdagangan rawak, menghasilkan wang dan kehilangan wang tanpa tujuan yang jelas untuk berlatih dengan mudah mengajar reka bentuk strategi. Jadi seterusnya kita bersama-sama merancang strategi pertukaran rawak, prestasi strategi baik atau tidak, kita berhak dan belajar reka bentuk strategi.
Gambar skrin untuk strategi perlombongan di sini.
Rakan-rakan yang mempunyai idea strategi perlombongan yang baik juga dialu-alukan untuk meninggalkan komen!
Mari kita berangan-angan! Rancangan untuk merancang strategi tanpa melihat petunjuk, tanpa melihat harga, hanya melakukan lebih banyak, hanya melakukan kosong, yang tersumbat adalah kebarangkalian. Kemudian kita akan menggunakan nombor rawak 1-100 untuk menentukan berapa banyak kosong.
Buat pelbagai syarat: nombor rawak 1 hingga 50. Syarat kosong: nombor rawak 51 hingga 100.
Sebilangan besar ruang adalah 50 nombor. Seterusnya kita akan memikirkan bagaimana untuk menyeimbangkan, kerana ia adalah permainan, maka mesti ada standard menang dan kalah. Jadi dalam perdagangan, kita menetapkan stop loss tetap sebagai standard menang dan kalah. Stop loss adalah menang, stop loss adalah kehilangan.
Perdagangan bukan tanpa kos, terdapat titik licin, bayaran prosedur dan lain-lain yang cukup untuk menarik peluang kemenangan dagangan rawak kami ke bawah 50%. Lebih baik anda merancang perbelanjaan berganda, kerana jika anda menang, maka kemungkinan kehilangan 10 kali berturut-turut 8 kali perdagangan rawak tidak akan begitu besar. Jadi saya ingin merancang jumlah yang kecil untuk perdagangan pertama, dan jika anda kalah, maka tambah jumlah berikutnya dan teruskan dengan pesanan rawak.
OK, strategi ini mudah seperti ini.
Sumber reka bentuk:
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)
}
}
Parameter strategi:
Ya! Strategi ini memerlukan nama, sebut sahaja anda meneka saiz (dYdX versi).
Rujukan hanya untuk rujukan sahaja, >_
Selepas ujian selesai, tidak ada bug. Tetapi saya rasa saya sudah sesuai dengan sistem ujian. T_T, saya sedang bermain.
Strategi ini hanya untuk tujuan pembelajaran, rujukan, dan rujukan.Berjuta~BerjutaJangan gunakan cakera sebenar!
XionglonghuiSaya ingin bertanya, adakah pertukaran didentral didydx kini menyokong dagangan segera? atau hanya kontrak kekal? Tidak pernah menggunakan pertukaran didentral, jika didydx menyokong dagangan segera, anda boleh mempertimbangkan untuk membuat strategi dagangan grid langsung. Atau pertukaran didentral, untuk mengesahkan sama ada pembelian dan penjualan berjaya, perlu menunggu masa, tidak seperti pertukaran pusat yang cepat seperti kilat, memerlukan pengesahan lama.
hyc1743Yang putih, tolong tanya kenapa dia tak boleh berlari.
Pencipta Kuantiti - Impian KecilDYdX saya telah mendedahkan bahawa saya mempunyai rekod sebenar dan kontrak kekal.
Pencipta Kuantiti - Impian KecilKod sumber strategi hanyalah kod strategi, dan parameter harus dikonfigurasikan. Parameter mempunyai gambar skrin di dalam artikel.