Python:如何将同一元素多次附加到列表中?
我有一个很大的函数,它检查股票市场的信号MACD,当MACD以某种方式交叉时(见下面两行),就会发生Python:如何将同一元素多次附加到列表中?,python,pandas,algorithmic-trading,quantitative-finance,Python,Pandas,Algorithmic Trading,Quantitative Finance,我有一个很大的函数,它检查股票市场的信号MACD,当MACD以某种方式交叉时(见下面两行),就会发生买入,当相反的信号发生时,就会发生卖出。这用于对假设进行回溯测试,以创建用于交易自动化的算法 if (df["macd_signal"][i+1] < df["macd"][i+1]) != (df["macd_signal"][i] < df["macd"][i]): if ((df["
买入
,当相反的信号发生时,就会发生卖出。这用于对假设进行回溯测试,以创建用于交易自动化的算法
if (df["macd_signal"][i+1] < df["macd"][i+1]) != (df["macd_signal"][i] < df["macd"][i]):
if ((df["macd_signal"][i+1] < df["macd"][i+1]),(df["macd_signal"][i] < df["macd"][i])) == (True,False):
现在,使用价格
,将计算变量MACD\u D
、MACD\u信号
和MACD\u历史
,并根据这些变量进行买卖
import pandas as pd
import numpy as np
import talib
DATE = []
NAME = []
PRICE = []
ORDER = []
MACD_D = []
MACD_SIGNAL = []
MACD_HIST = []
BUY_SIGNAL=[]
SELL_SIGNAL=[]
test_buy_price = []
def MACD(index):
for column in index.columns[1:]:
place_holder = index[column]
place_holder = pd.DataFrame(data=place_holder)
stock = place_holder.columns[0]
df = place_holder
buy = 0
sell = 0
df["macd"], df["macd_signal"], df["macd_hist"] = talib.MACD(df[column])
if len(df["macd_signal"]) > len(df["macd"]):
settle = len(df["macd"])
else:
settle = len(df["macd_signal"])
for i in range(settle-1):
date = index["Date"][i]
DATE.append(date)
NAME.append(stock)
PRICE.append(index[column][i])
ORDER.append('buy')
buying_price = []
MACD_D.append(df["macd"][i])
MACD_SIGNAL.append(df["macd_signal"][i])
MACD_HIST.append(df["macd_hist"][i])
if (df["macd_signal"][i+1] < df["macd"][i+1]) != (df["macd_signal"][i] < df["macd"][i]):
if ((df["macd_signal"][i+1] < df["macd"][i+1]),(df["macd_signal"][i] < df["macd"][i])) == (True,False):
buy += 1 #we buy as we have spotted a signal
if sell == 1: #If we previously have sold but make a buy order, sells should be 0
sell -= 1
if buy == 1:
print("buy = 1")
buying_price.append(index[column][i])
else:
sell += 1 #we sell as we have observed a sell signal
if sell == 1:
buying_price.append(index[column][i])
buy -= 1 #as we now have sold, we have no buy orders - until we buy again.
BUY_SIGNAL.append(buy)
SELL_SIGNAL.append(sell)
test_buy_price.append(buying_price)
return print("MACD daily done")
MACD(df)
我们在运行buy_orders\u macd[32:][/code>(前32行是NAN,因为macd使用了一些天数进行计算)时看到的是这样的情况:
DATE PRICE MACD MACD_SIGNAL MACD_HIST BUY_SIGNAL SELL_SIGNAL test_buy_price
32 2020-02-03 33 NaN NaN NaN 1 0 [33]
33 2020-02-04 51 0.994874 0.125223 0.869651 1 0 []
34 2020-02-05 50 1.328418 0.365862 0.962556 1 0 []
35 2020-02-06 47 1.335286 0.559747 0.775539 1 0 []
36 2020-02-07 40 0.767046 0.601207 0.165839 1 0 []
37 2020-02-08 53 1.350139 0.750993 0.599146 1 0 []
38 2020-02-09 57 2.110681 1.022931 1.087750 1 0 []
39 2020-02-10 53 2.363405 1.291026 1.072380 1 0 []
40 2020-02-11 38 1.337894 1.300399 0.037495 0 1 [38]
41 2020-02-12 31 -0.039220 1.032476 -1.071696 0 1 []
42 2020-02-13 20 -1.995202 0.426940 -2.422142 0 1 []
43 2020-02-14 48 -1.271311 0.087290 -1.358601 0 1 []
44 2020-02-15 49 -0.609900 -0.052148 -0.557752 0 1 []
45 2020-02-16 24 -2.079051 -0.457529 -1.621523 0 1 []
46 2020-02-17 26 -3.046859 -0.975395 -2.071464 0 1 []
47 2020-02-18 59 -1.137913 -1.007898 -0.130014 0 1 []
但我期望的结果是:
DATE PRICE MACD MACD_SIGNAL MACD_HIST BUY_SIGNAL SELL_SIGNAL test_buy_price
32 2020-02-03 33 NaN NaN NaN 1 0 33
33 2020-02-04 51 0.994874 0.125223 0.869651 1 0 33
34 2020-02-05 50 1.328418 0.365862 0.962556 1 0 33
35 2020-02-06 47 1.335286 0.559747 0.775539 1 0 33
36 2020-02-07 40 0.767046 0.601207 0.165839 1 0 33
37 2020-02-08 53 1.350139 0.750993 0.599146 1 0 33
38 2020-02-09 57 2.110681 1.022931 1.087750 1 0 33
39 2020-02-10 53 2.363405 1.291026 1.072380 1 0 33
40 2020-02-11 38 1.337894 1.300399 0.037495 0 1 38
41 2020-02-12 31 -0.039220 1.032476 -1.071696 0 1 38
42 2020-02-13 20 -1.995202 0.426940 -2.422142 0 1 38
43 2020-02-14 48 -1.271311 0.087290 -1.358601 0 1 38
44 2020-02-15 49 -0.609900 -0.052148 -0.557752 0 1 38
45 2020-02-16 24 -2.079051 -0.457529 -1.621523 0 1 38
46 2020-02-17 26 -3.046859 -0.975395 -2.071464 0 1 38
47 2020-02-18 59 -1.137913 -1.007898 -0.130014 0 1 38
48 2020-02-19 32 -1.783178 -1.162954 -0.620223 1 0 32
49 2020-02-20 58 -0.194332 -0.969230 0.774898 1 0 32
50 2020-02-21 56 0.893161 -0.596752 1.489912 1 0 32
51 2020-02-22 47 1.017057 -0.273990 1.291047 1 0 32
52 2020-02-23 45 0.942993 -0.030593 0.973586 1 0 32
如何在函数内部实现这一点
编辑:
这必须在函数内部完成,因为我使用它计算测试购买价格
和价格
之间的差异。稍后,我将使用它插入一个止损点-5%,这意味着当差额
达到-5%时卖出,这意味着我们在买卖中损失了钱,以减少损失
编辑2:
通过使用buying\u price.append(price[i-1])
我可以让它添加一次test\u buy\u price,但最多只能添加一次:(
DATE PRICE MACD MACD_SIGNAL MACD_HIST BUY_SIGNAL SELL_SIGNAL test_buy_price
32 2020-02-03 33 NaN NaN NaN 1 0 [33]
33 2020-02-04 51 0.994874 0.125223 0.869651 1 0 []
34 2020-02-05 50 1.328418 0.365862 0.962556 1 0 []
35 2020-02-06 47 1.335286 0.559747 0.775539 1 0 []
36 2020-02-07 40 0.767046 0.601207 0.165839 1 0 []
37 2020-02-08 53 1.350139 0.750993 0.599146 1 0 []
38 2020-02-09 57 2.110681 1.022931 1.087750 1 0 []
39 2020-02-10 53 2.363405 1.291026 1.072380 1 0 []
40 2020-02-11 38 1.337894 1.300399 0.037495 0 1 [38]
41 2020-02-12 31 -0.039220 1.032476 -1.071696 0 1 []
42 2020-02-13 20 -1.995202 0.426940 -2.422142 0 1 []
43 2020-02-14 48 -1.271311 0.087290 -1.358601 0 1 []
44 2020-02-15 49 -0.609900 -0.052148 -0.557752 0 1 []
45 2020-02-16 24 -2.079051 -0.457529 -1.621523 0 1 []
46 2020-02-17 26 -3.046859 -0.975395 -2.071464 0 1 []
47 2020-02-18 59 -1.137913 -1.007898 -0.130014 0 1 []
DATE PRICE MACD MACD_SIGNAL MACD_HIST BUY_SIGNAL SELL_SIGNAL test_buy_price
32 2020-02-03 33 NaN NaN NaN 1 0 33
33 2020-02-04 51 0.994874 0.125223 0.869651 1 0 33
34 2020-02-05 50 1.328418 0.365862 0.962556 1 0 33
35 2020-02-06 47 1.335286 0.559747 0.775539 1 0 33
36 2020-02-07 40 0.767046 0.601207 0.165839 1 0 33
37 2020-02-08 53 1.350139 0.750993 0.599146 1 0 33
38 2020-02-09 57 2.110681 1.022931 1.087750 1 0 33
39 2020-02-10 53 2.363405 1.291026 1.072380 1 0 33
40 2020-02-11 38 1.337894 1.300399 0.037495 0 1 38
41 2020-02-12 31 -0.039220 1.032476 -1.071696 0 1 38
42 2020-02-13 20 -1.995202 0.426940 -2.422142 0 1 38
43 2020-02-14 48 -1.271311 0.087290 -1.358601 0 1 38
44 2020-02-15 49 -0.609900 -0.052148 -0.557752 0 1 38
45 2020-02-16 24 -2.079051 -0.457529 -1.621523 0 1 38
46 2020-02-17 26 -3.046859 -0.975395 -2.071464 0 1 38
47 2020-02-18 59 -1.137913 -1.007898 -0.130014 0 1 38
48 2020-02-19 32 -1.783178 -1.162954 -0.620223 1 0 32
49 2020-02-20 58 -0.194332 -0.969230 0.774898 1 0 32
50 2020-02-21 56 0.893161 -0.596752 1.489912 1 0 32
51 2020-02-22 47 1.017057 -0.273990 1.291047 1 0 32
52 2020-02-23 45 0.942993 -0.030593 0.973586 1 0 32