#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
Комментариев нет:
Отправить комментарий