Transplantasi daripada:https://github.com/richox/okcoin-leeks-reaper
Saya hanya melakukan pemindahan, tidak ada ujian cakera fizikal, dan saya berminat untuk belajar. Pencipta Kuantitized Tick-Level Retargeting menyokong permainan Deepth dan Trades, yang boleh melakukan retargeting secara langsung ke arah logik strategi pembelajaran
Berikut adalah gambaran asal:
Ini adalah program bot perdagangan frekuensi tinggi di platform dagangan Bitcoin OKCoin, yang telah berjaya menyalurkan 6,000 ringgit kepada 250,000 ringgit pada pertengahan Januari 2017. Strategi ini sebenarnya telah gagal kerana dasar tekanan tinggi Bank Sentral terhadap Bitcoin yang baru-baru ini, platform utama telah menghentikan pembiayaan dan mula mengenakan bayaran transaksi.
Program robot ini berdasarkan dua strategi utama:
Prosedur ini memerlukan kedudukan yang seimbang, iaitu (modal + pembiayaan = wang tunai), supaya aset bersih tidak berubah seiring dengan harga ketika kedudukan 50%, tetapi juga menjamin apabila turun naik trend berlaku.Terjatuh dan terjatuh。
Terima kasih kepada dua projek berikut:
Terima kasih kepada OKCoin:
BTC: 3QFn1qfZMhMQ4FhgENR7fha3T8ZVw1bEeU
/*backtest start: 2019-09-05 00:00:00 end: 2019-09-05 22:00:00 period: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT","fee":[0,0]}] mode: 1 */ 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.p = 0.5 self.account = null self.preCalc = 0 self.preNet = 0 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.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.35 + (orderBook.Bids[1].Price + orderBook.Asks[1].Price) * 0.1 + (orderBook.Bids[2].Price + orderBook.Asks[2].Price) * 0.05)) } self.balanceAccount = function() { var account = exchange.GetAccount() if (!account) { return } self.account = account var now = new Date().getTime() if (self.orderBook.Bids.length > 0 && now - self.preCalc > (CalcNetInterval * 1000)) { self.preCalc = now var net = _N(account.Balance + account.FrozenBalance + self.orderBook.Bids[0].Price * (account.Stocks + account.FrozenStocks)) if (net != self.preNet) { self.preNet = net LogProfit(net) } } self.btc = account.Stocks self.cny = account.Balance self.p = self.btc * self.prices[self.prices.length-1] / (self.btc * self.prices[self.prices.length-1] + self.cny) var balanced = false if (self.p < 0.48) { Log("开始平衡", self.p) self.cny -= 300 if (self.orderBook.Bids.length >0) { exchange.Buy(self.orderBook.Bids[0].Price + 0.00, 0.01) exchange.Buy(self.orderBook.Bids[0].Price + 0.01, 0.01) exchange.Buy(self.orderBook.Bids[0].Price + 0.02, 0.01) } } else if (self.p > 0.52) { Log("开始平衡", self.p) self.btc -= 0.03 if (self.orderBook.Asks.length >0) { exchange.Sell(self.orderBook.Asks[0].Price - 0.00, 0.01) exchange.Sell(self.orderBook.Asks[0].Price - 0.01, 0.01) exchange.Sell(self.orderBook.Asks[0].Price - 0.02, 0.01) } } Sleep(BalanceTimeout) var orders = exchange.GetOrders() if (orders) { for (var i = 0; i < orders.length; i++) { if (orders[i].Id != self.tradeOrderId) { exchange.CancelOrder(orders[i].Id) } } } } self.poll = function() { self.numTick++ self.updateTrades() self.updateOrderBook() self.balanceAccount() var burstPrice = self.prices[self.prices.length-1] * BurstThresholdPct var bull = false var bear = false var tradeAmount = 0 if (self.account) { LogStatus(self.account, 'Tick:', self.numTick, ', 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 tradeAmount = self.cny / self.bidPrice * 0.99 } 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 tradeAmount = self.btc } if (self.vol < BurstThresholdVol) { tradeAmount *= self.vol / BurstThresholdVol } if (self.numTick < 5) { tradeAmount *= 0.8 } if (self.numTick < 10) { tradeAmount *= 0.8 } if ((!bull && !bear) || tradeAmount < MinStock) { return } var tradePrice = bull ? self.bidPrice : self.askPrice while (tradeAmount >= MinStock) { var orderId = bull ? exchange.Buy(self.bidPrice, tradeAmount) : exchange.Sell(self.askPrice, tradeAmount) Sleep(200) if (orderId) { self.tradeOrderId = orderId var order = null while (true) { order = exchange.GetOrder(orderId) if (order) { if (order.Status == ORDER_STATE_PENDING) { exchange.CancelOrder(orderId) Sleep(200) } else { break } } } self.tradeOrderId = 0 tradeAmount -= order.DealAmount tradeAmount *= 0.9 if (order.Status == ORDER_STATE_CANCELED) { self.updateOrderBook() while (bull && self.bidPrice - tradePrice > 0.1) { tradeAmount *= 0.99 tradePrice += 0.1 } while (bear && self.askPrice - tradePrice < -0.1) { tradeAmount *= 0.99 tradePrice -= 0.1 } } } } self.numTick = 0 } return self } function main() { var reaper = LeeksReaper() while (true) { reaper.poll() Sleep(TickInterval) } }
Raja Hip-HopStrategi telah gagal dan keuntungan berasal dari pendapatan frekuensi tinggi dengan sedikit perbezaan dengan bayaran sifar.
Kongbai979 self.vol到底是个啥?是一个ticker期间内所有交易量的总和吗?
hariTrader2018for (var i = 0; i < 15; i++) { self.prices[i] = trades[trades.length - 1].Price }; adakah ini sedikit masalah, adakah setiap elemen dalam array harga adalah harga transaksi terkini?
Kouyou7035Saya mempunyai beberapa bursa yang tidak mempunyai bayaran pembetulan dan berdagang dengan mendalam. Bolehkah anda mencuba strategi ini? Adakah Tuhan memberi panduan, saya boleh membantu memohon akaun bursa?
bijiasuoBagus, sayangnya tidak boleh, boleh sekarang?
SkyfffireHarga: 2000 keping, tidak rasmi, boleh dihubungi
RajajackAdakah ada yang telah mencuba dan datang untuk membincangkan manfaatnya?
valennnBilakah versi nota akan datang?
WuqianmingBagaimana untuk menjalankan bursa yang tidak disokong oleh botvs, yang bebas dagangan, bagaimana untuk menulis API bursa?
JTerima kasih kerana berkongsi strategi yang baik! exchange.CancelOrder ((orders[i].Id) Ada sedikit masalah dengan kod pencabutan, pencabutan yang berterusan semasa ujian. Jika anda melihat kod versi asal, anda seharusnya menunggu 10 saat untuk menarik balik. Saya tidak mempunyai masalah dengan apa-apa yang lain, saya mengubahnya dan meletakkannya di bursa percuma, dan rasanya sangat baik.
Kmstudio 66行prices需加.length
Buah kacang saljiBahasa apa itu?
Sifar 平衡那里下单忘加上Price属性了。。已更正,有发现bug请及时提交.
Air TawarMenurutnya, ada lagi strategi untuk mendapatkan wang, atau tidak menjual, dan menyimpan wang sendiri.
1213761768Tidak boleh keluar.
Zhang tidak boleh menahan diri.Tidak, harga tawaran mestilah lebih rendah daripada harga permintaan, satu adalah harga beli, satu adalah harga jual.
bwxiaokJika anda ingin mengetahui harga jual atau harga jual, anda perlu mengetahui harga jual atau harga jual. Jika anda ingin mengetahui harga jual atau harga jual, anda perlu mengetahui harga jual atau harga jual.
Saya suka bulu.Saya telah menulis nota, dan semua orang perlu dapat menambahkan Weibo saya Hoo_tongxue, dan yang paling penting, percuma.
Saya suka bulu."Sudah lama saya tidak memakai pakaian yang tebal.
Bola arang kecilDi mana-mana bursa?
SifarIni sepatutnya initialize kepada harga terkini, disusul dengan operasi shift.
Kemunculan MuzikIni adalah satu-satunya cara yang boleh anda lakukan untuk menghidupkan semula robot.
suskiYa, boleh, lobak ini akan lebih baik ^_^
SkyfffireBiarlah penjual menjual dan pembeli membeli, dan jangan berdebat dengan anda.
Perempuan juga.Semua orang telah membuka kod sumbernya, anda boleh komen, jual 2000?
Akkk 请问zaif.jp现在还是免手续费吗?怎么通过认证呢
Xiahaohuan001Lihat ID ya
J 在Zaif.jp上测试,买一卖一间经常就没有空间,用这个策略有什么问题吗?
JAdakah itu benar? Marilah kita keluar dan beri pengajaran kepada semua orang.
Xiahaohuan001Penulis yang terkejut
JBaiklah, ada beberapa soalan lagi, sila, dan ada satu lagi catatan: https://www.botvs.com/bbs-topic/677
SifarJika anda mempunyai apa-apa maklumat atau pertanyaan mengenai strategi ini, sila post di forum, terima kasih atas sokongan anda!
SifarTerima kasih untuk cadangan, saya menambah parameter, masa menunggu pesanan imbangan, jika anda ingin memproses secara serentak, anda boleh merakam ID setiap pesanan dengan masa pesanan, dan kemudian membatalkan secara selektif, yang dapat mengurangkan kelewatan, tetapi secara logiknya, harus menyeimbangkan semula perdagangan terlebih dahulu, kerana tidak semua bursa menyokong sifat Time untuk mendapatkan pesanan, jadi platform tidak menambahkan sifat ini dalam Perintah, memerlukan statistik sendiri.
Xiahaohuan001Saya rasa strategi ini agak pelik, saya suka.
SifarSaya tak pernah cuba. Saya perlukan kajian anda sendiri.
Orion1708Z besar yang sukar dipindahkan. Sila, adakah perubahan pada parameter dasar lalai mempunyai kesan yang besar pada dasar?
SifarHahah, terima kasih, sudah ditambah.
SifarJavascript
SifarFrekuensi perdagangan tinggi
Pencipta Kuantiti - Impian KecilPenulis asal juga hanya didedahkan pada hari-hari yang sama ketika ia menerima bayaran.
Xiahaohuan001Mengapa strategi trend takut dengan kos kejutan?