
En fait, avant de créer cet exemple de code, j’ai trouvé la stratégie de la plateforme de trading quantitative Inventor Square : https://www.fmz.com/strategy/151972. Il existe déjà une version JavaScript de l’exemple de dessin de l’indicateur MACD. Cependant, en réponse à la demande des utilisateurs, une version Python de l’exemple est écrite pour servir de code de référence lors du développement et de la conception de stratégies.
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画图'
},
'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)
ceChartCfgLa variable dictionnaire stocke les informations de configuration du graphique, par exemple :
Combien de lignes y a-t-il dans ce graphique ? (Trois lignes d’indicateurs, à savoir DIF, DEA, MACD)
Y a-t-il des chandeliers dans ce graphique ? (« type » : « chandelier » signifie le définir comme données de chandelier)
Les valeurs MACD sont relativement petites. Si la paire de trading est BTC_USDT, les indicateurs seront compressés ensemble lors du dessin du graphique, ce qui est très gênant à lire. Par conséquent, le graphique doit être configuré avec 2 axes Y. (Il y a donc deux configurations d’axe Y dans « yAxis », l’une est l’axe indicateur et l’autre est l’axe K-line)
Dans cet exemple de stratégie, la fonction principale commence à exécuter l’initialisation du graphique, appelle la fonction Chart, transmet la configuration du graphique ChartCfg en tant que paramètre et génère un objet graphique chart. Ensuite, il entre dans une boucle pour obtenir en continu des données de ligne K et déterminer que tant que le nombre de BAR de données de ligne K est supérieur à 50, l’indicateur MACD peut être calculé (s’il y a trop peu de BAR, aucun indicateur efficace ne peut être calculé). Vous pouvez ensuite écrire les données de la ligne K et les données de l’indicateur dans le graphique. Pour écrire dans un graphique, utilisez la méthode add de l’objet graphique. Lors de l’écriture, si le dernier paramètre de la fonction add est -1, la valeur du point de données actuel sera mise à jour. Si -1 n’est pas passé, un nouveau point de données sera ajouté. Lorsqu’une barre K-line est nouvellement générée, un nouveau point de données est ajouté. Lorsqu’une barre K-line n’est pas générée, la dernière barre et l’indicateur correspondant sont mis à jour. (Jugé en comparant les horodatages de la ligne K BAR)

Vous pouvez également l’exécuter en temps réel :

Exemple d’adresse de politique : https://www.fmz.com/strategy/187379
Si vous avez des questions, merci de laisser un message.