网络逻辑
Model.py
class Trade(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
status = models.CharField(max_length=2, choices=STATUS_CHOICES, default='cl')
type = models.CharField(max_length=5, choices=TYPE_CHOICES, default=LONG)
broker = models.ForeignKey(Broker, on_delete=models.CASCADE, blank=True, null=True)
asset = models.ForeignKey(Asset, default=DEFAULT_ASSET_ID, on_delete=models.CASCADE, null=True)
symbol = models.ForeignKey(Symbol, on_delete=models.CASCADE, blank=True, null=True)
patterns = models.ManyToManyField(Pattern, blank=True)
notes = RichTextUploadingField(blank=True, null=True)
created = models.DateTimeField(editable=False)
modified = models.DateTimeField(editable=False)
associated_portfolios = models.ManyToManyField(Portfolio, blank=True)
image = models.FileField(default='no-image-available-icon.jpg', upload_to=user_directory_path, null=True, blank=True)
class Entry(models.Model):
trade = models.ForeignKey(Trade, on_delete=models.CASCADE)
date = models.DateTimeField(null=True, blank=True, default=datetime.datetime.now)
amount = models.FloatField(null=True)
price = models.FloatField(null=True)
fee = models.FloatField(null=True, blank=True)
entry_type = models.CharField(max_length=5, choices=ENTRY_TYPE_CHOICES, default=ENTRY)
reg_fee = models.FloatField(null=True, blank=True)
transaction_id = models.CharField(max_length=100, null=True, blank=True)示例CSV数据(为了更容易地显示数据,我添加了空格而不是",“)
Date/Time Description Amount Commission RegFee NetCashBalance
07/17/2020 7:42:39 Bought 40 APDN @ 14.56 -582.4 0 0 25,755.84
07/17/2020 7:47:16 Bought 40 APDN @ 14.78 -591.2 0 0 25,164.64
07/17/2020 7:53:36 Bought 20 APDN @ 14.27 -285.4 0 0 24,879.24
07/17/2020 8:04:01 Bought 100 VRNA @ 9.58 -958 0 0 23,921.24
07/17/2020 8:05:01 Bought 20 VRNA @ 9.47 -189.4 0 0 23,731.84
07/17/2020 8:05:27 Sold 21 APDN @ 14.885 312.58 0 0.01 24,044.42
07/17/2020 8:05:27 Sold 79 APDN @ 14.87 1,174.69 0 0.04 25,219.11
07/17/2020 8:06:43 Sold 120 VRNA @ 10.08 1,209.56 0 0.04 26,428.67如果还没有基于代理导出的CSV文件,这将是一个超级混乱的过程,在这个过程中,我们需要删除大量数据,正确匹配它,创建新对象,并基于新创建的对象创建多个新的forieng关键对象。
CSV导入逻辑
为了节省时间,用户只需导入代理提供的交易数据就更好了。这里有一个示例站点 (不是我的项目)也能做到这一点。
1. Create an Entry class object (user may need to manually make csv file for cleaner data import)
2. find Trade object where Status == Open and symbol == symbol
3. if step 2 == None then create a new Trade class & assign status to open
4. Def & set Set Symbol_Share_Count == 0
5. Increment or Decrease Symbol_Share_Count by shares
6. Once Symbol_Share_Count == 0 close the trade
3. if step 2 retuns a Trade object then..
4. Def & set Set Symbol_Share_Count == "# of total open shares"
5. Increment or Decrease Symbol_Share_Count by shares of newly imported transaction
6. Once Symbol_Share_Count == 0 close the trade
7. At this point the new or found Trade object is done and a new Trade object can be created or found based on the next transaction这逻辑有道理吗?有什么严重的问题我忽略了吗?
任何反馈都非常感谢!
发布于 2020-07-19 11:55:12
导入期间有几个逻辑步骤,但是django-import-export提供了可以用来管理相关对象更新的逻辑挂钩。文档列出了所有这些。
例如,如果使用after_save_instance(),则可以在上传对象成功持久性之后进行任何逻辑更改。
如果需要,可以在事务中运行整个导入。
您可能还需要考虑其他一些要点:
您可能需要考虑一个批处理框架来解决上面的一些问题。换句话说,一旦文件被上传,批处理过程将独立于web服务器处理导入。这显然是更多的工作,但将提供一个更健壮的解决方案。
https://stackoverflow.com/questions/62973241
复制相似问题