#python #pandas
updated Привет! Помогите чайнику :) В процессе освоения Python и Pandas, столкнулся с проблемой применения к Series своей функции. Пытаюсь сделать функцию, которая будет перебирать значения заранее заданного набора чисел в Series и, в случае соответствия одному из нескольких критериев, осуществлять операцию с числом и вносить его в новый Series, иначе переходить к следующему числу. Попытался на своем понимании построить следующую функцию, но она не работает (Jupyter просто уходит в бесконечные раздумия): def trail_stop(high, low, close): for row in close: i = -1 run = True high.s = high.shift(i) low.s = low.shift(i) trail = (close + 0.0002) stop_loss = (close - 0.0002) while run == True: if high.s[0] > trail and low.s[0] < stop_loss: stop_loss = trail trail = trail + 0.0002 i = i - 1 elif low.s[0] > stop_loss: return stop_loss run = False elif high.s[0] < trail and low.s[0] < stop_loss: i = i - 1 else: run = False table['trail'] = table.apply(trail_stop(table.High, table.Low, table.Close), axis = 1) То есть при таких исходящих данных (столбцы Close, High, Low) нужно получить на выходе следующее (столбец trail): High Low Close trail 0 1.32396 1.32358 1.32391 1.32371 1 1.32392 1.32365 1.32365 1.32385 2 1.32370 1.32364 1.32369 1.32389 3 1.32378 1.32365 1.32371 1.32391 4 1.32378 1.32360 1.32360 1.32380 5 1.32390 1.32366 1.32370 1.32390 6 1.32384 1.32370 1.32384 1.32364 7 1.32386 1.32355 1.32380 1.32360 8 1.32384 1.32358 1.32379 None 9 1.32389 1.32379 1.32387 None 10 1.32386 1.32379 1.32383 1.32363 11 1.32394 1.32360 1.32387 None 12 1.32389 1.32370 1.32370 1.32390 13 1.32390 1.32370 1.32390 1.32370 14 1.32390 1.32364 1.32387 None 15 1.32382 1.32373 1.32382 None Буду рад любой помощи или совету куда копать. Спасибо
Ответы
Ответ 1
Добрый день. 1) У вас объявление run == True стоит внутри цикла, и тем самым у вас цикл ходит по замкнутому кругу. Попробуйте вынести его в первую строчку функции, над циклом. 2) Не уверен, что верно понимаю всю задачу, но, в качестве другого варианта, попробуйте использовать if вместо while.Ответ 2
в вашем цикле есть ветвь if из которой вы никогда не выйдете, что и происходит при каких-то данных elif high.s[0] < trail and low.s[0] < stop_loss: i = i - 1
Комментариев нет:
Отправить комментарий