Extraire une valeur d'un tableau en PYTHON

Fermé
Oumpa - Modifié le 14 nov. 2022 à 20:11
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 16 nov. 2022 à 11:18

Bonjour,

Je suis a la recherche d'aide pour débloquer une situation sur un algo.

Je développe un algorithme tout simple de trading et j'aimerais a la suite du passage d'un ordre récupérer le numéros de ticket de cet ordre.

Lorsqu'un ordre d'achat/vente passe grâce l'algorithme l'ordre en question se voit attribuer un numéros de ticket et j'aimerais utiliser ce numéros de ticket dans la suite de mon algorithme.

Actuellement, la commande suivante me permet d'afficher en fin d'algorithme grâce a cette commande les informations à propos du trade :

print(mt5.order_send)

Elle retourne :

OrderSend (Volume=1, Deviation=2, Ticket=123456, etc...) 

Ce que j'aimerais c'est extraire de cette suite de valeur le numéros de Ticket

Merci d'avance pour l'aide que vous me fournirez.

A voir également:

2 réponses

Bonsoir, quel est le type de mt5.order_send ? Cet attribut retourne quoi ? Une liste ? Un dictionnaire ? Autre chose ?

print(type(mt5.order_send))
0

Bonjour je n'ai aucune idée comment puis-je savoir?

0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
14 nov. 2022 à 20:30

Bonjour,

De ce que j'ai cru inférer, tu utilses la fonction order_send de MetaTrader5 et celle-ci retourne plus ou moins un MqlTradeResult (ça aurait été bien de préciser dans le message initial) Le problème c'est que cette documentation ne concerne pas le python (qui n'est qu'un wrapper) mais la librairie C++ sous-jacente.

De plus ton code paraît étrange, car mt5.order_send est une méthode qui prend en paramètre une requête. Je ne vois donc pas trop comment ton code peut retourner un OrderSend.

import MetaTrader5 as mt5

my_request = ...
result = mt5.order_send(my_request)
print(result)

Enfin, peu importe la manière dont tu récupères ton résultat, tu peux inspecter ses attributs avec :

print(result.__dict__)

... ce qui te permettrait de voir les attributs ou méthodes qui peuvent t'intéresser. Si ça se trouve, ce que tu veux, c'est juste :

print(result.ticket)

Bonne chance

0

Bonjour merci de votre réactivité, je suis vraiment novice dans la conception d'algo je ne savais pas pour la formule en mql5 donc désolé de ne pas avoir précisé.

Vous pensez que print(result.ticket) récupèrerais le ticket du trade qui viens de passer ?

Qu'entendez vous par inspecter ces attributs ? cela me permettrais quoi concretement?

Merci

0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748 > Oumpa
Modifié le 15 nov. 2022 à 14:31

Bonjour merci de votre réactivité, je suis vraiment novice dans la conception d'algo je ne savais pas pour la formule en mql5 donc désolé de ne pas avoir précisé.

Peut-être devrais-tu commencer par regarder quelques tutoriels pour apprendre python et à utiliser ce module ?

Vous pensez que print(result.ticket) récupèrerais le ticket du trade qui viens de passer ?

Sans inspecter l'objet, on ne peut pas en être sûr mais ça serait naturel.

Qu'entendez vous par inspecter ces attributs ? 

En python, tu peux interroger un objet pour savoir quels sont les attributs qu'il possède (les méthodes qu'il expose, les variables membres qu'il mémorise...). On parle d'introspection. Si à la fin de ton fichier, tu ajoutes les instructions suivantes et que tu nous reportes leur résultat on devrait y voir plus clair

print(type(result))
print(result.__dict__)
dir(result)

Par ailleurs on attend toujours que tu nous donne un extrait de code permettant de mieux comprendre ce que tu fais.

Bonne chance

0

Bonjou,

Je vous donne un extrait de code pour éclaircir ma demande. Après avoir défini les bibliothèque ainsi que les variable on arrive a cette partie de l'algorithme où on retrouve les calcul pour définir les conditions pour passer un trade :

    # Calcul Bollinger

    sma = df['close'].mean()
    sd = df['close'].std()
    lower_band = sma - STANDARD_DEVIATION * sd
    upper_band = sma + STANDARD_DEVIATION * sd
    BollCall = last_close_price < lower_band
    BollPut = last_close_price > upper_band

    sma1H = DF['close'].mean()
    sd1H = DF['close'].std()
    lower_band1H = sma1H - STANDARD_DEVIATION * sd1H
    upper_band1H = sma1H + STANDARD_DEVIATION * sd1H

    # Calcul RSI

    df['rsi'] = ta.momentum.rsi(df.close, window=14)

    RsiCall = bool(float(df['rsi'].iloc[-1]) < BORNEBASSE)
    RsiPut = bool(float(df['rsi'].iloc[-1]) > BORNEHAUTE)

    # Verification Range
    RangeOK = bool(lower_band1H < last_close_price < upper_band1H)


    # Conditions :

    if RsiCall: #and RangeOK and BollCall:
        return 'buy', sd

    elif RsiPut: #and RangeOK and BollPut:
        return 'sell', sd

    else:
        return [None, None]

# Connection à la plateforme
initialized = mt5.initialize()

if initialized:
    print('connected to MetaTrader5')
    print('Login:', mt5.account_info().login)
    print('Server:', mt5.account_info().server)

while True:
    localtime = time.localtime()
    Heure = time.strftime("%H.%M", localtime)

    if mt5.positions_total() == 0 and (Open1 < float(Heure) < Close1 or Open2 < float(Heure) < Close2):
        signal, standard_deviation = get_signal()
        print(Heure)

        tick = mt5.symbol_info_tick(SYMBOL)
        if signal == 'buy':
            market_order(SYMBOL, 1.0, 'buy', 20, 10) #,tick.bid - SL_SD * standard_deviation,
                         #tick.bid + TP_SD * standard_deviation)

        elif signal == 'sell':
            market_order(SYMBOL, 1.0, 'sell', 20, 10) #,tick.bid + SL_SD * standard_deviation,
                         #tick.bid - TP_SD * standard_deviation)

Jusqu'ici tout va bien l'algorithme tourne. Une autre partie de l'algorithme qui me renvois OrderSendResult

order_result = mt5.order_send(request)
print(order_result)
return order_result

Et des qu'un ordre passe j'ai ca qui s'affiche dans ''Run:''

connected to MetaTrader5
Login: XXXXXXX
Server: AdmiralMarkets-Demo
19.09
OrderSendResult(retcode=10002, deal=0, order=1117097736, volume=1.0, price=0.0, etc...)

Et moi ce qui m'intéresserais, c'est de récupérer la valeur numérique de 'order' qui correspond a mon numéros de ticket.


Merci !

0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748 > Oumpa
16 nov. 2022 à 11:18

La demande est claire mais tu n'as toujours pas répondu à mon message #5. Du coup, difficile d'en dire plus. Tu pourrais donc ajouter après ton print(order_result) les instructions dont je parlais.

0