Type/to search
8
Follow
1364
Followers
파이썬 버전 MACD 그리기 예제
Discussions
Created 2020-02-27 19:18:17  Updated 2023-10-09 22:50:01
 0
 2983

img

파이썬 버전 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의 타임스탬프를 비교하여 판단)

직접 백테스트 가능

img

실시간으로 실행할 수도 있습니다.
img

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

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

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)