我正在尝试用Python编写一个算法,该算法基于可用数据对策略进行回溯测试。
1.从 x 美元金额开始
1.如果满足 condition_1,则buy x/unit_price. unit_price是股票的交易价格。
1.如果满足 condition_2,则sell unitsunit_price*. Units是在步骤2中购买的总单位数。
现在,我希望它交替为买-卖-买-卖...在这个顺序。
这是基本的想法:
| 日期|标价|更改百分比|
| - -|- -|- -|
| 2021年1月1日|一千六百|百分之一点五。|
| 2021年2月1日|小行星1680|下跌1.7%。|
下面是实际的 Dataframe :
DataFrame
到目前为止,我已经尝试定义了两个函数buy和sell,并将它们合并到for循环中。
第一个
我希望它在第一个示例中执行购买操作,然后将单位数设置为购买的单位数,接下来它将出售并将美元值设置为售出单位总数的美元值,然后使用新的美元金额购买,依此类推。
在本练习结束时,我希望能够看到总美元价值或购买的单位总数。
我得到的却是这样一个结果:
输入:
dollars
输出量:
Date
2021-11-30 0.0
2021-12-01 0.0
2021-12-02 0.0
2021-12-03 0.0
2021-12-04 0.0
...
2022-11-25 0.0
2022-11-26 0.0
2022-11-27 0.0
2022-11-28 0.0
2022-11-29 0.0
Name: ETH-Close, Length: 365, dtype: float64
输入:
units
输出量:
[100]:
Date
2021-11-30 0.0
2021-12-01 0.0
2021-12-02 0.0
2021-12-03 0.0
2021-12-04 0.0
...
2022-11-25 0.0
2022-11-26 0.0
2022-11-27 0.0
2022-11-28 0.0
2022-11-29 0.0
Name: ETH-Close, Length: 365, dtype: float64
我做错了什么?希望有人能帮忙。如果有些事情是显而易见的,对不起。我是新来的,试图了解这一切是如何工作的。
1条答案
按热度按时间cidc1ykv1#
不需要全局变量。美元、单位位于顶部,因此可以访问它们。您正在向函数传递一列:df ['ETH-Close'],但您需要一行。系统将循环遍历每一行。所选行上的商品价格和该行的整数索引将传递给函数。
为了访问特定值,使用显式索引loc,其中索引在左边,列名在右边。
还使用了BUY、SELL开关(这样做是为了避免出现连续的购买或销售。也就是说,buy等待卖出信号,sold等待购买信号)。在每个事务处理上,都会打印行索引、信号类型、单位、unit_price、美元。
仔细检查一下这是你需要的吗?