Chiến lược giao dịch định lượng tiền điện tử cấu hình trao đổi

Tác giả:Tốt, Tạo: 2019-09-16 14:55:26, Cập nhật: 2023-11-07 20:50:11

img

Khi người mới bắt đầu thiết kế một chiến lược giao dịch định lượng tiền điện tử, thường có nhiều yêu cầu về các chức năng khác nhau. Bất kể ngôn ngữ và nền tảng lập trình, tất cả chúng đều sẽ gặp phải các yêu cầu thiết kế khác nhau. Ví dụ, đôi khi nhiều loại giao dịch luân chuyển được yêu cầu, đôi khi cần phải có nhiều nền tảng bảo hiểm, và đôi khi các loại giao dịch khác nhau được yêu cầu đồng thời.

Nền tảng học tập vẫn sử dụng nền tảng giao dịch FMZ Quanthttps://www.fmz.com), và thị trường được chọn là thị trường tiền điện tử.

Thiết kế chiến lược đa tiền điện tử

Hầu hết các tình huống nhu cầu này được chuẩn bị cho các chiến lược xu hướng và lưới đa tiền điện tử, cần được thực hiện trên thị trường với các phương pháp lặp lại giao dịch khác nhau.

Thường được thiết kế như thế này:

function Process (symbol) {
     exchange.IO("currency", symbol)
     var ticker = _C(exchange.GetTicker)
     Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", ticker)
     // ...
     // ..
     // .
}

function main(){
     var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
     while (true) {
         for (var i = 0 ; i < symbols.length; i++) {
             Process(symbols[i])
             Sleep(500)
         }
     }
}

Chúng ta cấu hình robot:

img

img

Có thể thấy rằng điều này nhận ra rằng một đối tượng trao đổi được cấu hình trên robot, và cặp giao dịch được chuyển đổi; thị trường của các cặp giao dịch khác nhau được thu được, và thị trường đa thương mại được thực hiện; và nó được thực hiện theo một chiến lược logic.

Có thể thấy rằng ba cặp giao dịch mà chúng tôi xác định: BTC_USDT, LTC_USDT, ETH_USDT, trong vòng lặp, lặp đi lặp lại lấy báo giá thị trường, và sau khi có được thông tin, nó có thể phát hiện cụ thể thị trường và kích hoạt logic giao dịch được thiết kế bởi chiến lược.

Một số độc giả có thể hỏi: Tôi không thích chuyển đổi cặp giao dịch, nó cảm thấy hơi khó khăn, và logic chiến lược không rõ ràng.

Có thực sự các lựa chọn thiết kế khác, mà chúng tôi sẽ giới thiệu nó ở dưới đây.

Thiết lập nhiều đối tượng trao đổi cho robot trong cùng một tài khoản trao đổi

Dữ liệu thị trường của các cặp giao dịch khác nhau được thu thập thông qua nhiều đối tượng trao đổi và được thực hiện trong logic chiến lược lặp lại.

Ví dụ, cấu hình robot bằng cách cấu hình ba đối tượng trao đổi cho robot. Các cặp giao dịch được đặt thành BTC_USDT, LTC_USDT và ETH_USDT tương ứng.

img

Tên là đối tượng trao đổi OKEX Spot V3 Test, trên trang Dashboard, trang cấu hình trao đổi:

img

Mọi chuyện đã xong rồi.

Chúng tôi đã thay đổi một chút mã này, bởi vì lần này chúng tôi đã thêm nhiều đối tượng trao đổi vào robot, đó là các đối tượng trao đổi của cặp giao dịch BTC_USDT, LTC_USDT, ETH_USDT.

function Process (e) {
    var ticker = _C(e.GetTicker)
    Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", ticker)
    // ...
    // ..
    // .
}  

function main(){
    while (true) {
        for (var i = 0 ; i < exchanges.length; i++) {
            Process(exchanges[i])
            Sleep(500)
        }
    }
}

Chạy robot:

img

Ví dụ chúng tôi đã mô tả ở trên, cho dù chuyển đổi các cặp giao dịch hoặc thêm một đối tượng giao dịch cho nhiều cặp giao dịch khác nhau của một tài khoản cấu hình.

Vậy làm thế nào để sử dụng nhiều tài khoản giao dịch trong một chiến lược?

Chiến lược sử dụng nhiều tài khoản trao đổi

Một số chiến lược như phòng ngừa rủi ro qua thị trường đa sàn giao dịch, chiến lược nhiều tài khoản trong một sàn giao dịch duy nhất.

  • Cấu hình nhiều trao đổi với các trao đổi khác nhau

img

Ví dụ, chúng tôi đã cấu hình 2 trao đổi trên bảng điều khiển -> trao đổi -> Thêm trang trao đổi.

chúng ta có thể truy cập vào thông tin tài sản của các tài khoản được cấu hình bởi hai sàn giao dịch này trong chiến lược.

img

function main(){
     Log(exchanges[0].GetAccount()) // Print the account asset information of the first exchange object.
     Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}

Tất nhiên, tôi cũng có thể thêm một cấu hình trao đổi tài khoản thứ hai và thứ ba vào một trao đổi.

  • Cấu hình nhiều trao đổi với cùng một trao đổi.

Ví dụ, chúng ta thêm một tài khoản khác cho Huobi Futures.

img

Như bạn có thể thấy, điều này cấu hình các tài khoản của hai sàn giao dịch Huobi Futures.

img

Khi chiến lược được tạo, một đối tượng Huobi Futures Exchange xuất hiện trong tùy chọn Modify Configuration của Robot để lựa chọn.

img

Ví dụ, điều này cho phép hai tài khoản bán trước và sau đó mua với chiến lược lưới điển hình (lên) hoặc mua trước và sau đó bán (dưới).

Thông qua hai ví dụ trên

Dưới đây là sự khác biệt giữa cấu hình nhiều đối tượng trao đổi trên robot và Cấu hình nhiều đối tượng trao đổi cho cùng một tài khoản trao đổi cho robot:

Ví dụ này slamming và trên đã đề cập đến của Tương tự tài khoản trao đổi có nhiều đối tượng trao đổi cho robot là một chút tương tự, nhưng có sự khác biệt.

Sự khác biệt là ví dụ trên là một cấu hình trao đổi, tức là:

img

Khi robot cấu hình đối tượng trao đổi, nó luôn sử dụng:

img

Cấu hình này.

Nó chỉ là khi bạn thêm một đối tượng trao đổi, các thiết lập cặp giao dịch là khác nhau.

Nếu hàm GetAccount được gọi, thông tin tài sản của cùng một tài khoản luôn được truy cập.

tuy nhiên:

img

Hai đối tượng trao đổi tương lai huobi được cấu hình như vậy, mặc dù tất cả đều là tương lai huobi, đại diện cho các tài khoản trao đổi khác nhau.

  • Việc sử dụng cấu hình trao đổi làm cho việc thiết kế chiến lược tương lai tiền điện tử dễ dàng hơn.

Đôi khi trong chiến lược bảo hiểm hợp đồng tiền điện tử, để nắm bắt các cơ hội giao dịch thoáng qua, nhiều kịch bản cần phải được đặt đồng thời. Tuy nhiên, vì hợp đồng khác nhau, bạn cần chuyển sang hợp đồng tương ứng khi bạn nhận được báo giá thị trường và đặt lệnh. Khi sử dụngexchange.Govà thiết kế của hợp đồng chuyển đổi cũng làm cho logic không quá đơn giản. có cách nào tốt hơn không?

Tất nhiên là có, Chúng ta có thể thêm hai đối tượng trao đổi cho robot bằng cách làm theo các Configure nhiều đối tượng trao đổi cho robot trong cùng một tài khoản trao đổi.

img

Sau đó sử dụng cấu hình trao đổi này để thêm một đối tượng trao đổi khác.

Một hộp thông báo sẽ xuất hiện!

img

Một cấu hình tài khoản trao đổi, bạn không thể thêm các đối tượng trao đổi của cùng một loại tiền tệ hoặc cặp giao dịch.

Tôi nên làm gì? Có vẻ như robot chiến lược không thể sử dụng hai đối tượng trao đổi, và đối tượng trao đổi bị ràng buộc với số tài khoản trao đổi?

Vẫn còn một con đường!

Hãy đi đến bảng điều khiển -> trao đổi, và sau đó thêm một cấu hình trao đổi tương lai OKEX.

img

Nhấp vào Save khi được cấu hình.

img

Bằng cách này chúng ta có hai cấu hình trao đổi, nhưng cùng một thông tin cấu hình API KEY được sử dụng.

img

Điều này mang lại lợi ích gì?

khi viết một chiến lược, thiết kế sẽ rất đơn giản!

function main(){
    exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
    exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
    
    while (true) {
        var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
        var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
        var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
        
        var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
        var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
        var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
        
        if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
            var diff = tickerA.Last - tickerB.Last // calculate the difference
            $.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
            if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
                // Hedging
                rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
                rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
                
                var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
                var idB = rB.wait() // ...
            }
            
            // ...
        }
        
        LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
        Sleep(500)
    }

Chiến lược thiết kế này có đơn giản và rõ ràng hơn nhiều không?

Hoạt động thị trường thực tế:

img

Như bạn có thể thấy, chỉ mất khoảng 50 mili giây để nhận được giá của hai hợp đồng mỗi lần.


Có liên quan

Thêm nữa