리소스 로딩... 로딩...

파이썬 MACD 도화 예제

저자:FMZ~리디아, 창작: 2022-12-01 16:54:01, 업데이트: 2023-09-11 08:59:21

img

사실, 이 예제 코드를 만들기 전에, 이미 FMZ 양자 거래 플랫폼의 전략 광장에서 MACD 지표 도면 예제의 자바스크립트 버전이 있습니다:https://www.fmz.com/strategy/151972그러나, 사용자 필요에 따라, 우리는 여전히 파이썬 버전의 예를 작성, 전략 개발 디자인 도면에서 참조 코드로 사용할 수 있습니다.

코드는 아주 간단합니다.

'''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 drawing'
    },
    'yAxis': [{
        'title': {'text': 'K-line'},
        'style': {'color': '#4572A7'},
        'opposite': False
    }, {
        'title': {'text': 'index axis'},
        'opposite': True
    }],
    'series': [{
        'type': 'candlestick',
        'name': 'current period',
        '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
        # calculate the indicator
        macd = TA.MACD(r)
        
        LogStatus(_D(), len(r))
        
        # drawing
        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)

차트Cfg 차트 구성 사전

ChartCfg사전 변수는 차트 구성 정보를 저장합니다. 이 차트에는 몇 줄이 있습니까? (세 개의 표시 줄, 각각 DIF, DEA 및 MACD) 그래프에 K-라인이 있습니까? (type: candlestick은 K-라인 데이터로 설정된 타입을 의미합니다) MACD 값은 상대적으로 작습니다. 거래 쌍이 BTC_USDT라면, 도출할 때 지표가 함께 압축되어 볼 수 있어 매우 불편합니다. 따라서 차트도 Y 축으로 구성되어야 합니다. (그러므로, yAxis에 Y 축 구성이 두 개 있습니다. 하나는 지표 축이고 다른 하나는 K 선 축입니다.)

부하 데이터

이 예제 전략에서, 메인 함수는 차트를 초기화하기 시작하고, 차트 함수를 호출하고, 차트 구성 ChartCfg를 매개 변수로 전달하여 차트 객체를 생성합니다. 그런 다음 루프에 들어가 K-라인 데이터를 지속적으로 얻고, K-라인 데이터의 BAR 수가 50보다 많다고 판단하고, MACD 지표를 계산합니다. 그래프 객체의 덧셈 함수를 사용하여 그래프에 적습니다 작성할 때, 추가 함수의 마지막 매개 변수 -1이 지정되면 현재 데이터 포인트를 업데이트하는 값입니다. -1이 전송되지 않으면 새로운 데이터 포인트가 추가됩니다. K-라인 BAR가 새로 생성되면 새로운 데이터 포인트가 추가됩니다. K-라인 BAR가 생성되지 않을 경우 마지막 BAR와 해당 지표가 업데이트됩니다. (K-라인 BAR의 시간표를 비교하여 결정됩니다.)

바로 백테스트가 가능합니다.

img

실제 봇에서도 실행할 수 있습니다.

img

전략 예제 주소:https://www.fmz.com/strategy/187379

궁금한 게 있으면 메시지를 남겨주세요


관련

더 많은