사실, 이 예제 코드를 만들기 전에, 이미 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)
이ChartCfg
사전 변수는 차트 구성 정보를 저장합니다.
이 차트에는 몇 줄이 있습니까? (세 개의 표시 줄, 각각 DIF, DEA 및 MACD)
그래프에 K-라인이 있습니까? (
이 예제 전략에서, 메인 함수는 차트를 초기화하기 시작하고, 차트 함수를 호출하고, 차트 구성 ChartCfg를 매개 변수로 전달하여 차트 객체를 생성합니다. 그런 다음 루프에 들어가 K-라인 데이터를 지속적으로 얻고, K-라인 데이터의 BAR 수가 50보다 많다고 판단하고, MACD 지표를 계산합니다. 그래프 객체의 덧셈 함수를 사용하여 그래프에 적습니다 작성할 때, 추가 함수의 마지막 매개 변수 -1이 지정되면 현재 데이터 포인트를 업데이트하는 값입니다. -1이 전송되지 않으면 새로운 데이터 포인트가 추가됩니다. K-라인 BAR가 새로 생성되면 새로운 데이터 포인트가 추가됩니다. K-라인 BAR가 생성되지 않을 경우 마지막 BAR와 해당 지표가 업데이트됩니다. (K-라인 BAR의 시간표를 비교하여 결정됩니다.)
실제 봇에서도 실행할 수 있습니다.
전략 예제 주소:https://www.fmz.com/strategy/187379
궁금한 게 있으면 메시지를 남겨주세요