Bonjour les crypto-millionnaires !
Cela fait quelques années que j'ai des crypto et pour être tout à fait franc j'avais laissé ça mourir dans un coin en faisant ma vie. 
En voyant que le marché s'est réveillé j'ai repris un peu le train mais je me dis que j'en ai marre d'avoir constamment les yeux rivés sur les tradingview de mes crypto. 
En regardant ce qu'il se faisait, j'ai compris qu'il était possible de mettre en place des scripts python se connectant aux API de certains exchange pour... faire le boulot à ma place ! Sauf que pour être toutafay franc j'y connais RIEN en script, en python, etc. (je ne suis pas en info !) 
Mais nous sommes en 2024 donc j'ai demandé à... ChatGPT quelques précisions et des exemples de scripts pour m'aider à faire marcher le truc... 
Mon objectif n'est pas de maximiser mes profits avec des x10/x100 (mais je ne serai pas contre...
), je ne souhaite pas jouer avec des long/short uniquement des ordres simples d'achat/vente (pour commencer). Je n'ai même pas une quantité énorme avec laquelle m'amuser (environ 4k$ aux taux actuel).
Ca me permettra aussi de mettre un pied dans ce langage python, ça pourrait in fine m'être utile dans mon travail (industrie avec énormément de génération de data qu'on utilise relativement "peu" aujourd'hui).
Bref je sais je suis un gros GOLEMAX je suis sur CoinBase mais c'est pour commencer, je changerai si l'herbe est plus verte ailleurs...
En attendant j'ai demandé à ChatGPT un exemple de script python pour une stratégie d'achat/vente sur la paire ETH/USDC en prenant en compte la variation du marché (j'ai fait plusieurs itérations à ChatGPT pour avoir un truc qui m'a l'air, à moi néophyte, plus efficace) et j'aimerai avoir un avis de l'ELITE :
import cbpro
import pandas as pd
import numpy as np
import time
from datetime import datetime, timedelta
# Configuration des informations d'authentification
api_key = 'your_api_key'
api_secret = 'your_api_secret'
passphrase = 'your_passphrase'
# Créer un client authentifié
auth_client = cbpro.AuthenticatedClient(api_key, api_secret, passphrase)
# Fonction pour récupérer les données historiques
def get_historical_data(product_id, granularity, start=None, end=None):
data = []
while start < end:
batch_end = min(start + timedelta(seconds=granularity * 300), end)
batch = auth_client.get_product_historic_rates(product_id, granularity=granularity, start=start.isoformat(), end=batch_end.isoformat())
if not batch:
break
data += batch
start = batch_end
data.reverse() # Inverser les données pour avoir les plus anciennes en premier
return data
# Fonction pour vérifier le solde
def get_balance(currency):
accounts = auth_client.get_accounts()
for account in accounts:
if account['currency'] == currency:
return float(account['balance'])
return 0.0
# Fonction pour obtenir le prix actuel de ETH/USDC
def get_eth_usdc_price():
ticker = auth_client.get_product_ticker(product_id='ETH-USDC')
return float(ticker['price'])
# Fonction pour placer un ordre limite d'achat
def place_buy_order(price, usdc_amount):
size = usdc_amount / price # Calculer la taille en ETH
order = auth_client.place_limit_order(
product_id='ETH-USDC',
side='buy',
price=str(price),
size=str(size)
)
return order
# Fonction pour placer un ordre limite de vente
def place_sell_order(price, eth_amount):
order = auth_client.place_limit_order(
product_id='ETH-USDC',
side='sell',
price=str(price),
size=str(eth_amount)
)
return order
# Fonction pour calculer les moyennes mobiles
def calculate_moving_averages(data, short_window, long_window):
data['short_mavg'] = data['close'].rolling(window=short_window).mean()
data['long_mavg'] = data['close'].rolling(window=long_window).mean()
return data
# Paramètres de la stratégie
short_window = 50 # Fenêtre courte pour la moyenne mobile
long_window = 200 # Fenêtre longue pour la moyenne mobile
order_usdc_amount = 100 # Montant de l'ordre en USDC pour les achats
order_eth_amount = 0.1 # Montant de l'ordre en ETH pour les ventes
# Période de données historiques
data_period_days = 5 # Nombre de jours de données historiques
granularity = 300 # Granularité des données (en secondes, ici 5 minutes)
# Boucle principale de la stratégie
while True:
end_time = datetime.utcnow()
start_time = end_time - timedelta(days=data_period_days) # Période de récupération des données
historical_data = get_historical_data('ETH-USDC', granularity=granularity, start=start_time, end=end_time)
df = pd.DataFrame(historical_data, columns=['time', 'low', 'high', 'open', 'close', 'volume'])
df['time'] = pd.to_datetime(df['time'], unit='s')
df.set_index('time', inplace=True)
df = calculate_moving_averages(df, short_window, long_window)
latest_price = get_eth_usdc_price()
short_mavg = df['short_mavg'].iloc[-1]
long_mavg = df['long_mavg'].iloc[-1]
print(f"Prix actuel de ETH/USDC: {latest_price}")
print(f"Moyenne mobile courte: {short_mavg}")
print(f"Moyenne mobile longue: {long_mavg}")
eth_balance = get_balance('ETH')
usdc_balance = get_balance('USDC')
# Logique d'achat
if short_mavg > long_mavg and usdc_balance >= order_usdc_amount:
print("Placer un ordre d'achat")
order = place_buy_order(latest_price, order_usdc_amount)
print(f"Ordre d'achat passé: {order}")
# Logique de vente
if short_mavg < long_mavg and eth_balance >= order_eth_amount:
print("Placer un ordre de vente")
order = place_sell_order(latest_price, order_eth_amount)
print(f"Ordre de vente passé: {order}")
# Attendre avant la prochaine vérification
time.sleep(granularity) # Attendre la durée de la granularité avant la prochaine exécution