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

파이썬 버전 MACD 그리기 예제

만든 날짜: 2020-02-27 19:18:17, 업데이트 날짜: 2023-10-09 22:50:01
comments   0
hits   2701

파이썬 버전 MACD 그리기 예제

파이썬 버전 MACD 그리기 예제

사실, 이 샘플 코드를 만들기 전에 Inventor Quantitative Trading Platform Strategy Square를 발견했습니다: https://www.fmz.com/strategy/151972. MACD 지표 그리기 예제는 JavaScript 버전이 이미 있습니다. 그러나 사용자의 요구에 부응하여 전략을 개발하고 설계할 때 참조 코드로 사용할 수 있는 Python 버전의 예제가 작성되었습니다.

코드는 매우 간단합니다.

'''backtest
start: 2020-01-28 00:00:00
end: 2020-02-26 00:00:00
period: 1d
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]
'''

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Python画图'
    },
    'yAxis': [{
        'title': {'text': 'K线'},
        'style': {'color': '#4572A7'},
        'opposite': False
    }, {
        'title': {'text': '指标轴'},
        'opposite': True
    }],
    'series': [{
        'type': 'candlestick',
        'name': '当前周期',
        'id': 'primary',
        'data': []
    }, {
        'type': 'line',
        'id': 'dif',
        'name': 'DIF',
        "yAxis" : 1,
        'data': []
    }, {
        'type': 'line',
        'id': 'dea',
        'name': 'DEA',
        "yAxis" : 1,
        'data': []
    }, {
        'type': 'line',
        'id': 'macd',
        'name': 'MACD',
        "yAxis" : 1,
        'data': []
    }]
}

def main():
    global ChartCfg
    preTime = 0
    chart = Chart(ChartCfg)
    chart.reset()
    while True:
        while True:
            r = _C(exchange.GetRecords)
            if len(r) > 50:
                break
        # 计算指标
        macd = TA.MACD(r)
        
        LogStatus(_D(), len(r))
        
        # 画图
        for i in range(len(r)):
            if r[i]["Time"] == preTime:
                chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]], -1)
                chart.add(1, [r[i]["Time"], macd[0][i]], -1)
                chart.add(2, [r[i]["Time"], macd[1][i]], -1)
                chart.add(3, [r[i]["Time"], macd[2][i]], -1)
            elif r[i]["Time"] > preTime:
                chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]])
                chart.add(1, [r[i]["Time"], macd[0][i]])
                chart.add(2, [r[i]["Time"], macd[1][i]])
                chart.add(3, [r[i]["Time"], macd[2][i]])
                preTime = r[i]["Time"]
        Sleep(500)

ChartCfg 차트 구성 사전

이것ChartCfg사전 변수는 다음과 같은 차트 구성 정보를 저장합니다. 이 그래프에는 몇 개의 선이 있습니까? (DIF, DEA, MACD 등 3개 지표선) 이 차트에 촛대가 있나요? (‘type’: ‘candlestick’은 캔들스틱 데이터로 설정하는 것을 의미합니다) MACD 값은 비교적 작습니다. 거래 쌍이 BTC_USDT인 경우 차트를 그릴 때 지표가 함께 압축되어 읽기가 매우 불편합니다. 따라서 차트는 두 개의 Y축으로 구성되어야 합니다. (그래서 ‘yAxis’에는 Y축 구성이 두 개가 있는데 하나는 인디케이터 축이고 다른 하나는 K-라인 축입니다)

데이터 로딩 중

이 예제 전략에서 main 함수는 차트 초기화를 실행하고, Chart 함수를 호출하고, 차트 구성 ChartCfg를 매개변수로 전달하고, 차트 개체 chart를 생성합니다. 그런 다음 K-라인 데이터를 지속적으로 얻기 위해 루프에 들어갑니다. K-라인 데이터 BAR의 수가 50보다 큰 한 MACD 지표를 계산할 수 있습니다(BAR가 너무 적으면 효과적인 지표를 계산할 수 없음) . 그런 다음 K-라인 데이터와 지표 데이터를 차트에 쓸 수 있습니다. 차트에 쓰려면 차트 객체의 add 메서드를 사용합니다. 작성 시, add 함수의 마지막 매개변수가 -1이면 현재 데이터 포인트의 값이 업데이트됩니다. -1이 전달되지 않으면 새로운 데이터 포인트가 추가됩니다. K-line BAR가 새로 생성되면 새로운 데이터 포인트가 추가됩니다. K-line BAR가 생성되지 않으면 마지막 BAR와 해당 지표가 업데이트됩니다. (K-line BAR의 타임스탬프를 비교하여 판단)

직접 백테스트 가능

파이썬 버전 MACD 그리기 예제

실시간으로 실행할 수도 있습니다. 파이썬 버전 MACD 그리기 예제

정책 예시 주소: https://www.fmz.com/strategy/187379

질문사항이 있으시면 메시지를 남겨주세요.