Я играю с действительно красивым кодом @piRSquared, и этот код можно увидеть ниже.Наклонная зависимость - изменение функционального кода
Я добавил еще одно условие if row[col2] == 4000
, и это видно только один раз в дополнительной колонке, которую я добавил. Как и ожидалось, этот дополнительный код имеет функцию, которая дает только одну строку, поскольку условие видно только один раз.
Мой вопрос заключается в том, как изменить код, чтобы получить другую строку после перемещения >= move_size
.
Желаемый результат - две строки. Один, когда row['B'] == 4000
(по мере создания кода), а другой, когда видят движение >= move_size
в Col A
. Я рассматриваю их как запись и выход в трей, поэтому было бы неплохо иметь идентификатор заказа в другом столбце фрейма данных df['C']
согласно желаемому результату, показанному ниже.
код из оригинального поста: функция
#starting python community conventions
import numpy as np
import pandas as pd
# n is number of observations
n = 5000
day = pd.to_datetime(['2013-02-06'])
# irregular seconds spanning 28800 seconds (8 hours)
seconds = np.random.rand(n) * 28800 * pd.Timedelta(1, 's')
# start at 8 am
start = pd.offsets.Hour(8)
# irregular timeseries
tidx = day + start + seconds
tidx = tidx.sort_values()
s = pd.Series(np.random.randn(n), tidx, name='A').cumsum()
s.plot()
Генератор с небольшой модификацией:
def mover_df(df, col,col2, move_size=10):
ref = None
for i, row in df.iterrows():
#added test condition for new col2 signal column
if row[col2] == 4000:
if ref is None or (abs(ref - row.loc[col]) >= move_size):
yield row
ref = row.loc[col]
Генерация данных
df = s.to_frame()
df['B'] = range(0,len(df))
moves_df = pd.concat(mover_df(df, 'A','B', 3), axis=1).T
Выход по току:
A B
2013-02-06 14:30:43.874386317 -50.136432 4000.0
Желаемый результат:
(Значения в перевалы A,B
на втором ряду будет то, что код генерирует, я только что добавили случайные значения, чтобы показать формат я «заинтересован в. Col C
является торговой идентификатор и для каждых двух строк это будет увеличивать +1)
A B C
2013-02-06 14:30:43.874386317 -50.136432 4000.0 1
2013-02-06 14:30:43.874386317 -47.136432 6000.0 1
Я привязывался к этому часу в течение нескольких часов (не помогает детям, которые бегают по дому, теперь школьные каникулы ...) и ценят любую помощь. Было бы фантастически получить информацию от @piRSquared, но высоко ценит, что люди заняты.
Еще раз спасибо @piRSquared Caveat. Очень приятно получать отзывы от профессионала в области финансов, который так хорош с Python! Существуют ли какие-либо подходы, которые я должен исследовать для проведения такого базового тестирования? Легко получить сигналы с помощью np.where и аналогичных фильтров - именно такой тип целевого и стоп-лосс-анализа я считаю более сложным. Я рассматриваю только простые внутридневные стратегии. – ade1e
Обычно, когда я иду по дороге, создавая инструмент для бэктестинга, я задаю много и много вопросов. Трудно предсказать их все впереди (хотя мы стараемся). Я получаю, где вы идете с очень высокого уровня. Но без всяких подробностей, мне нечего добавить. Как всегда, задавайте множество вопросов, когда сталкиваетесь с проблемами. Я постараюсь помочь, когда смогу. – piRSquared