
사실, 이 샘플 코드를 만들기 전에 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사전 변수는 다음과 같은 차트 구성 정보를 저장합니다.
이 그래프에는 몇 개의 선이 있습니까? (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의 타임스탬프를 비교하여 판단)

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

정책 예시 주소: https://www.fmz.com/strategy/187379
질문사항이 있으시면 메시지를 남겨주세요.