Dalam artikel sebelumnya, kami telah menganalisis idea dan pelaksanaan kod strategi frekuensi tinggi versi spot asli LeeksReaper.
Analisis Strategi LeeksReaperhttps://www.fmz.com/bbs-topic/9725) Analisis Strategi LeeksReaperhttps://www.fmz.com/bbs-topic/9733)
Banyak pengguna mata wang digital memberi lebih banyak perhatian kepada strategi pemimpin wang cetak. Strategi pemimpin wang cetak didagangkan dalam kontrak Binance USDT. Dari pemerhatian dan analisis ramai pengikut dapat dilihat bahawa strategi frekuensi tinggi ini serupa dengan prinsip LeeksReaper (pemimpin Xiaocao juga mengatakan bahawa prinsip strategi frekuensi tinggi serupa). Tetapi mesti ada sesuatu yang halus untuk mencapai kadar kemenangan yang stabil dan nisbah keuntungan dan kerugian yang sesuai.
Oleh itu, saya tidak dapat membantu tetapi membuat perubahan ajaib. Walaupun kesan strategi perubahan ajaib jauh lebih buruk daripada strategi pemimpin. Ia juga merupakan amalan pembelajaran untuk strategi frekuensi tinggi. FMZer yang berminat akan membincangkan dan belajar bersama-sama.
var TickInterval = 100
function LeeksReaper() {
var self = {}
self.numTick = 0
self.lastTradeId = 0
self.vol = 0
self.askPrice = 0
self.bidPrice = 0
self.orderBook = {
Asks: [],
Bids: []
}
self.prices = []
self.tradeOrderId = 0
self.account = null
self.buyPrice = 0
self.sellPrice = 0
self.state = 0
self.depth = null
self.updateTrades = function() {
var trades = _C(exchange.GetTrades)
if (self.prices.length == 0) {
while (trades.length == 0) {
trades = trades.concat(_C(exchange.GetTrades))
}
for (var i = 0; i < 15; i++) {
self.prices[i] = trades[trades.length - 1].Price
}
}
self.vol = 0.7 * self.vol + 0.3 * _.reduce(trades, function(mem, trade) {
// Huobi not support trade.Id
if ((trade.Id > self.lastTradeId) || (trade.Id == 0 && trade.Time > self.lastTradeId)) {
self.lastTradeId = Math.max(trade.Id == 0 ? trade.Time : trade.Id, self.lastTradeId)
mem += trade.Amount
}
return mem
}, 0)
}
self.updateOrderBook = function() {
var orderBook = _C(exchange.GetDepth)
self.depth = orderBook
self.buyPrice = orderBook.Bids[pendingLevel].Price
self.sellPrice = orderBook.Asks[pendingLevel].Price
self.orderBook = orderBook
if (orderBook.Bids.length < 3 || orderBook.Asks.length < 3) {
return
}
self.bidPrice = orderBook.Bids[0].Price * 0.618 + orderBook.Asks[0].Price * 0.382 + 0.01
self.askPrice = orderBook.Bids[0].Price * 0.382 + orderBook.Asks[0].Price * 0.618 - 0.01
self.prices.shift()
self.prices.push(_N((orderBook.Bids[0].Price + orderBook.Asks[0].Price) * 0.15 +
(orderBook.Bids[1].Price + orderBook.Asks[1].Price) * 0.1 +
(orderBook.Bids[2].Price + orderBook.Asks[2].Price) * 0.1 +
(orderBook.Bids[3].Price + orderBook.Asks[3].Price) * 0.075 +
(orderBook.Bids[4].Price + orderBook.Asks[4].Price) * 0.05 +
(orderBook.Bids[5].Price + orderBook.Asks[5].Price) * 0.025))
}
self.updateAccount = function() {
var account = exchange.GetAccount()
if (!account) {
return
}
self.account = account
LogProfit(parseFloat(account.Info.totalWalletBalance), account)
}
self.CancelAll = function() {
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)
}
Sleep(100)
}
}
self.poll = function() {
self.numTick++
self.updateTrades()
self.updateOrderBook()
var pos = _C(exchange.GetPosition)
var burstPrice = self.prices[self.prices.length - 1] * burstThresholdPct
var bull = false
var bear = false
LogStatus(_D(), "\n", 'Tick:', self.numTick, 'self.vol:', self.vol, ', lastPrice:', self.prices[self.prices.length - 1], ', burstPrice: ', burstPrice)
if (self.numTick > 2 && (
self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -1)) > burstPrice ||
self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -2)) > burstPrice && self.prices[self.prices.length - 1] > self.prices[self.prices.length - 2]
)) {
bull = true
} else if (self.numTick > 2 && (
self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -1)) < -burstPrice ||
self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -2)) < -burstPrice && self.prices[self.prices.length - 1] < self.prices[self.prices.length - 2]
)) {
bear = true
}
if (pos.length != 0) {
if (pos[0].Type == PD_LONG) {
self.state = 1
} else {
self.state = 2
}
} else {
self.state = 0
}
if ((!bull && !bear)) {
return
}
if (bull) {
var price = (self.state == 0 || self.state == 1) ? self.buyPrice : self.depth.Bids[coverPendingLevel].Price
var amount = (self.state == 0 || self.state == 1) ? pendingAmount : pos[0].Amount
exchange.SetDirection("buy")
exchange.Buy(price, amount)
} else if (bear) {
var price = (self.state == 0 || self.state == 2) ? self.sellPrice : self.depth.Asks[coverPendingLevel].Price
var amount = (self.state == 0 || self.state == 2) ? pendingAmount : pos[0].Amount
exchange.SetDirection("sell")
exchange.Sell(price, amount)
}
self.numTick = 0
Sleep(TickInterval)
self.CancelAll()
self.updateAccount()
}
while (!self.account) {
self.updateAccount()
Sleep(500)
}
Log("self.account:", self.account)
return self
}
function main() {
LogProfitReset()
exchange.SetPrecision(pricePrecision, amountPrecision)
exchange.SetContractType("swap")
var reaper = LeeksReaper()
while (true) {
reaper.poll()
Sleep(100)
}
}
Strategi ini adalah untuk merancang untuk berdagang di pasaran kontrak Binance USDT, yang menyokong kedudukan satu hala. Oleh itu, strategi diubahsuai mengikut ciri-ciri kedudukan satu hala (kedudukan satu hala lebih mudah untuk mengubah strategi), kami tidak mempertimbangkan untuk menutup kedudukan, kami hanya mempertimbangkan jual beli. Idea ini lebih dekat dengan versi spot LeeksReaper.
Strategi pada dasarnya mengekalkan kriteria asal terobosan trend harga jangka pendek, yang dikawal oleh parameterburstThresholdPCT
, berdasarkan mana untuk menilai sama ada harga jangka pendek adalahbull
ataubear
.
Strategi ini menghapuskan beberapa modul asal, seperti modul baki. Perubahan yang lebih besar adalah pembuat dalam buku pesanan, menunggu transaksi. Ia dijangka adalah untuk membuka kedudukan dengan kos yang lebih rendah dalam permainan panjang / pendek yang kacau, mengikuti trend jangka pendek, dan menutup kedudukan apabila trend jangka pendek berbalik dan terus membuka kedudukan dengan perintah menunggu yang terbalik.
Walaupun strategi adalah strategi yang tidak menghasilkan wang, atau bahkan kehilangan wang, tetapi sebagai FMZer yang belajar strategi frekuensi tinggi, memerhatikan tingkah laku strategi frekuensi tinggi, memerhatikan mikro-hukum pasaran adalah model yang boleh digunakan.
Pada masa ini, tiada arah yang baik untuk pengoptimuman telah dijumpai. Seseorang yang berminat boleh meninggalkan komen anda dan membincangkan bersama.
Strategi daripada:https://www.fmz.com/strategy/260806
Strategi ini hanya untuk belajar, bot sebenar mungkin mengalami kerugian apabila pasaran tidak terlalu optimis.