”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 交易系统组件

交易系统组件

发布于2024-08-01
浏览:234

Trading System Components

在上一篇文章中,我讨论了开发交易软件的最佳实践,例如使用事件、数据存储或单独的配置。这次,让我们深入探讨战略部分,特别是如何从架构的角度有效地组织它。

策略模块

最简单的方法是假设系统的这部分接收输入数据(例如价格变化)并生成事件(信号)。所有逻辑都可以封装在该模块内。这是一个例子:

def run(self, event):
    signal = self.calc_rsi(event)
    if signal != 'FLAT':
        self.create_event(event, signal)

在此示例中,我们计算 RSI 并根据它生成“买入”或“卖出”等事件。这是一个基本的说明,但概念很清楚。该信号可能包括所需的买入/卖出价格。当然,真正的交易算法更复杂,但您已经知道了!

投资组合模块

将所有余额或未平仓头寸数据收集在一个地方是有益的。这样,您就可以知道自己持有的美元或比特币总金额。这些知识对于在系统生成信号时确定订单大小至关重要。

def run(self, event):
    # Calculate USD values
    # Calculate targets
    # Check targets
    # Generate orders

此伪代码概述了以下步骤:

  • 计算美元总余额
  • 根据策略确定投资组合目标
  • 检查当前余额是否达到目标
  • 如果存在差异,则生成必要尺寸的订单

您获取所有余额数据、信号,验证仓位是否与所需的一致,如果不一致则生成订单。

风险管理模块

该模块与投资组合模块密切相关。有时,风险管理逻辑可以直接在其中实施,特别是当您管理少量资金并且刚刚开始时。对于大公司来说,这可能是最复杂的系统元素,每个公司都定义了其精确的算法。以下是可以在风险管理中解决的一些任务:

  • 检查仓位之间的相关性以避免100%多头或空头
  • 验证一个位置的最大尺寸
  • 如果损失达到一定百分比,则停止整个系统
  • 在数据流故障或其他组件问题时停止系统

您在市场上的时间越长,交易算法的这一部分就变得越重要。

执行模块

在获得所有价格和余额数据、生成信号、计算最佳投资组合规模并考虑所有可能的风险后,没有理由不向交易所发送订单。这可能看起来是最简单的部分,除非您要跨多个交易所实现订单路由。通常,您会正确格式化订单并将其发送到您交易的交易所。

我们讨论了四个模块的功能,每个模块在 90% 的交易算法中都有用。构建您的代码,选择一个好的架构,维护和更新您的交易系统将变得不那么痛苦。

完整的代码将作为 aspis.finance 的开源交易算法提供。它将包括一些简单的交易策略,但关键功能是能够通过 Aspis 智能合约创建存储、吸引投资者资金并确保透明的利润分享。您可以制定您的策略,将其连接到 Aspis,您的算法将在 DEX 上进行交易,投资者和管理者(您)将通过智能合约赚取利润。敬请关注!

版本声明 本文转载于:https://dev.to/jungle_sven/trading-system-components-5f0b?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-21
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. 在GO中实现这一目标的惯用方法是使用fmt.spr...
    编程 发布于2025-07-21
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-07-21
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_rename() runkit_function_redefine() //重新定义'this'以返回“新和改...
    编程 发布于2025-07-21
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当需要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考...
    编程 发布于2025-07-21
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-07-21
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-07-21
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-07-21
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,以便更快地搜索这些前缀。理解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-21
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-07-21
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-07-21
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-07-21
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, attributeError:SomeClass实...
    编程 发布于2025-07-21
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-07-21
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-07-21

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3