Python:如何将同一元素多次附加到列表中?

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["

我有一个很大的函数,它检查股票市场的信号MACD,当MACD以某种方式交叉时(见下面两行),就会发生
买入
,当相反的信号发生时,就会发生卖出。这用于对假设进行回溯测试,以创建用于交易自动化的算法

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