#python-3.x #pandas #dataframe #resampling
#python-3.x #панды #фрейм данных #повторная выборка
Вопрос:
Недавно я участвовал в тестировании, в ходе которого меня попросили создать программу проверки для Спецификации. Вопрос заключался в следующем :
Build a Screener on the data sheet attached.
The strategy workflow is as follows:-
• Convert 1 minute time frame data into 15 minutes
• If low of candle is less than previous low we enter short position, with 2 exit criteria’s
o Exit at end of day
o Exit if the high of previous candle is broken
У меня возникли проблемы с повторной выборкой данных.
Я новичок, пожалуйста, помогите мне!
Комментарии:
1. Ну, вы могли бы создать функцию для преобразования 1-минутного временного интервала в 15-минутный. Вы могли бы применить эту функцию к каждой строке, используя
apply
метод. Тогда вы могли бы просто обойти фрейм данных по строкам и решить все остальные случаи.
Ответ №1:
Чтобы выполнить повторную выборку, вам нужно сначала убедиться, что ваш фрейм данных имеет индекс типа DateTimeIndex
. В вашем собственном случае вам нужно уменьшить выборку (то есть снизить частоту), после чего вам нужно объединить значения по новой частоте дискретизации (15 минут в вашем случае). Вот рабочий код.
#read data as csv
df = pd.read_csv('data.csv',index_col = 'Time')
#convert df index to DataTimeIndex
df.index = pd.to_datetime(df.index)
#downsample and aggregate
df.resample('15T').sum()
Результат:
Open High Low Close Volume
Time
2020-08-22 09:15:00 67651.75 68489.75 66555.80 67449.95 20526750
2020-08-22 09:30:00 66925.60 67568.40 66227.60 66917.05 13935600
2020-08-22 09:45:00 66661.35 67223.20 66065.30 66685.30 11484225
2020-08-22 10:00:00 65943.20 66399.60 65396.70 65902.50 8253600
2020-08-22 10:15:00 66893.50 67397.70 66409.60 66904.75 8384775
2020-08-22 10:30:00 66306.30 66784.25 65789.65 66274.60 7927350
2020-08-22 10:45:00 66410.70 66873.80 65964.20 66424.20 7811550
2020-08-22 11:00:00 65391.45 65818.80 64933.00 65408.95 7302525
2020-08-22 11:15:00 62587.45 63031.15 62059.35 62522.10 6503775
2020-08-22 11:30:00 62369.40 62891.20 61854.70 62387.40 7074825
2020-08-22 11:45:00 63602.35 64068.20 63132.15 63613.05 7082175
2020-08-22 12:00:00 63347.25 63814.55 62903.80 63342.15 6986250
2020-08-22 12:15:00 62588.20 63128.45 62165.75 62655.05 7644375
2020-08-22 12:30:00 64288.35 64769.35 63759.40 64241.20 7598400
2020-08-22 12:45:00 61430.25 61916.45 60898.85 61379.00 8495775
2020-08-22 13:00:00 61137.65 61740.60 60630.45 61213.70 10142250
2020-08-22 13:15:00 61139.60 61723.20 60493.55 61092.30 9513900
2020-08-22 13:30:00 62049.05 62659.50 61437.50 62044.85 10065750
2020-08-22 13:45:00 64004.35 64515.00 63334.60 63936.95 7864125
2020-08-22 14:00:00 63347.80 63923.20 62694.10 63284.55 9224025
2020-08-22 14:15:00 61649.90 62177.70 60951.70 61551.35 8542350
2020-08-22 14:30:00 61993.75 62647.80 61423.70 62058.45 9870600
2020-08-22 14:45:00 62134.75 62697.90 61474.25 62062.55 10302600
2020-08-22 15:00:00 62679.55 63249.90 62063.75 62676.35 12184050
2020-08-22 15:15:00 62727.55 63091.80 62329.15 62717.75 11147250
Комментарии:
1. Большое спасибо, с вашей помощью я закончил с повторной выборкой данных, а также очистил данные. Но я все еще застрял, я не знаю, как действовать дальше. Я не в состоянии понять эту концепцию. Если возможно, пожалуйста, помогите мне, как мне приступить к части решения.