Bonjour j'ai un problème au niveau d'un même codes :-un code sur mon pcwindows -un code sur un serveur amazon(linux)
Version python 3.10.5 PC Version python 3.10.4 Linux
Avant, le code sur linux marcher nickel à part ce matin le même code ne me donne pas la même valeur.
Le code <<len(ftx.get_open_position([symbol]))>> sur PC me donne 1 ou 0 mais sur linux me sort 8(c'est le nombre de trades en cours.)
Le code me permet de connaître si une position est ouverte ou fermer 1 ou 0 mais sur linux il me donne le nombres totals de mes trades en cours alors que je souhaite juste une valeur.
En bref sur mon pc le code marche super bien, mais pas sur linux merci de votre aide
from instruction import cBot_perp_ftx
import ta
import pandas as pd
import numpy as np
ftx = cBot_perp_ftx(
apiKey='',
secret='',
subAccountName=''
)
# -- Strategy variable --
perpSymbol = 'ETH-PERP','BTC-PERP','FTT-PERP','AVAX-PERP','BNB-PERP','ETC-PERP','ADA-PERP','MATIC-PERP','DOT-PERP','SOL-PERP'
leverage = 2
# -- Price Data --
class SuperTrend():
def __init__(
self,
high,
low,
close,
atr_window=10,
atr_multi=3
):
self.high = high
self.low = low
self.close = close
self.atr_window = atr_window
self.atr_multi = atr_multi
self._run()
def _run(self):
# calculate ATR
price_diffs = [self.high - self.low,
self.high - self.close.shift(),
self.close.shift() - self.low]
true_range = pd.concat(price_diffs, axis=1)
true_range = true_range.abs().max(axis=1)
# default ATR calculation in supertrend indicator
atr = true_range.ewm(alpha=1 / self.atr_window, min_periods=self.atr_window).mean()
# atr = ta.volatility.average_true_range(high, low, close, atr_period)
# df['atr'] = df['tr'].rolling(atr_period).mean()
# HL2 is simply the average of high and low prices
hl2 = (self.high + self.low) / 2
# upperband and lowerband calculation
# notice that final bands are set to be equal to the respective bands
final_upperband = upperband = hl2 + (self.atr_multi * atr)
final_lowerband = lowerband = hl2 - (self.atr_multi * atr)
# initialize Supertrend column to True
supertrend = [True] * len(self.close)
for i in range(1, len(self.close)):
curr, prev = i, i - 1
# if current close price crosses above upperband
if self.close[curr] > final_upperband[prev]:
supertrend[curr] = True
# if current close price crosses below lowerband
elif self.close[curr] < final_lowerband[prev]:
supertrend[curr] = False
# else, the trend continues
else:
supertrend[curr] = supertrend[prev]
# adjustment to the final bands
if supertrend[curr] == True and final_lowerband[curr] < final_lowerband[prev]:
final_lowerband[curr] = final_lowerband[prev]
if supertrend[curr] == False and final_upperband[curr] > final_upperband[prev]:
final_upperband[curr] = final_upperband[prev]
# to remove bands according to the trend direction
if supertrend[curr] == True:
final_upperband[curr] = np.nan
else:
final_lowerband[curr] = np.nan
self.st = pd.DataFrame({
'Supertrend': supertrend,
'Final Lowerband': final_lowerband,
'Final Upperband': final_upperband
})
def super_trend_upper(self):
return self.st['Final Upperband']
def super_trend_lower(self):
return self.st['Final Lowerband']
def super_trend_direction(self):
return self.st['Supertrend']
def openShortCondition(row):
if (row['ema_short'] <= row['ema_long']) & (row['super_trend_direction'] == False):
return True
else:
return False
def openLongCondition(row):
if (row['ema_short'] >= row['ema_long']) & (row['super_trend_direction'] == True):
return True
else:
return False
def closeLongCondition(row):
if (row['ema_short'] <= row['ema_long']) | (row['super_trend_direction'] == False):
return True
else:
return False
def closeShortCondition(row):
if (row['super_trend_direction'] == True):
return True
else:
return False
for symbol in perpSymbol:
df = ftx.get_last_historical(symbol, '1h', 1000)
print(symbol)
df.drop(columns=df.columns.difference(['open', 'high', 'low', 'close', 'volume']), inplace=True)
super_trend = SuperTrend(
df['high'],
df['low'],
df['close'],
)
df['super_trend_direction'] = super_trend.super_trend_direction()
df['ema_short'] = ta.trend.ema_indicator(close=df['close'], window=10)
df['ema_long'] = ta.trend.ema_indicator(close=df['close'], window=100)
# -- indicators --
# -- Condition to open Market LONG --
# -- Condition to open Market SHORT --
# -- Get USD amount on Sub Account --
usdAmount = ftx.get_balance_of_one_coin('USD')
salut = len(ftx.get_open_position([symbol]))
usdAmount = usdAmount - 10
usdAmount = usdAmount * 0.1
tokenamount = ftx.get_balance_of_one_coin(symbol)
print(tokenamount)
print(usdAmount)
#print(ftx.get_open_position())
# -- Get actual price --
actualPrice = df.iloc[-1]['close']
print(len(ftx.get_open_position([symbol])))
# -- Check if you have no position running --
if len(ftx.get_open_position([symbol])) == 1:
# -- Check if you have to open a LONG --
# -- Check if you have a LONG open --
if ftx.get_open_position([symbol])[0]['side'] == 'long':
# -- Check if you have to close your LONG --
if closeLongCondition(df.iloc[-2]):
print(ftx.close_all_open_position([symbol]))
ftx.close_all_open_position([symbol])
ftx.cancel_all_open_order(symbol)
print('Close my LONG position')
else:
print("A LONG is running and I don't want to stop it")
# -- Check if you have a SHORT open --
elif ftx.get_open_position([symbol])[0]['side'] == 'short':
if closeShortCondition(df.iloc[-2]):
print(ftx.close_all_open_position([symbol]))
ftx.close_all_open_position([symbol])
ftx.cancel_all_open_order(symbol)
print('Close my SHORT position')
else:
print("A SHORT is running and I don't want to stop it")
if len(ftx.get_open_position([symbol])) == 0:
if openLongCondition(df.iloc[-2]):
# -- Cancel all order (stop loss) --
ftx.cancel_all_open_order(symbol)
print(ftx.cancel_all_open_order(symbol))
# -- Define the quantity max of token from your usd balance --
quantityMax = float(usdAmount)/actualPrice
# -- Create a market order Long --
shortOrder = ftx.place_market_order(
symbol,
'buy',
quantityMax,
leverage
)
print("Open a market buy at", actualPrice)
# -- Create a market stop loss -3% --
# stopLoss = ftx.place_market_stop_loss(
# p,
# 'buy',
# quantityMax,
# actualPrice + 0.03 * actualPrice,
# leverage
# )
# print("Place a Stop Loss at", actualPrice + 0.03 * actualPrice)
elif openShortCondition(df.iloc[-2]):
# -- Cancel all order (stop loss) --
a=ftx.cancel_all_open_order(symbol)
print(a)
# -- Define the quantity max of token from your usd balance --
quantityMax = float(usdAmount) / actualPrice
# -- Create a market order Long --
shortOrder = ftx.place_market_order(
symbol,
'sell',
quantityMax,
leverage
)
print("Open a market SHORT at", actualPrice)
# -- Create a market stop loss -3% --
# stopLoss = ftx.place_market_stop_loss(
# p,
# 'buy',
# quantityMax,
# actualPrice + 0.03 * actualPrice,
# leverage
# )
# print("Place a Stop Loss at", actualPrice + 0.03 * actualPrice)
else:
print("No opportunity to take")
Vérifiez avec des print en comparant sur Windows et Linux que la valeur de symbol est identique, puis si truePositions l'est aussi.
Si ce n'est pas le cas, c'est de ce côté qu'il faudra comprendre pourquoi ces valeurs diffèrent.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Vérifiez avec des print en comparant sur Windows et Linux que la valeur de symbol est identique, puis si truePositions l'est aussi.
Si ce n'est pas le cas, c'est de ce côté qu'il faudra comprendre pourquoi ces valeurs diffèrent.
Merci de m'avoir répondu !
j'ai regardé est, ce sont les valeurs de truePosition qui sont différentes, ce que je ne comprends pas, c'est que c'est exactement le même code donc trouver une erreur alors que l'un marche et pas l'autre ça me tord un peu l'esprit.
Votre problème peut se trouver possiblement sur cette ligne,
positions = self._session.fetchPositions(symbol)
si de Windows à Linux cette liste change, il faudra voir ce qui se passe plus précisément dans la méthode fetchPositions
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Votre problème peut se trouver possiblement sur cette ligne,
positions = self._session.fetchPositions(symbol)
si de Windows à Linux cette liste change, il faudra voir ce qui se passe plus précisément dans la méthode fetchPositions
c'est bien le problème en gros dans mon code sur le pc elle prend bien la position du token que je veux alors que sur linux elle prend tous les tokens qui possède une position alors que je veux juste un token.
Mais je ne comprends toujours pas pourquoi ce n'est pas pareil entre les deux réponses des deux codes ...
alors que quand je print(symbol) il me donne le bon token que je cherche
N'ayant pas accès à cette méthode, difficile d'aider plus. Si vous avez une documentation sur cette méthode, regardez à nouveau si elle n'est pas utilisable pour un seul OS particulier. Mais là, je suis coincé selon ce que vous m'avez donné comme information.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
N'ayant pas accès à cette méthode, difficile d'aider plus. Si vous avez une documentation sur cette méthode, regardez à nouveau si elle n'est pas utilisable pour un seul OS particulier. Mais là, je suis coincé selon ce que vous m'avez donné comme information.
la méthode sur mon pc renvoie la valeur du token par contre sur linux cela renvoie la valeur de tous les token et je ne comprends pas pourquoi cela change ...j'ai regardé sur google et aucune indication a ce niveau-là. le pire c'est que cela marcher avant ....
la méthode sur mon pc renvoie la valeur du token par contre sur linux cela renvoie la valeur de tous les token et je ne comprends pas pourquoi cela change
Ce qui est sympa avec Python, c'est qu'on peut toujours regarder le source de la fonction pour voir ce qui est différent... et probablement conclure que ce n'est pas la même version de la bibliothèque (ou de ses dépendances) qui sont utilisées;
la méthode sur mon pc renvoie la valeur du token par contre sur linux cela renvoie la valeur de tous les token et je ne comprends pas pourquoi cela change
Ce qui est sympa avec Python, c'est qu'on peut toujours regarder le source de la fonction pour voir ce qui est différent... et probablement conclure que ce n'est pas la même version de la bibliothèque (ou de ses dépendances) qui sont utilisées;
Merci de votre réponse.
Je n'arrive pas à mettre la version python3.10.5 sur le serveur ubuntu ... Et aussi comment je fais pour voir les bibliothèques que j'ai installé niveau version ??
Je n'arrive pas à mettre la version python3.10.5 sur le serveur ubuntu ... Et aussi comment je fais pour voir les bibliothèques que j'ai installé niveau version ??
Déjà commencez par comparer les codes...et ce n'est pas Python qui est en défaut.
Pour le reste, "voir" quelles sont les versions installées dépend de comment vous avez fait ça. Si c'est avec pip, la commande list suffit. Avec d'autres gestionnaires de packages, il faut voir... mais si c'est vous qui avez installé ça, vous devriez l'avoir noté quelque part (car c'est important de le savoir quand on découvre des soucis).
Je n'arrive pas à mettre la version python3.10.5 sur le serveur ubuntu ... Et aussi comment je fais pour voir les bibliothèques que j'ai installé niveau version ??
Déjà commencez par comparer les codes...et ce n'est pas Python qui est en défaut.
Pour le reste, "voir" quelles sont les versions installées dépend de comment vous avez fait ça. Si c'est avec pip, la commande list suffit. Avec d'autres gestionnaires de packages, il faut voir... mais si c'est vous qui avez installé ça, vous devriez l'avoir noté quelque part (car c'est important de le savoir quand on découvre des soucis).
J'ai regardé les versions est c'est la version de CCXT qui est différentes par rapport à celle sur ubuntu j'ai la dernière sur pc par contre j'ai essayer d'installer la dernière version sur ubuntu mais la version reste la meme c'est vraiment bizarre.
Concernant le code c'est exactement le même donc je pense que c'est la bibliothèque ccxt
Concernant le code c'est exactement le même donc je pense que c'est la bibliothèque ccxt
Je ne parle pas de votre code mais de celui de la (ou des) bibliothèques appelées.
Différentes valeurs code PC code sur amazon
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)