【问题标题】:Function for tracking trading operations with stock跟踪股票交易操作的功能
【发布时间】:2022-01-24 11:57:07
【问题描述】:

我有带有日期的 df、股票的开盘价、买入和卖出指标。我需要创建一个函数,可以在我的预算范围内计算所有这些操作。

    Date        Open       Buy Sell
0   2019-08-27  36.270000   1   0
1   2019-10-11  31.740000   0   1
2   2020-03-18  28.320000   1   0
3   2020-06-03  41.380001   0   1
4   2020-11-12  61.610001   1   0
5   2020-12-02  69.120003   0   1
6   2021-03-24  64.500000   1   0
7   2021-06-07  67.269997   0   1

因此,如果我在“买入”列中有 1 个,我需要用预算中的所有资金购买股票。在它之后,我需要以 df['Buy'] == 0 的开盘价出售所有东西。 我试图创建这样的,但它是错误的,我不知道如何修复它。

def profit(x):
    budget = 100000
    stocks = 0
    for i in df['Buy_ind']:
        if x == 1:
            budget = budget % df['Open'][i]
            stocks = budget // df['Open'][i]
        if x == 0:
            budget += stocks * df['Open'][i]
    return i
profit()

【问题讨论】:

  • 请向社区提供Minimal, Reproducible Example
  • 为了了解您对预算和库存的期望,请将它们作为列添加到您的数据框中,并逐行显示您希望为它们获得的值。
  • @MarcelloChiuminatto 正如您在我的代码中看到的,预算 = 100000。此外,我只交易一只股票,价格您可以在 df['Open'] 中看到。我想创建一个可以在买卖这只股票后计算我的预算并将其保存在列表中的函数。 stock = 0 表示一开始我没有股票,019-08-27 我买了 100000//31.74 个股票

标签: python dataframe time-series analytics


【解决方案1】:

一个简单的版本,用 excel 交叉验证,但无论如何都要检查。:

import pandas as pd

df_stock = pd.DataFrame({'Date':['8/27/2019','10/11/2019','3/18/2020','6/3/2020','11/12/2020','12/2/2020','3/24/2021','6/7/2021'],
 'Open':[36.27,31.74,28.32,41.380001,61.610001,69.120003,64.5,67.269997,],  
'Buy':[1,0,1,0,1,0,1,0],
'Sell':[0,1,0,1,0,1,0,1],
})


def profit(df, budget):
    stocks = 0
    for idx, r in df.iterrows():
        if r['Buy'] ==1:
            stocks = round(budget//r['Open'],3)
            budget = round(budget%r['Open'] , 3)
            print(f'Buy {stocks} stocks at ', round(r['Open'],3), f'Remaining budget {budget}')

        if r['Sell'] == 1:
            budget = round(stocks*r['Open'] + budget,3)
            stocks = 0
            print('Sold at ', round(r['Open'],3), 'new budget is ', budget)
            
    return budget


print(df_stock)
print('')

profit(df_stock, 10000)

**Output**

[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/XdJWu.png

【讨论】:

  • 谢谢你,伙计
【解决方案2】:
budget = 100000
stocks = 0
for inx, row in df.iterrows():
    if row['Buy'] == 1:   
        stocks = budget // row['Open']
        budget = budget % row['Open']
    if row['Buy'] == 0:
        budget += stocks * row['Open']
display(budget)

答案很简单。我只是不知道如何处理 df: 'for inx, row' 中的每一行 - 很容易解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多