Les ressources ont été chargées... Je charge...

Exemple de dessin MACD Python

Auteur:FMZ~Lydia, Créé: 2022-12-01 16:54:01, Mis à jour: 2023-09-11 08:59:21

img

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)

Le dictionnaire de configuration de graphique ChartCfg

LeChartCfgle 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? (type: candlestick fait référence au type défini comme données de ligne K) Les valeurs MACD sont relativement petites. Si la paire de trading est BTC_USDT, lors du tirage, les indicateurs seront compressés ensemble, ce qui est très gênant à voir, donc le graphique doit également être configuré comme deux axes Y. (Par conséquent, il existe deux configurations d'axes Y dans yAxis, l'une est l'axe de l'indicateur et l'autre est l'axe de la ligne K)

Données de charge

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 être testé directement.

img

Il peut aussi fonctionner sur un vrai bot:

img

Adresse d'exemple de stratégiehttps://www.fmz.com/strategy/187379

Si vous avez des questions, laissez un message.


Relationnée

Plus de