【发布时间】:2020-02-23 07:16:05
【问题描述】:
我有一个包含每月股价的 df。我希望找到最佳的买入价和卖出价以最大化收益(收入 - 成本)。从研究来看,Scipy Optimize 似乎是最好的工具,但是我看到的所有示例都没有显示它与数据框一起使用。
以前的question 涵盖了这一点。但我无法让它为我工作,因为我的买卖数量会根据价格而变化。这意味着我需要重新计算 df 字段。
任何帮助将不胜感激!
import pandas as pd
import numpy as np
import math
import datetime
from scipy.optimize import minimize
df = pd.DataFrame({
'Time': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
'Price': [44, 100, 40, 110, 77, 109, 65, 93, 89, 73]})
# Create Empty Columns
df[['Qty', 'Buy', 'Sell', 'Cost', 'Rev']] = pd.DataFrame([[0.00, 0.00, 0.00, 0.00, 0.00]], index=df.index)
# Initial Values
buy_price = 50
sell_price = 100
# Set Values at Time 0
df.at[0, 'Qty'] = 0
df.at[0, 'Buy'] = np.where(df.at[0, 'Price'] < buy_price, min(30 - df.at[0, 'Qty'], 10), 0)
df.at[0, 'Sell'] = np.where(df.at[0, 'Price'] > sell_price, min(df.at[0, 'Qty'], 10), 0)
df.at[0, 'Cost'] = df.at[0, 'Buy'] * df.at[0, 'Price']
df.at[0, 'Rev'] = df.at[0, 'Sell'] * df.at[0, 'Price']
# Set Remaining Values
for t in range(1, len(df)):
df.at[t, 'Qty'] = df.at[t-1, 'Qty'] + df.at[t-1, 'Buy'] - df.at[t-1, 'Sell']
df.at[t, 'Buy'] = np.where(df.at[t, 'Price'] < buy_price, min(30 - df.at[t, 'Qty'], 10), 0)
df.at[t, 'Sell'] = np.where(df.at[t, 'Price'] > sell_price, min(df.at[t, 'Qty'], 10), 0)
df.at[t, 'Cost'] = df.at[t, 'Buy'] * df.at[t, 'Price']
df.at[t, 'Rev'] = df.at[t, 'Sell'] * df.at[t, 'Price']
【问题讨论】:
-
for循环可以做到
-
嗨@WeNYoBen,感谢您的回复。你能详细说明一下吗?我不知道如何合并一个 for 循环,我是否应该首先创建一个函数来向我的 df 添加字段(数量、购买、销售、成本、修订)并返回 -1 *(收入 - 成本)。然后在我的 scipy 最小化优化中使用它。
标签: python pandas scipy scipy-optimize