En fait, avant de faire ce code d'exemple, il existe déjà une version JavaScript de l'exemple de dessin de l'indicateur MACD sur le carré de stratégie de la plateforme de trading FMZ Quant:https://www.fmz.com/strategy/151972Cependant, selon les besoins de l'utilisateur, nous écrivons toujours un exemple de version Python, qui peut être utilisé comme code de référence dans le dessin de conception de développement de stratégie.
Le code est très simple:
'''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)
LeChartCfg
le dictionnaire stocke les informations relatives à la configuration des graphiques, telles que:
Combien de lignes y a-t-il dans ce graphique? (trois lignes d'indicateur, respectivement DIF, DEA et MACD)
Y a-t-il une ligne K dans le graphique? (
Dans cette stratégie d'exemple, la fonction principale commence à initialiser le graphique, elle appelle la fonction Chart, et passe la configuration du graphique ChartCfg comme paramètre pour générer un objet de graphique. Ensuite, elle entre dans une boucle, obtient des données de ligne K constamment, juge que le nombre de BAR dans les données de ligne K est supérieur à 50, puis calcule les indicateurs MACD (trop peu de BAR ne peuvent pas calculer des indicateurs efficaces). Nous l'écrivons dans le graphique en utilisant la fonction add de l'objet du graphique. Lors de l'écriture, si le dernier paramètre -1 de la fonction add est spécifié, il s'agit de la valeur à mettre à jour du point de données actuel. Lorsque le BAR de la ligne K est généré, un nouveau point de données est ajouté. Lorsque le BAR de la ligne K n'est pas généré, le dernier BAR et l'indicateur correspondant sont mis à jour (déterminé en comparant les horodatages du BAR de la ligne K)
Il peut aussi fonctionner sur un vrai bot:
Adresse d'exemple de stratégiehttps://www.fmz.com/strategy/187379
Si vous avez des questions, laissez un message.