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

Các chiến lược giao dịch định lượng tiền kỹ thuật số

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2019-09-02 09:39:59, Cập nhật: 2023-10-19 21:07:41

img

Các chiến lược giao dịch định lượng tiền kỹ thuật số

Khi bắt đầu thiết kế chiến lược giao dịch định lượng tiền kỹ thuật số, thường có nhiều nhu cầu chiến lược khác nhau, và bất kể ngôn ngữ và nền tảng nào, bạn sẽ gặp phải nhiều nhu cầu thiết kế chiến lược khác nhau. Ví dụ: đôi khi cần nhiều loại xoay, đôi khi cần nhiều nền tảng đầu cơ, đôi khi cần nhiều loại giao dịch đồng thời, v.v. Các nền tảng học tập vẫn sử dụng nền tảng giao dịch định lượng của nhà phát minh.https://www.fmz.com), thị trường chọn thị trường tiền kỹ thuật số.

  • Chiến lược "nhiều đồng tiền"

    Các tình huống nhu cầu như vậy thường đòi hỏi phải viết một chiến lược xu hướng đa dạng, chiến lược lưới đa dạng, v.v., cần phải thực hiện theo logic chiến lược và lặp lại thị trường bằng các giao dịch khác nhau. Thông thường thiết kế như thế này:

    function Process (symbol) {
        exchange.IO("currency", symbol)
        var ticker = _C(exchange.GetTicker)
        Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", 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 tôi đã cấu hình cho robot:img

    img

    Như bạn có thể thấy, điều này thực hiện việc cấu hình một đối tượng giao dịch trên robot, chuyển đổi các cặp giao dịch, lấy các cặp giao dịch khác nhau, thực hiện nhiều loại giao dịch, được thực hiện theo một logic chiến lược. Bạn có thể thấy, ba cặp giao dịch mà chúng tôi xác định: BTC_USDT, LTC_USDT, ETH_USDT, lặp đi lặp lại trong chu kỳ mua thị trường, sau khi mua thị trường, bạn có thể xác định cụ thể cho việc phát hiện thị trường, kích hoạt chiến lược thiết kế hợp lý giao dịch tốt.

    Một số học sinh có thể nói: Tôi không thích chuyển đổi cặp giao dịch, cảm thấy hơi khó khăn, chiến lược không được thiết kế rõ ràng. Có một cách thiết kế khác, một cách khác mà chúng tôi sẽ giới thiệu dưới đây.

  • Một tài khoản giao dịch được cấu hình cho robot nhiều đối tượng giao dịch

    Nhập dữ liệu thị trường cho các cặp giao dịch khác nhau thông qua nhiều đối tượng giao dịch và thực hiện trong logic chiến lược lặp đi lặp lại. Ví dụ: cấu hình robot như thế này: cấu hình cho robot ba đối tượng giao dịch, cặp giao dịch được thiết lập là BTC_USDT, LTC_USDT, ETH_USDT.img

    Tên là đối tượng giao dịch của "OKEX hiện tại V3 thử nghiệm", trong Control Center, trang cấu hình giao dịch:imgCác bạn có thể tham gia vào chương trình này.

    Hãy thay đổi mã bởi vì lần này chúng tôi đã thêm nhiều đối tượng giao dịch cho robot, các đối tượng giao dịch BTC_USDT, LTC_USDT, ETH_USDT.

    function Process (e) {
        var ticker = _C(e.GetTicker)
        Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
        // ...
        // ..
        // .
    }  
    
    function main(){
        while (true) {
            for (var i = 0 ; i < exchanges.length; i++) {
                Process(exchanges[i])
                Sleep(500)
            }
        }
    }
    

    Người máy chạy:img

    Các ví dụ trên có thể là chuyển đổi cặp giao dịch hoặc thêm một đối tượng giao dịch với nhiều cặp giao dịch khác nhau cho một tài khoản cấu hình. Nếu bạn chỉ sử dụng một giao dịch để cấu hình tài khoản, thì làm thế nào để sử dụng nhiều tài khoản trong một chiến lược?

  • Chiến lược sử dụng nhiều tài khoản giao dịch

    Một số chiến lược, ví dụ như, đa sàn giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch.

    • Nhiều sàn giao dịch được cấu hình nhưng là các sàn giao dịch khác nhau.imgVí dụ, tôi đã cấu hình 2 sàn giao dịch trên Control Center - > Exchange - > Add Exchange. Trong chiến lược này, tôi có thể truy cập thông tin tài sản của các tài khoản được cấu hình trên cả hai sàn giao dịch.

      img

      function main(){
          Log(exchanges[0].GetAccount())    // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
          Log(exchanges[1].GetAccount())    // ... 打印Bit-Z这个交易所的资产信息
      }
      

      Tất nhiên, tôi cũng có thể, thêm một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch, một giao dịch.

    • Một số sàn giao dịch được cấu hình như là cùng một sàn giao dịch.

      Ví dụ, chúng ta thêm một tài khoản tương lai token.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 "token futures".

      img

      Khi tạo ra chính sách, một đối tượng giao dịch tương lai của token sẽ xuất hiện trong tùy chọn "Chai đổi cấu hình" của robot để lựa chọn.

      img

      Ví dụ, có thể cho phép hai tài khoản sử dụng một chiến lược mua trước bán sau lưới (lên) và một chiến lược mua trước bán sau lưới (dưới).

      Và chúng ta có thể làm điều đó bằng cách sử dụng hai ví dụ trên.

      Đây là sự khác biệt giữa việc cấu hình nhiều đối tượng giao dịch trên robot và "một tài khoản giao dịch cho robot cấu hình nhiều đối tượng giao dịch":

      Ví dụ này rất giống với ví dụ "một tài khoản giao dịch tương tự được cấu hình cho robot nhiều đối tượng giao dịch" ở trên, nhưng có một sự khác biệt. Sự khác biệt là ví dụ trên là một cấu hình giao dịch, đó là:

      img

      Trong khi đó, các đối tượng được sử dụng để cấu hình các sàn giao dịch robot là:imgĐây là cấu hình.

      Chỉ cần thêm đối tượng giao dịch, giao dịch sẽ khác với thiết lập. Nếu gọi chức năng GetAccount, tất cả thông tin tài sản của cùng một tài khoản sẽ luôn được truy cập.

      Tuy nhiên:imgHai đối tượng giao dịch tương lai token được cấu hình theo cách này, mặc dù cả hai là giao dịch tương lai token, nhưng đại diện cho các tài khoản giao dịch khác nhau.

  • Các giao dịch tương lai tiền kỹ thuật số được thiết kế đơn giản hơn.

    Đôi khi trong chiến lược đầu cơ hợp đồng tiền kỹ thuật số, nhiều tình huống cần phải đồng thời phát lệnh để nắm bắt cơ hội giao dịch nhanh chóng. Nhưng bởi vì hợp đồng khác nhau, cần phải chuyển sang hợp đồng tương ứng khi lấy thị trường, chuyển lệnh khi vận hành. Khi sử dụng chức năng exchange.Go, đồng thời thực hiện chức năng đơn hoặc lấy thị trường, không phải là nhanh vì có vấn đề đồng bộ. Và thiết kế hợp đồng chuyển đổi như vậy cũng không có logic đơn giản như vậy. Có cách nào tốt hơn không?

    Chúng ta có thể thêm hai đối tượng giao dịch cho robot theo cách nói ở trên: "Một tài khoản giao dịch tương tự được cấu hình cho robot nhiều đối tượng giao dịch".imgSau đó sử dụng cấu hình trao đổi này để thêm một đối tượng trao đổi. Một hộp gợi ý sẽ xuất hiện.imgMột tài khoản giao dịch được cấu hình, không thể thêm cùng một loại tiền tệ, đối tượng giao dịch.

    Làm thế nào để làm điều này? Có vẻ như bạn không thể để cho robot chiến lược sử dụng hai đối tượng giao dịch và để cho đối tượng giao dịch được gắn vào một mã tài khoản giao dịch? Có một cách nào đó!

    Chúng tôi đã thêm một cấu hình giao dịch tương lai OKEX vào Control Center - "Exchange".

    img

    Nhấp vào Save sau khi cấu hình xong.

    img

    Như vậy, chúng ta có hai cấu hình giao dịch, nhưng sử dụng cùng một thông tin cấu hình API KEY.

    img

    Điều này mang lại lợi ích gì? Tất nhiên, khi viết chiến lược, thiết kế rất đơn giản!

    function main(){
        exchanges[0].SetContractType("quarter")        // 设置第一个添加的交易所对象 当前的合约为季度合约
        exchanges[1].SetContractType("this_week")      // 设置第二个添加的交易所对象,当前的合约为当周合约
        
        while (true) {
            var beginTime = new Date().getTime()       // 记录这次获取行情时起始的时间戳。
            var rA = exchanges[0].Go("GetTicker")      // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
            var rB = exchanges[1].Go("GetTicker")      // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。
            
            var tickerA = rA.wait()                    // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
            var tickerB = rB.wait()                    // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
            var endTime = new Date().getTime()         // 记录并发获取两个合约行情结束时的时间戳。
            
            if (tickerA && tickerB) {                  // 如果获取的数据没有问题,执行以下逻辑。
                var diff = tickerA.Last - tickerB.Last // 计算差价
                $.PlotLine("diff", diff)               // 使用画线类库把差价画在图表上。
                if (diff > 500) {                      // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
                    // 对冲
                    rA = exchanges[0].Go("Sell", tickerA.Buy, 1)     // 并发线程创建 季度合约下卖单
                    rB = exchanges[1].Go("Buy", tickerB.Sell, 1)     // 并发线程创建 当周合约下买单
                    
                    var idA = rA.wait()           // 等待 返回下单结果,返回的是订单ID
                    var idB = rB.wait()           // ...
                }
                
                // ...
            }
            
            LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。")    // 显示在状态栏上时间,以便知道程序在执行。
            Sleep(500)
        }
    }
    

    Những chiến lược thiết kế như vậy có cảm thấy đơn giản hơn nhiều, và ý tưởng rõ ràng hơn nhiều không?

    Khả năng hoạt động:img

    Bạn có thể thấy rằng mỗi lần mua hai hợp đồng đồng đều chỉ mất khoảng 50 millisecond.


Có liên quan

Thêm nữa

Khả năng định lượngCách cuối cùng là rất tốt.

bwxiaokThật tuyệt vời, điều này rất hữu ích!