avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Exemple de dessin MACD en version Python

Créé le: 2020-02-27 19:18:17, Mis à jour le: 2023-10-09 22:50:01
comments   0
hits   2701

Exemple de dessin MACD en version Python

Exemple de dessin MACD en version Python

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)

Dictionnaire de configuration des graphiques ChartCfg

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)

Chargement des données

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)

Peut effectuer un backtest directement

Exemple de dessin MACD en version Python

Vous pouvez également l’exécuter en temps réel : Exemple de dessin MACD en version Python

Exemple d’adresse de politique : https://www.fmz.com/strategy/187379

Si vous avez des questions, merci de laisser un message.