Untuk memenuhi kebutuhan pengguna, FMZ platform baru-baru ini mendukung pertukaran terdesentralisasi dYdX. Mitra-mitra yang memiliki strategi dapat menambang dYdX dengan senang hati. Sudah lama saya ingin menulis strategi perdagangan acak, menghasilkan uang dan kehilangan uang tanpa tujuan apa pun adalah latihan untuk mengajarkan desain strategi. Jadi selanjutnya kita bersama-sama merancang strategi pertukaran acak, kinerja strategi baik atau tidak peduli, kita berhak dan harus belajar desain strategi.
Gambar gambar strategi penambangan di artikel ini.
Jika Anda memiliki ide tentang strategi penambangan yang bagus, silakan tinggalkan komentar!
Mari kita bercerita tentang hal-hal yang aneh! Kita berencana untuk merancang strategi yang tidak melihat indikator, tidak melihat harga, tidak ada pilihan lain selain melakukan lebih banyak, hanya melakukan kosong, yang tersumbat adalah probabilitas.
Menggunakan beberapa kondisi: Nomor acak 1 - 50. Kondisi kosong: 51-100 angka acak.
Banyak kosong adalah 50 angka. Selanjutnya kita akan memikirkan bagaimana untuk menyeimbangkan, karena itu adalah taruhan, maka harus ada standar menang dan kalah. Jadi dalam perdagangan kita akan menetapkan stop loss tetap sebagai standar menang dan kalah. Stop loss adalah menang, stop loss adalah kehilangan.
Perdagangan tidak bebas biaya, ada titik slippage, biaya proses, dan faktor lain yang cukup untuk menarik peluang kemenangan perdagangan acak kami ke bawah 50%. Lebih baik kita merancang perkalian, karena jika itu adalah taruhan, maka kemungkinan kehilangan 8 transaksi acak 10 kali berturut-turut seharusnya tidak terlalu besar. Jadi saya ingin merancang transaksi pertama dengan jumlah yang sangat kecil, dan jika Anda kehilangan, maka tingkatkan jumlah berikutnya untuk melanjutkan transaksi acak.
OK, strategi desain sederhana seperti ini.
Sumber desain:
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 kebijakan:
Ya, itu benar! Kebijakan ini membutuhkan nama, sebut saja "Tebak Ukuran" (versi dYdX).
Untuk referensi saja, >_
T_T, saya sedang bermain, tapi saya merasa bahwa saya sudah sesuai dengan sistem retesting.
Strategi ini hanya untuk pembelajaran, referensi, dan informasi.Miliaran~MiliaranJangan gunakan hardisk!
xionglonghuiJika didydx mendukung perdagangan langsung, Anda dapat mempertimbangkan untuk melakukan strategi perdagangan grid langsung. Ada juga pertukaran yang terdesentralisasi, dan untuk mengkonfirmasi apakah pembelian dan penjualan berhasil, Anda harus menunggu waktu, tidak seperti pertukaran terdesentralisasi yang cepat seperti kilat, yang membutuhkan konfirmasi lama.
hyc1743Si putih kecil, tolong tanyakan mengapa dia tidak bisa berlari.
Penemu Kuantitas - Mimpi KecilDYdX saya publikasikan dengan kontrak permanen.
Penemu Kuantitas - Mimpi KecilKode sumber strategi hanyalah kode strategi, dan parameternya harus dikonfigurasi. Parameter memiliki screenshot di artikel.