IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Calcul d'une pente et du maximum qui suit sur un fichier xlsx


Sujet :

Calcul scientifique Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut Calcul d'une pente et du maximum qui suit sur un fichier xlsx
    Bonjour,

    Je voudrais pouvoir calculer une pente à partir des données d'un fichier xlxs.
    Si la pente est positive de déterminer le maximum de la courbe qui suit.
    Je n'arrive pas du tout a trouver d'exemple pour m'aider. J'arrive juste à récupérer les données et les afficher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
     
    SMA_RSI = pd.read_excel("SMA_RSI.xlsx")
     
    print(SMA_RSI)
    Pouvez-vous m'aider? Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par DantonLuc Voir le message
    Je voudrais pouvoir calculer une pente à partir des données d'un fichier xlxs.
    Si la pente est positive de déterminer le maximum de la courbe qui suit.
    A priori, la "pente" peut être approchée par la différence de deux nombres successifs.
    Ce qui peut se programmer en faisant une boucle sur la suite des nombres.
    note: Pour ce qui est des maxima, il faudrait les définir un peu mieux car les points où la suite change de signe ne seront que des extrema locaux.

    Et si vous ne savez pas comment faire une boucle sur une liste de nombres, faut ouvrir un tuto... d'urgence.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut
    Merci pour votre réponse. Je n'ai pas l'habitude d'utiliser panda et cela me perturbe.

    A partir du fichier xlxs, j'arrive maintenant à calculer ma pente comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
     
    SMA_RSI = pd.read_excel("SMA_RSI.xlsx")
     
    print(SMA_RSI)
     
    for i in range(len(SMA_RSI)-1):
    	#m = (y2-y1)/(x2-x1)
    	m= ((SMA_RSI.loc[i+1,"SMA_RSI"])-(SMA_RSI.loc[i,"SMA_RSI"]))/((i+1)-i)
    	if m>0 :
    		print(SMA_RSI.loc[i])		
    	if m<0 :
    		print(SMA_RSI.loc[i])
    Maintenant je voudrais faire ce calcul directement dans mon fichier principal qui est comme cela:
    Je récupère les données du cours de l'ETH qui est df, je calcule le RSI et sa moyenne. Puis je veux déterminer la pente de cette moyenne afin de définir mes signaux d'achat et vente sauf que cela ne fonctionne plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    import pandas as pd
    from binance.client import Client
    import ta
    import pandas_ta as pda
    import matplotlib.pyplot as plt
    import numpy as np
    from termcolor import colored
    
    client = Client()
    
    klinesT = client.get_historical_klines("ETHUSDT", Client.KLINE_INTERVAL_1HOUR, "01 january 2021")
    
    df = pd.DataFrame(klinesT, columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_av', 'trades', 'tb_base_av', 'tb_quote_av', 'ignore' ])
    df['close'] = pd.to_numeric(df['close'])
    df['high'] = pd.to_numeric(df['high'])
    df['low'] = pd.to_numeric(df['low'])
    df['open'] = pd.to_numeric(df['open'])
    
    df = df.set_index(df['timestamp'])
    df.index = pd.to_datetime(df.index, unit='ms')
    del df['timestamp']
    print(df)
    
    #Backtest Execution
    df.drop(df.columns.difference(['open','high','low','close','volume']), 1, inplace=True)
    
    #Relative Strength Index (RSI)
    df['RSI'] =ta.momentum.rsi(close=df['close'], window=14)
    df['SMA_RSI']=ta.trend.sma_indicator(close=df['RSI'], window=14)
    
    df
    
    #Spot Backtest
    dfTest = df.copy()
    # dfTest = df['2021-01-01':]
    dt = None
    dt = pd.DataFrame(columns = ['date','position', 'reason', 'price', 'frais' ,'fiat', 'coins', 'wallet', 'drawBack'])
    
    def buyCondition(row, previousRow):
      if df['pente_SMA_RSI']>0:
        return True
      else:
        return False
    
      
    def sellCondition(row, previousRow):
      if df['pente_SMA_RSI']<0:
        return True
      else:
        return False
    
    for index, row in dfTest.iterrows():
        #Buy market order
        pente_SMA_RSI= ((df['SMA_RSI'].loc[index+1])-(df['SMA_RSI'].loc[index]))/((index+1)-index)
        if buyCondition(row, previousRow) == True and usdt > 0 and buyReady == True:
            #You can define here at what price you buy
            buyPrice = row['close']
    J'obtiens cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pente_SMA_RSI= ((df['SMA_RSI'].loc[index+1])-(df['SMA_RSI'].loc[index]))/((index+1)-i)
      File "pandas/_libs/tslibs/timestamps.pyx", line 294, in pandas._libs.tslibs.timestamps._Timestamp.__add__
    TypeError: Addition/subtraction of integers and integer-arrays with Timestamp is no longer supported.  Instead of adding/subtracting `n`, use `n * obj.freq`

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 42
    Par défaut
    ok j'ai reussi finalement comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    import pandas as pd
    from binance.client import Client
    import ta
    import pandas_ta as pda
    import matplotlib.pyplot as plt
    import numpy as np
    from termcolor import colored
     
    client = Client()
     
    klinesT = client.get_historical_klines("ETHUSDT", Client.KLINE_INTERVAL_1HOUR, "01 january 2021")
     
    df = pd.DataFrame(klinesT, columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_av', 'trades', 'tb_base_av', 'tb_quote_av', 'ignore' ])
    df['close'] = pd.to_numeric(df['close'])
    df['high'] = pd.to_numeric(df['high'])
    df['low'] = pd.to_numeric(df['low'])
    df['open'] = pd.to_numeric(df['open'])
     
    df = df.set_index(df['timestamp'])
    df.index = pd.to_datetime(df.index, unit='ms')
    del df['timestamp']
     
     
    #Backtest Execution
    df.drop(df.columns.difference(['open','high','low','close','volume']), 1, inplace=True)
     
    #Relative Strength Index (RSI)
    df['RSI'] =ta.momentum.rsi(close=df['close'], window=14)
    df['SMA_RSI']=ta.trend.sma_indicator(close=df['RSI'], window=14)
     
    pente=[0]
    for i in range(len(df['SMA_RSI'])-1):
    #   m = (y2-y1)/(x2-x1)
        m = ((df['SMA_RSI'].iloc[i+1])-(df['SMA_RSI'].iloc[i]))/((i+1)-i)
        pente.append(m)
     
    df['pente_SMA_RSI']=pente   
     
    print(df)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Déjà (i+1)-i ou (index+1)-index font 1: pas la peine de diviser par 1!

    Ceci dit le message d'erreur est explicite: Instead of adding/subtracting `n`, use `n * obj.freq` pour autant qu'on sache ce que contiennent vos dataframes. Un exemple avec des quelques données typiques permettant de reproduire le problème serait bienvenu!

    A défaut, entrez le message d'erreur dans un moteur de recherche et inspirez vous des réponses.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/11/2017, 12h05
  2. [AC-2010] Ajouter une date dans la ligne qui suit
    Par Pittouti dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 18/04/2014, 14h23
  3. Une version de Gantt(bryntum) qui marche sur Ext js 4.1.0
    Par chokrov dans le forum Ext JS / Sencha
    Réponses: 0
    Dernier message: 27/07/2013, 11h29
  4. Réponses: 35
    Dernier message: 05/04/2011, 11h50
  5. Réponses: 2
    Dernier message: 13/06/2007, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo