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

암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

만든 날짜: 2021-04-19 14:16:21, 업데이트 날짜: 2024-12-04 21:21:43
comments   0
hits   4006

암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

이전 기사에서는 프로그래밍 방식 거래 스크립트에 관해 이야기했습니다. 사실, 트레이딩 전략은 트레이딩 스크립트 프로그램입니다. 이 기사에서는 주로 트레이딩 스크립트 프로그램을 위한 하드웨어 캐리어(프로그램이 실행되는 곳)의 필요성, 이 스크립트 트레이딩 프로그램을 작성하는 데 사용할 수 있는 컴퓨터 프로그래밍 언어(리스트)에 대해 설명합니다. Inventor 양적 거래 플랫폼의 사용에는 세 가지 프로그래밍 언어가 있으며, 물론 어떤 프로그래밍 언어든 사용하여 프로그래밍 거래 전략을 구현할 수 있습니다. 이 글에서는 암호화폐 업계의 양적 분석에 대해 계속해서 논의하고, 암호화폐 업계의 양적 분석에 대한 지식을 알아보겠습니다.

프로그래밍 방식의 거래 스크립트

  • 거래 전략의 종류 프로그래밍 거래 및 양적 거래에 익숙하지 않은 초보자는 추세 전략, 차익 거래 전략, 고빈도 전략, 그리드 전략 등과 같은 다양한 용어에 혼란을 느낄 수 있습니다. 사실, 프로그래밍 거래 및 양적 거래의 일반적인 전략 유형은 다음과 같습니다. 설명은 다음과 같습니다: 여러 방향.

    • 아비트라지 헤지 전략 간단히 말해서, 기본적으로 한 쪽에는 롱 포지션을, 다른 쪽에는 숏 포지션을 취하는 전략은 차익거래 전략으로 분류될 수 있습니다. 여기에는 교차 현물 시장, 교차 선물 기간, 현물-선물 차익거래, 교차 상품 차익거래 등 여러 가지 특정 유형이 있습니다.
    • 트렌드 전략 간단히 말해, 추세를 따라 주문을 내고 포지션을 유지하는 전략으로, 이중 이동 평균선, MACD 및 기타 전략이 있습니다.
    • 회귀 전략 예를 들어, 그리드 전략은 변동성이 큰 시장에서 가격 변동을 통해 수익을 낼 수 있습니다.
    • 고주파 전략 간단히 말하자면, 알고리즘을 통해 시장의 미시 구조, 규칙, 기회 등을 발견하는 고빈도 거래 전략입니다.

위의 내용은 거래 전략의 관점에서 구분됩니다. Inventor Quantitative Trading Platform의 전략 설계 관점에서 전략은 다음과 같이 구분할 수도 있습니다.

  • 단일 제품 전략 즉, 이 전략은 BTC 거래나 ETH 거래와 같은 한 가지 상품만 운영합니다.

  • 다양한 제품 전략 간단히 말해서, 전략적 논리에 따라 다양한 종류를 운영하는 것입니다.

  • 다중 계정 전략 간단히 말해서, 실제 디스크에 여러 개의 교환 객체를 구성하는 것입니다(교환의 개념은 이전 문서에서 소개되었으며, API 키가 구성된 교환 객체는 교환 계정을 나타냅니다). 예를 들어, 일부 복사 거래 전략은 거래 후 여러 계정을 포함합니다(동일한 거래소 또는 다른 거래소일 수 있음). 간단히 말해, 여러 거래소 객체(계정)가 하나의 실제 계정에서 관리됩니다.

  • 다양한 논리 전략 예를 들어 실제 시장에서 MACD 전략, 이동평균 전략, 그리드 전략 등은 동시에 설계됩니다. (물론 서로 다른 거래소 객체에서 작동합니다. 동일한 거래소 객체를 작동시키는 경우, 특정 전략에는 논리적 갈등이 있습니다)

  • 교환 API 프로그래밍된 거래 스크립트는 거래소 계좌를 어떻게 운영하나요? 답은 거래소가 공개한 API 인터페이스를 통해서입니다. 그렇다면 거래소에는 어떤 유형의 인터페이스가 열려 있을까요? 이전 글에서는 “Exchange” 섹션에 대해서 이야기했는데, 여기서 Exchange는 일반적으로 REST와 Websocket 인터페이스를 가지고 있다고 설명했습니다. 여기서 우리는 전략적 프로그램 수준의 몇 가지 개념을 추가합니다. 교환 인터페이스는 검증 여부(REST와 웹소켓 모두)에 따라 검증됨과 검증되지 않음의 두 가지 유형으로 나뉩니다.

    • 인증이 필요하지 않은 인터페이스 일반적으로 “공개 인터페이스”라고 불리는 이 유형의 인터페이스는 검증이 필요하지 않습니다.API KEY(API 키가 무엇인지 기억나지 않는다면 이전 문서를 참고하시기 바랍니다.) 이러한 유형의 인터페이스는 일반적으로 심층적인 시장 정보 쿼리, K-라인 데이터 쿼리, 자금 조달 비율 쿼리, 거래 상품 관련 정보 쿼리, 거래소 서버 타임스탬프 쿼리 등과 같은 시장 인터페이스입니다. 간단히 말해서, 귀하의 계정과 아무런 관련이 없는 인터페이스는 대략적으로 공개 인터페이스로 판별될 수 있습니다(확인 필요 없음)
      Inventor 양적 거래 플랫폼에서 검증되지 않은 API 함수(거래소의 검증되지 않은 인터페이스, 공개 인터페이스를 캡슐화)를 호출할 때, API KEY가 잘못 구성된 경우에도 인터페이스에서 반환된 데이터를 정상적으로 얻을 수 있습니다. (검증되지 않았기 때문에)

    • 검증이 필요한 인터페이스 간단히 말해서, 검증(API KEY로 검증)이 필요한 인터페이스입니다. 이런 유형의 인터페이스를 프라이빗 인터페이스라고 합니다. 이러한 유형의 인터페이스는 일반적으로 계정 자산 조회, 계정 포지션 조회, 보류 주문 조회, 이체 조회, 코인 이체, 레버리지 조정, 포지션 모드 설정 등 계정의 일부 작업이나 정보와 관련이 있습니다. 이러한 작업은 검증되어야 합니다. Inventor Quantitative Trading Platform에서 검증이 필요한 API 함수(캡슐화된 거래소가 검증해야 하는 인터페이스, 즉 개인 인터페이스)를 호출할 때 API KEY가 잘못 구성된 경우 인터페이스를 호출할 때 오류가 보고되고 null 값이 반환됩니다.

그렇다면 Inventor Quantitative Trading Platform에서는 이러한 인터페이스를 어떻게 사용할까요?

Inventor Quantitative Trading Platform은 거래 행동을 캡슐화하고 일관된 인터페이스(예: K-line 인터페이스, deep market 인터페이스, query current asset 인터페이스, order 인터페이스, order withdrawal 인터페이스 등)를 정의합니다. 이러한 인터페이스는 API 함수라고 합니다. Inventor 양적 거래 플랫폼은 API 문서(https://www.fmz.com/api)를 쿼리하면 볼 수 있습니다.

그렇다면 Inventor Quantitative Trading Platform에서 일관되지 않은 동작과 정의를 가진 일부 거래소 인터페이스를 어떻게 사용해야 할까요?

이러한 교환 인터페이스에는 자산 이전, 조건부 위탁, 일괄 주문 발주, 일괄 주문 취소, 주문 수정 등이 포함됩니다. 일부 거래소에는 이러한 인터페이스가 있고 다른 거래소에는 없습니다. 해당 기능과 사용 세부 정보는 크게 다를 수 있습니다. 따라서 이러한 인터페이스는 Inventor Quantitative Trading Platform에서 사용할 수 있습니다.exchange.IO이 기능은 (자세한 내용은 Inventor Quantitative Trading Platform API 문서(https://www.fmz.com/api#exchange.io…)를 참조하세요)에 접근하는 데 사용됩니다. Inventor Quantitative Trading Platform Strategy Square에는 몇 가지 실용적인 IO 예시 전략도 있습니다.

Inventor Quantitative Trading Platform API 문서의 모든 API 함수가 네트워크 요청을 생성합니까?

먼저 거래소 API 인터페이스에 액세스 빈도 제한이 있다고 가정해 보겠습니다(예: 초당 5회). 액세스 빈도가 너무 높으면 안 됩니다. 그렇지 않으면 http 429 오류를 보고하고 액세스를 거부합니다(대부분 거래소는 429 오류를 보고합니다). ). 동일한 제한은 Inventor Quantitative Trading Platform에서 패키지된 교환 인터페이스를 호출하는 데에도 적용됩니다. 네트워크 요청을 생성하지 않는 Inventor Quantitative Trading Platform의 API 함수에는 이러한 제한이 없습니다. Inventor Quantitative Trading Platform의 모든 API 함수가 네트워크 요청을 생성하는 것은 아닙니다. 일부 Inventor API 함수는 현재 거래 쌍 설정, 계약 코드 설정, 지표 계산 함수, 거래소 객체 이름 가져오기와 같은 일부 로컬 설정만 수정합니다. 등. 기본적으로 네트워크 요청이 발생하는지 여부는 함수의 목적에 따라 판단할 수 있습니다. 거래소 데이터를 얻거나 거래소 계정을 조작하는 등의 목적이라면 네트워크 요청이 생성됩니다. 이러한 인터페이스는 다음에 주의를 기울여야 합니다. 호출 주파수.

  • Inventor 양적 거래 플랫폼에서 API 함수를 사용할 때 흔히 발생하는 문제와 경험에 대해 알아보겠습니다.

    • 결함 허용성 이것은 가장 흔한 오류로, 수많은 초보자를 괴롭힙니다. 종종 전략 백테스트는 정상이지만, 실제 시장은 잠시 실행한 후(언제든지 트리거될 수 있음) 왜 폭락할까요?

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

    전략을 작성할 때는 인터페이스에서 반환된 데이터를 판단하고 검증해야 합니다. 예를 들어, 이 코드 줄은 Inventor Quantitative Trading Platform에서 시장 정보를 얻는 데 사용됩니다(거래소에 직접 액세스하는 프로그램을 작성할 때도 마찬가지입니다). 인터페이스):var ticker = exchange.GetTicker()이것을 사용해야 하는 경우ticker변수(GetTicker 함수에서 반환된 구조 참조)Last(최신 가격) 데이터를 사용해야 합니다.var newPrice = ticker.Last이런 식으로 데이터를 얻으세요.(newPrice는 뭐죠? new: latest, Price: price, 맞아요! 합쳐보세요!) 이때,GetTicker()해당 함수가 정상적인 데이터를 반환하는 경우에는 문제가 없지만, 요청이 타임아웃되거나, 네트워크 오류가 발생하거나, 교환기가 네트워크 케이블을 뽑거나, 케이블이 끊어지거나, 장난꾸러기 아이가 전원 스위치를 잡아당기는 등의 경우에는 문제가 발생합니다.GetTicker()함수 반환null. 이 시간에ticker의 값은null다시 방문하겠습니다.Last프로그램 예외가 발생하여 정책 프로그램이 중지됩니다. 인터페이스 호출 실패(GetTicker 호출이 실패하고 null을 반환)가 전략 실제 거래 중지의 직접적인 원인이 아닌 것 같습니다. 직접적인 원인은null변수 속성), 인터페이스 호출 실패 및 오류로 인해 실제 거래가 중단되지는 않습니다(강조 추가). 그러면 실제 거래가 비정상적으로 중단되는 것을 피하기 위해서는 어떻게 해야 할까요? 답은 인터페이스에서 반환된 데이터에 대해 내결함성 처리를 수행하는 것입니다. 반환된 데이터가null(예로는 JavaScript를 사용하였고, 다른 언어도 기본적으로 동일합니다) 작은 코드 조각을 작성하여 설명하세요(이것은 단지 설명일 뿐이며, 직접 실행하면 작동하지 않습니다!)

      var ticker = exchange.GetTicker()
      if (ticker) {
          var newPrice = ticker.Last
          Log("打印最新价格:", newPrice)
      } else {
          // 数据为null,不做操作就不会出问题
      }
    

    비단GetTicker인터페이스는 내결함성이 있어야 합니다. 네트워크 요청이 있는 모든 인터페이스는 반환 값에 대해 내결함성이 있어야 합니다(함수의 반환 값을 사용하는 경우) 결함을 허용하는 방법은 다양하며 다음을 사용할 수 있습니다._C()함수(FMZ API 문서 참조), 자체적인 내결함성 함수를 작성하고, 자체적인 내결함성 메커니즘과 논리를 설계하세요. ~에 대한_C()함수를 사용할 때, 많은 신입생은 함수를 잘못 사용할 가능성이 높습니다._C()함수 매개변수는 함수 호출이 아닌 함수 참조입니다. 간단히 말해서: _C(funcName, param1, param2), 호출은 정확하고, funcName에 괄호가 없으며, param1과 param2는 funcName 함수에 전달될 매개변수입니다. _C(funcName(param1, param2)), 호출 오류, 일반적으로 FMZ API 문서를 주의 깊게 읽지 않는 초보자는 이렇게 작성합니다.

    • 현물시장 매수주문의 주문수량 현물 시장 매수 주문의 주문 수량은 많은 신규 거래자들에 의해 종종 오해받습니다. 이전 기사에서 우리는 현물 시장 매수 주문의 주문 수량이 일반적으로 금액이라고 언급했습니다(일부 거래소는 일반적으로 다른 설정을 가질 수 있음). FMZ, 이러한 특수 교환 설정은 FMZ API 설명서에 설명되어 있습니다.) 예를 들어, 테스트를 위해 OKEX V5 시뮬레이션 디스크를 사용했습니다. 거래 쌍 설정은 다음과 같습니다.LTC_USDT
      function main() {
          exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
          exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
      }
    

    거래소는 일반적으로 주문 금액 한도를 두고 있으므로, 한도보다 적은 주문은 제출되지 않습니다(예를 들어, 바이낸스 현물 거래소에서는 각 주문이 5 USDT보다 커야 성공적으로 제출됩니다). 따라서 이와 같은 주문을 하면 오류가 발생합니다.

      错误	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
    
    • 선물주문 시 주의사항 선물 전략을 개발할 때 초보자는 종종 주문 방향에서 실수를 하며, 이는 문제로 이어진다. Inventor Quantitative Trading Platform의 쓰기 전략을 예로 들어보자. 먼저 API 문서의 설명을 살펴보겠습니다. https://www.fmz.com/api#exchange.setdirection...

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

    주문 기능에는 다음이 있습니다.Buy,Sell. 그러나 선물(물론 현물에는 문제가 없고 현물은 매수와 매도만 있음)에는 롱 오픈, 롱 클로징, 숏 오픈, 숏 클로징과 같은 방향이 있습니다. 분명히 매수/매도는 그렇게 많은 방향의 작업을 나타낼 수 없습니다. . 이때 선물거래방향의 설정을 도입할 필요가 있다. 이 기능은exchange.SetDirection()。 FMZ에서 exchange.SetDirection("buy")(먼저 방향을 정하고)exchange.Buy두 단어가 함께 사용될 경우, 해당 주문은 롱 포지션을 개시하는 주문이라는 것을 의미합니다. 등: exchange.SetDirection("sell")그리고exchange.Sell두 단어가 함께 사용될 경우, 해당 주문은 숏 포지션을 개시하기 위한 주문이라는 것을 의미합니다. exchange.SetDirection("closebuy")그리고exchange.Sell두 단어가 함께 사용될 경우, 해당 주문은 롱 포지션을 청산하기 위한 주문이라는 것을 의미합니다. exchange.SetDirection("closesell")그리고exchange.Buy두 단어가 함께 사용될 경우, 해당 주문은 단기 포지션을 청산하기 위한 주문이라는 것을 의미합니다. 일반적으로 초보자는exchange.SetDirection("sell")그리고exchange.Buy다른 단어와 결합하여 사용되거나, 기타 잘못된 조합으로 사용되었습니다. 그런 다음 오류가 보고되었습니다(백테스팅에서 오류가 보고되지 않을 수도 있지만, 이는 분명히 논리적 오류이며 강박증이 있는 사람은 이를 용납할 수 없습니다…). 초보자가 저지르는 또 다른 일반적인 실수

      function main() {
          exchange.SetContractType("quarter")   // 设置当前合约为季度合约
          exchange.SetDirection("sell")
          var id = exchange.Sell(-1, 1)    
          Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
          exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
          exchange.Sell(-1, 1)
      }
    

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)
    이를 보고, “왜 포지션을 가지고 closebuy와 sell을 함께 사용하는데, 오류가 발생하고 포지션을 닫을 수 없는 걸까?“라고 의문을 가질 수 있습니다. 나는 이렇게 대답할 것이다: “나는 잘못된 방향으로 마감했어! 나는 롱 포지션을 마감했어.” 위 오류에 대한 또 다른 가능한 상황은 다음과 같습니다. 마감 방향이 올바르게 설정되었고, 주문 함수가 올바르게 사용되었으며, 포지션이 이 방향으로 유지되었지만 이 오류가 계속 보고되었습니다. 그 이유는 귀하의 프로그램이 여러 주문을 냈지만, 초기 주문이 실행되지 않았고, 마감 주문이 실행을 기다리며 시장에 걸려 있었기 때문입니다. 이때 프로그램은 계속해서 포지션을 마감하고, 종가 포지션을 초과하는 오류.

    • 로그 출력 및 거래 정보 표시 프로그램된 양적 거래 전략을 설계하고 작성하는 일은 ‘데이터 표시’나 ‘작업 로그 출력’과 같은 인간-컴퓨터 상호작용의 설계와 분리될 수 없습니다. 실시간 스크립트와 전략 프로그램은 일반적으로 기본 프로그래밍 언어로 작성됩니다. 현재 언어의 출력 함수를 직접 사용합니다. 예를 들어: 파이썬print。 자바스크립트console.log。 골랑fmt.Println()。 씨++cout

    FMZ 플랫폼에 표시되는 정보에 대해 이야기해 보겠습니다. Inventor Quantitative Trading Platform에는 정보가 표시되는 두 가지 주요 위치가 있습니다.

     - 상태 표시줄
    실제 디스크가 실행되면 실제 디스크 페이지는 그림과 같습니다.
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/16bafc3d4df6dfa18102.png)
    
    
    디스플레이 부분은 상태 표시줄 정보입니다. 상태 표시줄은 주로 일부 실시간 변경 데이터를 표시하는 데 사용됩니다(실시간 변경 사항은 실시간으로 관찰해야 하며 매번 로그로 인쇄할 수 없기 때문에 이런 종류의 상태 표시줄에 데이터가 표시될 수 있습니다. 각각이 인쇄되면 로그에는 반복되고 의미 없는 데이터가 많이 포함되어 쿼리에 영향을 미칩니다.
    상태 표시줄에 데이터 사용량 표시`LogStatus`기능에 대한 자세한 내용은 FMZ의 API 문서를 참조하세요.
    
     - 로그 컬럼
    또한 실제 시장 페이지에서는 그림에서와 같이:
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/16cf9d61e66384022a76.png)
    
    
    디스플레이 부분은 로그 막대로, 주로 특정 순간의 특정 데이터를 영구적으로 기록하거나, 특정 시간의 전략의 특정 작업을 기록하는 데 사용됩니다.
    통나무에는 여러 유형이 있습니다.
    1. 일반 로그: FMZ 전략은 로그 기능을 사용하여 전략 로그에 출력하고 인쇄합니다.
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/16ddc72e1f7d07dcfa5a.png)
    
    
    2. FMZ 전략에 사용되는 주문 로그`exchange.Sell`/`exchange.Buy`이는 자동으로 로그 출력에 기록됩니다.
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/172aac2089e93865e3c2.png)
    
    
    3. FMZ 전략에 사용되는 주문 취소 로그`exchange.CancelOrder`, 주문 취소 로그가 자동으로 로그에 출력됩니다.
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/15e90c7be742743c7421.png)
    
    
    4. 오류 로그. FMZ 전략이 실행 중일 때 네트워크 요청에 대한 인터페이스에서 호출 오류가 발생하거나 예외가 throw되면(예: throw와 같은 명령문) 오류 로그가 자동으로 로그에 출력됩니다.
    
    
    ![암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)](/upload/asset/166196451439434a800f.png)
    

    Log(…), exchange.Buy(Price, Amount), exchange.CancelOrder(Id) 등과 같이 로그 출력을 생성할 수 있는 FMZ API 함수는 필수 매개변수 뒤에 추가 출력 매개변수가 올 수 있습니다. 예: 교환. CancelOrder(주문)[j].Id, orders[j]) 이것은 주문 취소입니다[j] 본 주문을 진행하시면 주문정보가 출력됩니다.

      function main() {
          Log("数据1", "数据2", "数据3", "...")
          var data2 = 200
          var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
          exchange.CancelOrder(id, "附带数据1", data2, "...")
          LogProfit(100, "附带数据1", data2, "...")
      }
    
    • 지표 기능의 사용 지표 기능에 대해 이야기하기 전에 먼저 지표가 무엇인지 이해해 보겠습니다. 간단히 말해서, 이동 평균선, MACD, ATR과 같은 선입니다. 질문: 이러한 지표는 어디서 나오나요? 답: 물론 계산된 것입니다. 질문: 계산의 근거는 무엇인가요? 답변: K-라인 데이터를 기준으로 계산되었습니다. 질문: 예를 들어줄 수 있나요? 답변: 가장 간단한 지표인 이동 평균 지표를 예로 들어, 지표 계산을 위한 데이터 소스로 일간 K-라인(양수 또는 음수 선이 하루를 나타냄) 데이터를 사용합니다. 이동 평균 지표 매개변수가 10인 경우, 계산된 이동 평균 지표는 10일 이동 평균입니다. 질문: K-라인 BAR의 개수가 10개 미만일 경우 이동평균 지표를 계산할 수 있나요? 답변: 이동 평균 지표를 계산할 수 없을 뿐만 아니라, K-라인 데이터 BAR의 수가 지표 주기 매개변수를 충족하지 않을 경우 어떤 지표도 유효한 지표 값을 계산할 수 없습니다. 계산된 배열의 해당 위치는 빈 값으로 채워집니다. 예를 들어 값JavaScript계산된 지표 데이터를 인쇄할 때 언어 전략이 표시됩니다.null

    Strategy Square에는 교육 사례가 있습니다: https://www.fmz.com/strategy/125770 이 튜토리얼 예제 전략을 백테스팅하면 백테스팅 시스템에서 생성된 차트와 10기간 이동 평균을 볼 수 있습니다.

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

    전략 사용자 정의 드로잉, 그려진 K-라인 및 이동 평균 차트:

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)

    질문: 10시간 이동평균을 원하면 어떻게 해야 하나요? 답변: K-라인 데이터는 매 시간별 K-라인 데이터를 사용할 수 있습니다.

    평범한 사람의 말로 표현하자면 우리가 보는 K-라인은 우리가 그것을 디지털화한 후의 배열입니다(배열의 개념을 이해하지 못한다면 Baidu에서 검색할 수 있습니다). 각 요소는 K-라인 열로 배열되어 있습니다. 순서대로. 첫 번째 요소는 현재 시간에서 가장 멀고, 배열의 마지막 요소는 현재 시간에 가장 가깝습니다. 일반적으로 K-라인 데이터의 마지막 막대는 현재 기간을 나타내는 막대입니다. 이 막대는 실시간으로 변경되며 아직 완료되지 않았습니다(거래소 페이지에 로그인하여 K-라인을 확인하면 변경 사항을 확인할 수 있습니다). 계산된 지표는 또한 K-라인 열과 일대일로 대응합니다. 위의 예에서 하나의 지표 값이 하나의 K-라인 열에 대응한다는 것을 알 수 있습니다. 마지막 K-라인 열은 실시간으로 변경되며, 계산된 지표도 K-라인 열의 변경에 따라 변경됩니다.

    Inventor Quantitative Trading Platform에서는 TA 라이브러리(FMZ 플랫폼에서 구현된 라이브러리로, 관리자에 통합되어 있으며 다양한 언어로 직접 사용 가능) 또는 talib 라이브러리(talib는 잘 확립된 지표 라이브러리입니다.)를 사용할 수 있습니다. JS 및 C++와 통합되어 있으며, Python은 직접 작성해야 함) 설치). 예를 들어, 위의 예에서 이동 평균은 다음과 같이 계산됩니다. TA 라이브러리 사용:

      function main() {
          var records = exchange.GetRecords()
          var ma = TA.MA(records, 10)
          Log(ma)       // 打印均线
      }
    

    talib 라이브러리 사용:

      function main() {
          var records = exchange.GetRecords()
          var ma = talib.MA(records, 10)
          Log(ma)       // 打印均线
      }      
    

    계산된 지표 데이터 ma는 각 요소가 K-라인 배열(레코드)에 해당하는 배열입니다. 즉,ma[ma.length -1]대응하다records[records.length - 1], 등등.

    다른 복잡한 지표에도 동일하게 적용됩니다. MACD와 같은 지표에 주의를 기울여야 합니다.

      var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
    

    이때, 변수 macd는 2차원 배열입니다(개념이 이해가 안 되면 Baidu에서 검색하면 됩니다). 간단히 말해서, 2차원 배열은 배열이고 그 각 요소도 배열입니다. . 질문: MACD 지표 데이터가 2차원 배열인 이유는 무엇입니까? 답변: MACD 지표는 두 개의 선(DIF 선과 DEA 선)과 일련의 볼륨 막대(MACD 볼륨 막대, 실제로 이 볼륨 막대 데이터도 선으로 간주될 수 있음)로 구성되어 있습니다. 따라서 macd 변수는 다음과 같이 분할될 수 있습니다.

      var dif = macd[0]
      var dea = macd[1]
      var macdColumn = macd[2]
    

    여기에 이미 만들어진 교육 사례가 있습니다. 관심이 있으시면 공부해 보세요: https://www.fmz.com/strategy/151972

    암호화폐 업계의 양적 거래 초보자 여러분, 이 글을 꼭 읽어보세요 - 암호화폐 업계의 양적 거래에 한 걸음 더 다가가기(2부)