问题描述
对于python和编码仍是新手,这次冒险仅约6周。我开始了一个金融项目,试图根据当前的市场表现来找出投资组合中应使用现金的百分比以及应投入的资金。尚不清楚这项研究是否有任何意义,但它有助于您紧扣每一步并学习新事物。
对于任何有兴趣的人,这是google合作的Jupiter笔记本 https://github.com/Jakub-MFP/My_FIRE_Project/blob/master/portfolio_management/cashposition_backtest.ipynb
在第4步中,我试图运行sorta组合仿真。我一直在阅读https://docs.python.org/3/library/itertools.html,但在我需要入门的地方有些不知所措。只是寻找一些指导,例如我应该研究的术语或内容,以解决这个特定问题。
还看了看,叫做tpot的东西对组合学有好处吗?
组合问题
当前,在第3步中,我为市场中的各种下降进行了预定义的循环。看起来像这样
if (current_market_status == 0): # all time high record
current_cash_required_equity = 0.3
elif (current_market_status < -0.05): #less than 5%
current_cash_required_equity = 0.25
elif (current_market_status < -0.10): #less than 10%
current_cash_required_equity = 0.20
elif (current_market_status < -0.15): #less than 15%
current_cash_required_equity = 0.15
elif (current_market_status < -0.20): #less than 20%
current_cash_required_equity = 0.10
elif (current_market_status < -0.25): #less than 25%
current_cash_required_equity = 0.05
elif (current_market_status < -0.30): #less than 30%
current_cash_required_equity = 0
现在,我想尝试的是将0.50 and -0.50
之间的市场状态每增加0.01
的每种组合。对于每种市场状态,尝试在0.50 and 0
之间进行现金交易。
我应该设置一个限制,使其仅尝试使用5 elif
设置吗?还是有办法做更多的组合方式?
我为此设置了选项
options_market_status = [0.50,0.49,0.48,0.47,0.46,0.45,0.44,0.43,0.42,0.41,0.40,0.39,0.38,0.37,0.36,0.35,0.34,0.33,0.32,0.31,0.30,0.29,0.28,0.27,0.26,0.25,0.24,0.23,0.22,0.21,0.20,0.19,0.18,0.17,0.16,0.15,0.14,0.13,0.12,0.11,0.10,0.09,0.08,0.07,0.06,0.05,0.04,0.03,0.02,0.01,-0.50,-0.49,-0.48,-0.47,-0.46,-0.45,-0.44,-0.43,-0.42,-0.41,-0.40,-0.39,-0.38,-0.37,-0.36,-0.35,-0.34,-0.33,-0.32,-0.31,-0.30,-0.29,-0.28,-0.27,-0.26,-0.25,-0.24,-0.23,-0.22,-0.21,-0.20,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01
]
options_cash_req = [0.50,0
]
所以组合规则就像
如果市场状态为0,则我们需要50%的现金。然后下降了5%,现在我们需要40%的现金。然后它又下降了5%,下降到-10%,我们只能需要40%到0%之间的现金。如果市场下跌只是为了保持不变或下跌,我们就无法增加所需的现金。这个想法是,市场越打折,我们应该保留的现金就越少。因此,我们应该在市场越便宜的情况下进行更多的投资,而市场越走越高,就应该进行较少的投资。整个模拟过程从10,000个开始,每月增加1,000个投资组合。
在此先感谢所有花时间阅读这篇文章的人,并发布了一些文档或建议性文字的链接,以介绍我如何学习如何解决这一问题。
解决方法
我不明白这个问题,我想您假设这里熟悉一些概念。如果您可以更简单,简短地表达您的问题,那将对我有帮助。再一次,这可能只是我的无能。
根据您从帖子中所了解的内容,我将尝试给您2美分。
首先,我想指出,初始化列表的方式不是最佳的。 Numpy具有两个非常重要的功能:
-
np.linspace:https://numpy.org/doc/stable/reference/generated/numpy.linspace.html
-
np.arange:https://numpy.org/doc/stable/reference/generated/numpy.arange.html
例如,您应该使用简单的单线numpy调用:np.arange(0.5,-0.02,-0.01)
来替换options_market_status初始化。
现在,如果我理解您的主要问题,那就是如何在options_market_status
和options_cash_req
上进行迭代,以使options_market_status
中的元素大于或等于{{1} }选项,对不对?
由于它们在您的问题中具有相同的值,因此我将给出一个一般的解决方案。如果给我们一个数组options_cash_req
,并想在一个嵌套循环中对其进行迭代,则一种解决方案可以是:
a
希望我能正确理解您的问题,并且没有解释您已经知道的事情。 祝你好运!