В функции Python запишите результат pandas в CSV

#python #pandas #csv #if-statement

#python #pandas #csv #if-оператор

Вопрос:

введите описание изображения здесь Здравствуйте, я пытаюсь написать скрипт, в котором я просматриваю некоторые исторические данные (цены на акции) и вычисляю наклон скользящей линейной регрессии.

У меня есть CSV-файл с ценой закрытия акций AAPL в США с 01-01-2010 — 10-23-2020.

Как вы можете видеть в приведенном ниже коде, я прочитал CSV, создал несколько новых переменных, движущийся линейный наклон и т. Д. И записал эти данные в CSV в виде новых столбцов. PS: ROC — это скорость изменения наклона MLR.

Сейчас я пытаюсь создать функцию, которая возвращает 1,0, -1 (1 = Длинный, 0 = Нет позиции, -1 = Короткий) для каждой даты / цены акции. Я создал приведенную ниже функцию «scorer», но не могу понять, как заставить ее просматривать каждую дату и записывать соответствующее значение в новый столбец в CSV.

Любая помощь будет с благодарностью принята. Заранее спасибо.

 import pandas as pd
import talib as ta
import matplotlib.pyplot as plt

data = pd.read_csv("Copper.csv")
score = 0

mlrs = ta.LINEARREG_SLOPE(data["Close"].values,14)*-1
sma = data.MlrSlope.rolling(14).mean()
roc = data.MlrSlope.rolling(5).mean()

#Create new columns for Roc and SMA. We then Write the new Column data to the CSV file. This should add both the ROCC and SMA Columns. 
data["Rocc"] = roc
data["SMA"] = sma
data.to_csv("copper.csv",index=True)

# The below function looks to check for the SMA amp; MLR Slope being Positive... ***JOSHUA BEFORE FINISHING*** add another parameter that looks at the ROC of the MLR Slope... This would be my "roc" variable. If the change is very negative very quick it could resemble an exit opportunity on the Long Side, while a sharp Up Turn could indicate a Buy Opportunity.  
def scorer(data):
    if(data["sma"] > 0 and data["MlrSlope"] >0 ):
            return 1
        elif (data["sma"] >0 and data["MlrSlope"] <0):
            return 0
        elif(data["sma"] <0 and data["MlrSlope"] >0):
            return 0
        elif (data["sma"] <0 and data["MlrSlope"] <0):
            return -1
  

Комментарии:

1. Привет Jstern15. Можете ли вы привести пример фрейма данных, с которым вы работаете? Является ли индекс самой датой?

2. Поскольку речь идет о scorer том, что нам действительно не нужен остальной код. Вы уже сбросили «copper.csv», как насчет публикации урезанного снимка только соответствующих столбцов и нескольких строк? Затем обрежьте свой пример для чтения и обработки этого фрейма данных.

3. Только что добавил в исходное сообщение по ссылке. Кажется, мой фрейм данных индексируется по номеру. Т. Е.: 0,1,2,3.

Ответ №1:

Созданная вами функция проверяет полные столбцы фрейма данных вместо значения для заданной даты. Кроме того, операторы if and elif были неправильно расставлены.

 def scorer(data, i):
    if(data.loc[i,"sma"] > 0 and data.loc[i,"MlrSlope"] >0 ):
        return 1
    elif (data.loc[i,"sma"] >0 and data.loc[i,"MlrSlope"] <0):
        return 0
    elif(data.loc[i,"sma"] <0 and data.loc[i,"MlrSlope"] >0):
        return 0
    elif (data.loc[i,"sma"] <0 and data.loc[i,"MlrSlope"] <0):
        return -1
  

Приведенная выше функция принимает 2 входных данных: фрейм данных, с которым вы работаете, и заданное значение индекса. Я полагаю, что следующим шагом будет создание нового столбца со значениями стратегии для каждой даты, поэтому приведенный ниже код должен выполнить эту работу:

 for i in data.index:
    data.loc[i, 'strategy'] = scorer(data,i)
  

Пожалуйста, дайте мне знать, работает ли это, поскольку я не смог протестировать его в реальном фрейме данных

Комментарии:

1. Приятель, ты легенда. Это сработало отлично. Извините, что спрашиваю, но я хочу убедиться, что понимаю все происходящее, чтобы не задавать подобный вопрос в будущем. Правильно ли я понимаю: средство оценки функций теперь просматривает данные на месте i. Если данные, расположенные в местоположении i столбцов SMA, больше нуля, а данные, расположенные в месте i столбца MLRslope, вернут 1 … тогда он просматривает остальные операторы. Я уверен, что понял вышесказанное. Еще раз большое вам спасибо и хорошего вечера впереди.