파이썬에서 가격 모멘텀 분석과 함께 양적 거래 전략

저자:리디아, 창작: 2023-01-11 11:35:36, 업데이트: 2023-09-20 11:20:06

img

파이썬에서 가격 모멘텀 분석과 함께 양적 거래 전략

가격 동력 거래 전략에 대한 소개

모멘텀 트레이딩 전략은 특정 기간 동안의 개시 가격, 최고 가격, 최저 가격 사이의 관계를 통해 장기 및 단위 포지션 힘의 비교를 분석하여 시장에서 장기 및 단위 힘의 현재 분포를 간접적으로 이해할 수 있습니다. 가격 변동 분석은 미래의 가격 움직임을 추적하는 데 사용됩니다.

가격 모멘텀 분석은 전통적인 수동 투기 주문에서 광범위하게 사용되어 왔으며, 특히 하루의 일방적 추세를 결정하는 데 사용되었습니다. 오래된 클리셰, 상황을 활용하는 것입니다. 상황을 가장 잘 정량화하는 것은 긴 및 짧은 포지션 측면 사이의 강도 비교의 정량화입니다. 가격 모멘텀 분석은 최고의 지표 중 하나입니다.

이 논문은 이 전략을 사용하여 디지털 통화에 대한 자동 스팟 거래 프로그램을 개발합니다.후오비.

가격 동력을 계산하는 공식

AR = [N 일 동안의 모든 (열린 높은) / N 일 동안의 모든 (열린 낮은) 의 합] * 100

그 중 에는:

  • N: 일일 시간 사이클의 통계 창은 일반적으로 30일입니다. 왜냐하면 한 달의 유효 거래일은 약 30일이기 때문입니다. (비밀 통화 24/7 거래, 보수적일 수 있습니다.)

  • 최고: 하루 동안 가장 높은 가격

  • 오픈: 단 하루의 개시 가격

  • 낮: 하루 동안 가장 낮은 가격

가격 동력을 사용하는 방법

가격 모멘텀은 개시 가격의 위치를 반영합니다. 높은 가격과 가장 낮은 가격 사이의 일정 기간 동안.이 위치는 우리가 두 당사자의 힘을 판단하는 기초입니다.

  • 이 값이 100 정도라고 가정합니다. 100보다 높으면 긴 포지션 힘이 증가하기 시작합니다. 100보다 작으면 짧은 포지션 힘이 집약하기 시작합니다.
  • AR 값이 증가하면 시장이 활성화되고 인기가 있으며 긴 포지션이 급증하고 있음을 의미합니다. 그러나 가격이 너무 높으면 가격이 과잉 매입 영역에 들어갔다는 것을 의미하며 포지션을 닫을 시간을 선택해야합니다. AR 값의 높이에 대한 특정 표준은 없습니다. 일반적으로 AR 값이 약 120으로 상승하면 가격이 다시 떨어질 가능성이 있습니다.
  • AR 값이 감소하면 시장이 하락하고 짧은 포지션이 풀 스윙에 있다는 것을 나타냅니다. 이는 긴 포지션의 노력을 필요로합니다. AR 값이 너무 낮으면 가격이 과잉 판매 영역으로 떨어졌을 수 있음을 나타냅니다. 일반적으로 AR 값이 50 이하로 떨어지면 가격이 떨어지기를 멈추고 언제든지 상승 할 수 있습니다.

참고: 위의 숫자는 모두 기본 값이며 진실 공식이 아닙니다. 실제 거래 과정에서 우리는 시장의 변화에 따라 현재 시장 상태에 적응하도록 이 범위를 조정해야합니다.

파이썬에서 가격 동력을 위한 양적 거래 전략을 구현

평소처럼, 우리는 오픈FMZ.COM, 우리의 계정에 로그인하여 대시보드를 클릭하고 도커와 로봇을 배포합니다.

도커와 로봇을 어떻게 배포해야 하는지에 대한 제 이전 기사를 참조하시기 바랍니다:https://www.fmz.com/bbs-topic/9864.

독자들이 자신의 클라우드 컴퓨팅 서버를 구입하여 도커를 배포하고 싶다면 이 기사를 참조할 수 있습니다.https://www.fmz.com/digest-topic/5711.

다음으로 왼쪽 컬럼의 전략 라이브러리를 클릭하고 전략을 추가하는 것을 클릭합니다.

전략 편집 페이지의 오른쪽 상단 모서리에서 파이썬과 같은 프로그래밍 언어를 선택하십시오. 그림과 같이:

img

다음으로, 우리는 코드 편집 페이지에 파이썬 코드를 작성할 것입니다. 다음 코드는 매우 상세한 라인 바이 라인 코멘트를 가지고 있습니다. 독자들은 이해하기 위해 시간을 할애 할 수 있습니다. 더 중요한 것은 이 전략이 스팟 트레이딩을 기반으로 작성되었지만 다음 코드의 확장성은 선물 거래를 고려합니다. 관심있는 독자들은 다음 코드를 선물 거래로 다시 작성하려고 시도 할 수 있습니다. 전략 자체의 논리는 보편적입니다. FMZ 퀀트 플랫폼에서 우리는 주요 스팟 선물 및 거래소의 API 인터페이스를 준비하여 재 작성하는 것이 매우 쉽고 편리합니다.

우리는 Huobi의 비트코인 스팟을 거래 대상으로 사용하고 이 전략을 실행하기 시작할 것입니다.

import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.
def main(): # The main function, where the strategy logic begins.
    IDLE = 0 # It is used to mark the position status, which can be understood as 0, that is, idle status, i.e. short position status.
    LONG = 1 # Long positions
    SHORT = 2 # Short position. Note that this strategy is applied to the spot market, so there is no short opening or position. This is written here to facilitate understanding of the strategy and future expansion (such as extending to the futures market).
    state = IDLE # Variables that mark the status of a position
    while True: # Enter the loop
        r = exchange.GetRecords() # GetRecords is the official API of the FMZ Quant Platform, for detailed usage please refer to: https://www.fmz.com/api.
        if len(r) <= 1: # Judge whether the K-line is larger than one, that is, whether it is currently in the open state, or it may enter an endless loop. Here, it is also convenient for readers to expand, and the trend state of a larger K-line period is more stable.
           Log("The number of bars is not enough, wait for the next bar...") # Output logs
           continue # Python loop control statement, continuing with the next part of the loop.

        # Begin quantitative analysis of price momentum
        ar = sum(r.High - r.Open) / sum(r.Open - r.Low) * 100 # Calculation formula

        account = _C(exchange.GetAccount) # Get account information, _C is also the official API of the FMZ Quant platform, for usage, please refer to: https://www.fmz.com/api.

        if ar < 95 and (state == IDLE or state == SHORT) :  # If the AR value is less than the oversold line and the account has funds, then buy all positions.
           
           if account["Balance"] > 50:
                exchange.Buy(-1, account["Balance"] * 0.9) # Buy all positions of the market order
                state = LONG # Change the position status to LONG
                  
        elif ar > 80 and (state == IDLE or state == LONG):  # If the AR value is greater than the overbought line and the account has a position, sell the whole position.
            
           if account["Stocks"] > 0.01:
                exchange.Sell(-1, account["Stocks"] * 0.9) # Sell all positions market order
                state = SHORT # Change the position status to SHORT
                      
        LogStatus(_D(), exchange.GetAccount() , state) # Update log information

전략 역 테스트

전략을 작성한 후, 우리가 해야 할 첫 번째 일은 역사적 데이터에서 어떻게 행동하는지 확인하기 위해 테스트하는 것입니다. 그러나 백테스트의 결과가 미래에 대한 예측과 같지 않다는 것을 유의하십시오. 백테스트는 우리의 전략의 효과를 고려하기 위해 참조로만 사용될 수 있습니다. 시장이 변화하고 전략이 큰 손실을 받기 시작하면, 우리는 시기에 문제를 발견하고, 위의 문턱과 같은 새로운 시장 환경에 적응하기 위해 전략을 변경해야합니다. 전략이 10% 이상의 손실을 가지고 있다면, 우리는 즉시 전략의 운영을 중단하고 문제를 찾을 수 있습니다. 우리는 문턱을 조정하는 것으로 시작할 수 있습니다.

전략 편집 페이지에서 백테스트를 클릭하십시오. 백테스트 페이지에서 매개 변수를 편리하고 신속하게 다른 필요에 따라 조정할 수 있습니다. 특히 복잡한 논리와 많은 매개 변수를 가진 전략에서는 소스 코드 페이지로 돌아가서 하나씩 수정할 필요가 없습니다.

백테스트 시간은 마지막 달입니다. Huobi 스팟 거래소와 BTC 거래 목표를 추가하기 위해 클릭합니다.

img

백테스트 결과:

img

우리는 이 전략이 이 달의 백테스트에서 좋은 성과를 낸 것을 볼 수 있습니다.

가격 동력 전략의 장단점

  • 장점 일부 다른 전통적인 기술 지표와 비교했을 때, 가격 모멘텀의 장점은 단일 개시 가격이나 폐쇄 가격을 사용하지 않고 가장 높은 가격과 가장 낮은 가격을 소개한다는 것입니다. 그들은 동적으로 비교되며 시장 정보를 더 포괄적이고 반응적이며 하루 내 가격 변동을 통해 거시적으로 만듭니다.

  • 단점 가격 동력 값을 독립적으로 사용하여 가격이 너무 높거나 낮는지 판단하기 위해, 장기 / 단기 판단하기 위해 주요 트렌드 물결의 초기 또는 주요 하락 시장의 물결의 초기 바닥 낚시를 할 가능성이 있습니다. 일반적으로 전략은 여전히 충격 효과 전략입니다.

또한 전략의 임계 설정은 거래 대상의 특성에 따라 결정되어야 합니다. 디지털 통화 시장의 가격 변동은 상대적으로 크며, 비트코인과 같은 주류 통화에서 특히 거래량은 매우 크며, 상승과 하락에 제한이 없기 때문에 임계 값은 전통적인 주식 시장보다 높습니다. 80 과잉 판매 라인은 일반적으로 닿기 어렵고, 구매 신호가 거의 없습니다; 170 과잉 구매 라인은 종종 임계 이하이지만, 판매 신호가 자주 유발됩니다. 이것은 전략이 대부분의 시간 동안 짧은 위치에 있고, 자금 활용도가 매우 낮아지게됩니다. 예를 들어, 올해 1 월부터 비트코인의 가격은 황소 시장의 물결에서 3500에서 거의 13000으로 상승했습니다. 임계 값은 170 라인을 매우 일찍 넘어서고 매우 높습니다.

따라서 시장에는 결코 신성한 잔 거래 전략이 없었습니다. 백테스트 및 디버깅없이 항상 이익을 얻을 수 없습니다. 주관적 거래자와 마찬가지로 우리는 양적 거래자가 다른 방식으로 동일한 목표를 가지고 끝납니다. 우리는 시장의 변화에 따라 지역 조건에 적응하고 시장의 변화에 대응해야합니다. 전략이 비효율적 인 경우, 우리는 그것을 적시에 조정해야합니다.

궁금한 게 있으면https://www.fmz.com/bbs, 그것이 플랫폼의 전략이나 기술에 관한 것이든 FMZ Quant 플랫폼은 귀하의 질문에 대답 할 준비가 된 전문가가 있습니다.


관련

더 많은