Tài nguyên đang được tải lên... tải...

Tải OKCoin vào máy thu hoạch hạt cải

Tác giả:Không, Ngày: 2017-01-30 19:38:25
Tags:Tần số cao

Tái cấy từ:https://github.com/richox/okcoin-leeks-reaper

Tác giả ban đầu nói rằng nó sẽ không hiệu quả khi tôi nhận được phí, tôi chỉ thực hiện cấy ghép, không có thử nghiệm đĩa thực, rất quan tâm đến việc học hỏi. Các nhà phát minh đã định lượng Tick-level retrieval hỗ trợ Deepth và Trades playback, có thể trực tiếp retrieve học tập chiến lược logic

Dưới đây là thông tin ban đầu

OKCoin máy thu hoạch cải xanh

Đây là một chương trình robot giao dịch tần số cao trên nền tảng giao dịch Bitcoin OKCoin, được mô phỏng cơ bản từ tháng 6 năm 2016 đến giữa tháng 1 năm 2017. Chiến lược này đã thành công trong việc đưa số tiền đầu tư ban đầu là 6.000 đô la xuống còn 250.000 đô la.

image

Chương trình robot này dựa trên hai chiến lược chính:

  1. Chiến lược xu hướng: đặt hàng kịp thời và theo dõi khi giá thay đổi theo xu hướng.Tiếp tục săn lùng
  2. Chiến lược cân bằng: Khi một vị trí đi xa 50%, hãy đưa ra một tờ giấy nhỏ để vị trí dần trở lại 50% và ngăn chặn sự đảo ngược cuối xu hướng gây ra sự rút lui, tức làMón lợi nhuận bỏ túi, không ăn đuôi cá

Quy trình này yêu cầu cân bằng vị thế, tức là (tài chính + tài chính = tiền tài chính) để đảm bảo rằng khi vị trí là 50%, tài sản ròng không biến động theo giá cả và đảm bảo khi có biến động xu hướng.Bị ngã và ngã.

Xin cảm ơn hai dự án sau:

Xin cảm ơn 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)
    }
}

Có liên quan

Thêm nữa

Vua của Hip HopChiến lược đã thất bại, lợi nhuận đến từ thu nhập tỷ lệ chênh lệch tần suất cao và không có chi phí thủ tục.

congbai979 self.vol到底是个啥?是一个ticker期间内所有交易量的总和吗?

dayTrader2018for (var i = 0; i < 15; i++) { self.prices[i] = trades[trades.length - 1].Price }; Có một chút vấn đề ở đây, không phải mỗi phần tử trong price là giá giao dịch mới nhất?

kouyou7035Tôi có một vài sàn giao dịch không có phí thủ tục và giao dịch sâu. Bạn có thể thử chiến lược này không? Xin Chúa hướng dẫn, tôi có thể giúp bạn đăng ký tài khoản sàn giao dịch.

đậuTuyệt vời, tôi không thể sử dụng nó, bây giờ có thể sử dụng không?

SkyfffireGiá bán bản chú thích: 2000 bản, không chính thức, có liên hệ

rajajackCó ai đã thử thử và thảo luận về lợi ích của nó không?

valennnKhi nào sẽ có bản chú thích?

WuqianmingLàm thế nào để chạy trên một sàn giao dịch miễn phí không hỗ trợ botvs, cần phải viết API sàn giao dịch?

JCảm ơn bạn đã chia sẻ chiến lược tuyệt vời này! exchange.CancelOrder ((orders[i].Id) Có một chút vấn đề với mã hủy đặt hàng ở đây. Theo các nguồn tin từ các trang web khác trên mạng xã hội, có thể có một số người đã đăng ký đăng ký trên mạng xã hội. Những điều khác hầu như không có vấn đề, tôi đã sửa đổi và đặt nó trên sàn giao dịch miễn phí, cảm thấy rất tốt.

Kmstudio 66行prices需加.length

đậu tuyếtĐó là ngôn ngữ gì?

Không 平衡那里下单忘加上Price属性了。。已更正,有发现bug请及时提交.

Động vật thủy sinhCó vẻ như vẫn có chiến lược kiếm tiền, hoặc không bán, để lại tiền của mình.

1213761768Không ra sớm.

Thanh TửKhông, giá thầu phải nhỏ hơn giá hỏi, một là giá mua, một là giá bán.

bwxiaokKhi tính giá thầu và giá hỏi, bạn đặt hàng như thể bạn không quyết định giá thầu lớn hơn giá hỏi, vì vậy nếu mua bán rất gần, tính toán có khả năng là mua cao, bán thấp, có vấn đề này không?

Tôi thích lông.Tôi đã viết một bản chú thích, mọi người cần có thể thêm vào Woo_tongxue của tôi, và quan trọng nhất là miễn phí.

Tôi thích lông.Những người có làn da thật đậm đậm.

Quả than nhỏNhững sàn giao dịch nào?

KhôngĐiều này nên được khởi động thành giá mới nhất, sau đó là các thao tác shift.

Lập lại hàng hóa là một phép màuNhưng chúng tôi đã không thể làm được điều đó.

suckyCó thể được, món ăn này cắt tốt hơn ^_^

SkyfffireHãy để người bán bán, và người mua mua, và không tranh cãi với bạn.

Cô dâu cũng vậy.Mọi người đã công khai mã nguồn, bạn hãy bình luận, bán 2000? Thật đáng tiếc.

请问zaif.jp现在还是免手续费吗?怎么通过认证呢

xiahaohuan001Nhìn ID đúng

J 在Zaif.jp上测试,买一卖一间经常就没有空间,用这个策略有什么问题吗?

JCó thật không? Hãy ra ngoài và dạy cho mọi người một bài học.

xiahaohuan001Tác giả ngạc nhiên

JĐược rồi, có một số câu hỏi, xin vui lòng, và một bài viết khác: https://www.botvs.com/bbs-topic/677

KhôngNếu bạn có bất kỳ câu hỏi hoặc chia sẻ bài học nào về chiến lược này, vui lòng đăng trên diễn đàn, cảm ơn vì đã hỗ trợ!

KhôngCảm ơn đề xuất, tôi đã thêm một tham số, cân bằng thời gian chờ đơn hàng, nếu muốn xử lý đồng thời, bạn có thể ghi lại ID của mỗi đơn đặt hàng với thời gian đặt hàng, sau đó hủy chọn lọc, điều này có thể làm giảm sự chậm trễ, tuy nhiên, theo lý thuyết, nên cân bằng lại đầu tiên, bởi vì không phải tất cả các sàn giao dịch đều hỗ trợ tính năng Thời gian để có được đơn đặt hàng, vì vậy nền tảng không thêm tính năng này vào Order, cần số liệu thống kê của riêng mình.

xiahaohuan001Tôi cảm thấy chiến thuật này thật kỳ lạ, tôi thích điều đó.

KhôngTôi cũng chưa từng thử điều này. Tôi cần các bạn nghiên cứu.

Orion1708Difficulty Z big porting. Please, change the policy parameter's default value has a big impact on the policy. Xin vui lòng, thay đổi các tham số chính sách mặc định có ảnh hưởng lớn đến chính sách không?

KhôngHa ha, cảm ơn, đã được thêm vào.

KhôngJavaScript

KhôngTỷ lệ giao dịch cao

Những nhà phát minh định lượng - những giấc mơ nhỏNhững người viết bản gốc cũng được công bố chỉ trong những ngày đó khi nhận tiền thủ tục.

xiahaohuan001Tại sao các chiến lược xu hướng lại sợ chi phí tác động?