avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

만든 날짜: 2019-09-02 09:39:59, 업데이트 날짜: 2024-12-17 20:42:42
comments   2
hits   4296

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

디지털 통화 양적 거래 전략을 설계하기 시작할 때, 종종 다양한 전략 요구 사항이 있습니다. 어떤 언어나 플랫폼을 사용하든, 다양한 상황에 대한 전략 설계 요구 사항에 직면하게 될 것입니다. 예를 들어, 때로는 여러 품종을 로테이션해야 할 때도 있고, 때로는 여러 플랫폼을 헤지해야 할 때도 있으며, 때로는 서로 다른 품종을 동시에 거래해야 할 때도 있습니다. 전략적 요구 사항을 구현할 때의 몇 가지 디자인 경험을 공유해 보겠습니다. 학습 플랫폼은 여전히 ​​Inventor Quantitative Trading Platform(https://www.fmz.com)을 사용하고 있으며, 선택된 시장은 디지털 통화 시장입니다.

  • ### “다중 통화” 전략 설계

이러한 유형의 수요는 종종 다양한 종류의 트렌드 전략, 다양한 종류의 그리드 전략 등을 작성해야 하며, 이를 위해서는 다양한 거래 쌍을 사용하여 전략 로직을 반복적으로 실행해야 합니다. 일반적으로 다음과 같이 설계됩니다.

  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)
          }
      }
  }

로봇을 구성합니다: 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

보시다시피, 이를 통해 로봇에서 거래 객체를 구성하고, 거래 쌍을 전환하고, 다양한 거래 쌍의 시장 조건을 얻고, 다양한 시장 조건을 수행하고, 전략 논리에 따라 실행하는 것이 가능해졌습니다. 우리가 정의한 세 가지 거래 쌍인 BTC_USDT, LTC_USDT, ETH_USDT가 루프에서 차례로 반복되어 시장 정보를 얻는 것을 볼 수 있습니다. 시장 정보를 얻은 후, 우리는 구체적으로 시장 정보를 감지하고 설계된 거래 로직을 트리거할 수 있습니다. 전략에 의해서.

일부 학생들은 “저는 거래 쌍을 바꾸는 것을 좋아하지 않습니다. 약간 번거롭고 전략 설계가 명확하지 않습니다.“라고 말할 수 있습니다. 실제로 다른 디자인 방법도 있는데, 이는 아래에서 소개할 또 다른 방법입니다.

  • ### 동일한 거래소 계정으로 로봇에 대한 여러 거래소 객체를 구성합니다.

여러 거래소 객체를 통해 다양한 거래 쌍에 대한 시장 데이터를 얻고 반복적 전략 논리에 따라 실행합니다. 예를 들어, 로봇을 다음과 같이 구성합니다. 로봇에 대한 세 개의 거래소 객체를 구성하고 거래 쌍을 각각 BTC_USDT, LTC_USDT, ETH_USDT로 설정합니다. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

“OKEX Spot V3 Test”라는 이름의 교환 개체는 제어 센터, 교환 구성 페이지에 있습니다. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 이미 구성되었습니다.

이번에 로봇에 여러 개의 거래소 객체를 추가했기 때문에 코드를 수정했습니다. 즉, 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)
          }
      }
  }

로봇을 실행합니다: 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

위에서 설명한 예는 거래 쌍을 전환하거나 구성된 계정에 여러 개의 서로 다른 거래 쌍이 있는 거래소 객체를 추가하는 것에 대한 것입니다. 모두 단 하나의 거래소 계정(구성된 거래소 사용)을 사용하여 구성됩니다. 그렇다면 하나의 전략으로 여러 개의 거래소 계정을 어떻게 활용할까요?

  • ### 여러 거래소 계정을 사용하기 위한 전략

예를 들어, 여러 거래소를 아우르는 교차시장 헤지 전략, 단일 거래소 내의 다중 계좌 전략 등이 특정 전략에 포함됩니다.

  • 여러 개의 거래소가 구성되어 있지만 서로 다른 거래소입니다. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 예를 들어, 제어 센터->거래소->거래소 추가 페이지에서 2개의 거래소를 구성했습니다. 전략에서 이 두 거래소에 구성된 계정의 자산 정보에 접근할 수 있습니다.

    디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

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

    물론, 두 번째, 세 번째 계정의 거래소 구성을 거래소에 추가할 수도 있습니다.

  • 여러 개의 거래소 구성은 동일한 거래소입니다.

    예를 들어, Huobi Futures 계정을 하나 더 추가해 보겠습니다. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

    보시다시피, “Huobi Futures” 거래소의 두 계정이 설정되었습니다.

    디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

    전략을 생성할 때, Huobi Futures Exchange 객체가 로봇의 “구성 수정” 옵션에 선택 가능한 상태로 나타납니다.

    디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

    예를 들어, 두 개의 계정을 가질 수 있는데, 하나는 선매-후매 그리드 전략(상승)을 사용하고, 다른 하나는 선매-후매 그리드 전략(하락)을 사용합니다.

    위의 두 가지 예를 통해

    로봇에 여러 개의 거래소 객체를 구성하는 것과 동일한 거래소 계정으로 로봇에 여러 개의 거래소 객체를 구성하는 것의 차이점은 다음과 같습니다.

    언뜻 보면 이는 위에서 설명한 “동일한 거래소 계좌로 로봇에 대한 여러 거래소 객체 구성”의 예와 다소 유사하지만, 차이점이 있습니다. 차이점은 위의 예가 교환 구성이라는 점입니다. 즉,

    디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

    로봇에서 교환 객체를 구성할 때는 항상 다음을 사용하세요. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 이런 구성.

    거래소 객체를 추가할 때 거래 쌍 설정이 다르다는 점입니다. GetAccount 함수를 호출하면 항상 동일한 계정의 자산 정보에 접근할 수 있습니다.

    하지만: 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 이런 방식으로 구성된 두 개의 Huobi Futures Exchange 객체는 모두 Huobi Futures이지만 서로 다른 거래소 계정을 나타냅니다.

  • 디지털 통화 선물 전략의 설계를 보다 쉽게 ​​만들기 위해 거래소 구성을 잘 활용하세요.

때때로 디지털 통화 계약 헤지 전략을 구현할 때 덧없는 거래 기회를 잡기 위해 여러 시나리오에서 동시 주문이 필요합니다. 하지만 계약이 다르기 때문에 시장 정보를 얻고 주문을 할 때 해당 계약으로 전환해야 합니다. exchange.Go 함수를 사용하여 동시에 여러 주문 함수를 실행하거나 시장 정보를 얻는 경우 동기화 문제로 인해 속도가 그다지 빠르지 않습니다. 그리고 계약 전환의 설계는 그 논리가 그렇게 단순하지 않게 보이게 만듭니다. 그렇다면 더 나은 방법은 없을까?

물론 방법이 있죠! 위의 “동일한 거래소 계정으로 로봇에 대한 여러 거래소 객체 구성” 설명에 따라 로봇에 두 개의 거래소 객체를 추가할 수 있습니다. 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 그런 다음 이 교환 구성을 사용하여 다른 교환 개체를 추가합니다. 이때 프롬프트 상자가 나타납니다! 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명 거래소 계정 구성에서는 동일한 통화 및 거래 쌍을 가진 거래소 개체를 추가할 수 없습니다.

이런 경우에는 어떻게 해야 하나요? 전략 로봇이 두 개의 거래소 객체를 사용하고 해당 거래소 객체를 하나의 거래소 계정 코드에 연결하는 것은 불가능한 것 같습니다. 아직 방법이 있어요!

“제어 센터” -> “거래소”로 가서 OKEX 선물 거래소 구성을 추가합니다.

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

구성 후 저장을 클릭하세요.

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

### 「하이라이트」이제 두 개의 거래소 구성이 있지만 동일한 API KEY 구성 정보가 사용됩니다.

디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

이것의 이점은 무엇입니까? 물론, 전략을 작성할 때 설계는 매우 간단하죠!

  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)
      }
  }

이 디자인 전략이 훨씬 더 간단하고 아이디어가 훨씬 더 명확하게 느껴지시나요?

실제 디스크 작업: 디지털화폐 양적거래전략 거래소 구성에 대한 자세한 설명

동시에 두 계약의 시장 정보를 얻는 데 걸리는 시간은 약 50밀리초에 불과한 것을 알 수 있습니다.