есть ли способ сделать значение неотрицательным в фрейме данных - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в программировании и использую python pandas, чтобы попрактиковаться в создании торгового бота al go. Это мой код.

for date in BTCtest.index:
  if BTCtest.loc[date,'Shares'] == 0:
    BTCtest.loc[date,'Shares'] = max(0,-5)
  if BTCtest.loc[date, 'MA10'] > BTCtest.loc[date, 'MA50']:
    BTCtest.loc[date, 'Shares'] = 1
  elif BTCtest.loc[date, 'MA10'] < BTCtest.loc[date, 'MA50']:
    BTCtest.loc[date, 'Shares'] = -1

BTCtest['Position'] = BTCtest['Shares'].cumsum()
BTCtest['Close1'] = BTCtest['Close'].shift(-1)
BTCtest['Profit'] = [BTCtest.loc[date, 'Close1'] - BTCtest.loc[date, 'Close'] if BTCtest.loc[date, 'Shares']==1 else 0 for date in BTCtest.index]
BTCtest['Profit'].plot()
print (BTCtest)

plt.axhline(y=0, color='red')

Это мой код, и я пытаюсь не добавлять акции, когда позиция равна 0. Я пробовал

if BTCtest.loc[date,'Shares'] == 0:
    BTCtest.loc[date,'Shares'] = 0
if BTCtest.loc[date,'Shares'] == 0:
    max(BTCtest.loc[date,'Shares'],-1)

Ниже приведен результат пока. введите здесь описание изображения Я не хочу, чтобы моя позиция go была ниже 0.

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Я не понимаю ваш код, но я понимаю ваш заголовок.

Чтобы преобразовать отрицательные значения в положительные, мы можем умножить их на «-1», если оно меньше 0. Итак, напишите

numberr=int(input("Enter a number: "))
if numberr<0:
    numberr*=-1
print(numberr)

Надеюсь, это поможет.

0 голосов
/ 07 мая 2020

Вы должны использовать функцию .apply вместо итерации по индексу. Это действительно упростит ваш код, и это лучшая практика.

Кроме того, если вы хотите работать только без нулевых строк, сделайте следующее:

BTCtest[BTCtest['Position'] == 0].apply(myfunction, axis=1)
...