【量化交易】股市舞者:小明的撮合交易之旅

发布时间:2024年01月24日

马西森AES撮合交易系统

在繁华的都市中,小明,一个普通的青年,刚刚赚到了人生的第一桶金——20万。这笔意外的财富,点燃了他对股市的强烈兴趣。他开始如饥似渴地学习金融知识,钻研各种交易策略。
在这里插入图片描述

一天,小明偶然间了解到了马西森AES撮合交易系统。马西森,金融界的传奇人物,他的撮合交易系统被誉为市场最公平、最高效的交易方式。小明被这一系统的精密和高效深深吸引,决定要深入了解撮合交易的原理、费用以及与交易所的关系。
在这里插入图片描述

撮合交易,顾名思义,就是将买家和卖家的订单进行匹配,达成交易。在马西森AES系统中,买卖双方的订单被放入一个公共的池子中,系统会根据价格和时间优先原则进行撮合。这种方式的优点在于公平、透明,且能确保市场的流动性。
小明开始了他的撮合交易学习之旅。他阅读了大量的书籍和资料,还参加了各种线上线下的培训课程。在学习过程中,他不仅了解了撮合交易的基本原理和操作技巧,还掌握了一些高级的交易策略和心理调适方法。
经过一段时间的学习和实践,小明逐渐熟悉了撮合交易的流程和规则。他决定进行第一次尝试。他仔细分析了市场趋势,制定了交易计划,然后提交了订单。虽然第一次尝试并没有获得预期的收益,但小明并不气馁。他认真总结了经验教训,调整了策略,继续前行。
就这样,小明在撮合交易的道路上不断探索和进步。然而,就当他信心满满地制订了一次看似完美的撮合交易计划时,市场却给了他一个沉重的打击。他的交易失败了,损失惨重10万的投入2天内全部蒸发,脸上因这次失败也明显苍老许多。
在这里插入图片描述

这次失败让小明陷入了深深的困惑和自责中。他坐在椅子上,手托着腮,眉头紧锁,一度开始怀疑自己的能力,甚至对撮合交易产生了恐惧。但是,他并没有放弃。他知道,失败是成功之母。他决定重新审视自己的交易策略和心态,找出问题的根源。
在这里插入图片描述
在这个过程中,小明逐渐意识到:交易不仅是一门技术活,更是一场心理战。他开始学习如何控制自己的情绪和欲望,如何面对市场的不确定性。他明白了,要想在股市中立足,不仅需要有扎实的金融知识和高超的交易技巧,更需要有稳健的心态和长远的眼光。
经过一段时间的调整和反思,小明重新站了起来。他不再急于求成,而是更加注重交易的稳健性和可持续性。他开始关注市场的长期趋势和基本面因素,而不是仅仅关注短期的价格波动。
随着时间的推移,小明的交易业绩逐渐回升。他不仅在撮合交易中赚到了更多的钱,更重要的是,他找到了自己的交易之道和人生方向。

以下是撮合中的交易源代码

import time
from collections import deque

class Order:
    def __init__(self, price, amount, is_buy, timestamp=None):
        self.price = price# 订单价格
        self.amount = amount# 订单数量
        self.is_buy = is_buy# 订单类型(True为买单,False为卖单)
        self.timestamp = timestamp or time.time() # 订单时间戳(默认为当前时间)
        
# 定义交易所类
class Exchange:
    def __init__(self):
        self.buy_orders = deque()  # 买单列表,按价格从高到低,时间从早到晚排序
        self.sell_orders = deque()  # 卖单列表,按价格从低到高,时间从早到晚排序
    # 添加订单到交易所
    def add_order(self, order):
        # 判断订单类型,决定与哪种订单进行撮合
        if order.is_buy:
            # 尝试与卖单列表中的订单进行撮合
            while self.sell_orders and order.amount > 0:
                sell_order = self.sell_orders[0]
                # 如果买单价格高于或等于卖单价格,则可以进行撮合
                if sell_order.price <= order.price:
                    deal_amount = min(order.amount, sell_order.amount)  # 计算可撮合数量
                    order.amount -= deal_amount  # 更新买单剩余数量
                    sell_order.amount -= deal_amount  # 更新卖单剩余数量
                    print(f"交易成功!成交价:{sell_order.price},成交量:{deal_amount}")
                    if sell_order.amount == 0:  # 如果卖单数量为零,则从卖单列表中移除
                        self.sell_orders.popleft()
                else:  # 如果买单价格低于卖单价格,则终止撮合
                    break
            # 如果买单还有剩余,则加入买单列表,并保持列表排序
            if order.amount > 0:  
                self._insert_order(self.buy_orders, order)
        else:  # 卖单逻辑与买单相似,但方向相反
            while self.buy_orders and order.amount > 0:
                buy_order = self.buy_orders[0] # 获取买单列表中的第一个订单
                if buy_order.price >= order.price:
                    deal_amount = min(order.amount, buy_order.amount)  # 计算可撮合数量
                    order.amount -= deal_amount
                    buy_order.amount -= deal_amount
                    print(f"交易成功!成交价:{buy_order.price},成交量:{deal_amount}")
                    if buy_order.amount == 0:
                        self.buy_orders.popleft()
                else:
                    break
            if order.amount > 0:  # 如果卖单还有剩余,则加入卖单列表,并保持列表排序
                self._insert_order(self.sell_orders, order)

    def _insert_order(self, order_list, new_order):
        """在保持排序的同时插入新订单"""
        for i, order in enumerate(order_list):
            # 根据订单类型决定插入位置,买单按价格从高到低,卖单按价格从低到高
            if (new_order.is_buy and new_order.price >= order.price) or \
               (not new_order.is_buy and new_order.price <= order.price):
                order_list.insert(i, new_order)
                break   # 由于新订单已插入,后续的订单不需要再比较  
            elif i == len(order_list) - 1:  # 如果新订单价格比列表中所有订单价格都高,则插入到最后
                order_list.append(new_order)    
        else:  # 如果新订单价格比列表中所有订单价格都低,则插入到列表开头
            order_list.appendleft(new_order)# 在列表末尾添加新订单        
            print(f"新订单:{new_order.price}{new_order.amount}{new_order.is_buy}")# 输出新订单信息
            self._print_order_list(order_list)  

    def _print_order_list(self, order_list):
        print(f"订单列表:")
        for order in order_list: # 遍历订单列表中的每个订单
            print(f"{order.price}{order.amount}{order.is_buy}") # 输出每个订单的详细信息(价格、数量、类型)
            print() # 换行使内容更加清晰
            
if __name__ == "__main__":
    exchange = Exchange()
    #
    exchange.add_order(Order(1000000, 8800, True))   # 100元100股买单

小明的故事告诉我们:股市并非赌博场所,而是一个充满机会与挑战的市场。只有不断学习、实践和反思,才能在这个市场中立足并取得成功。而对于那些正在探索股市奥秘的投资者来说,小明的故事也许能提供一些有益的启示和借鉴。把故事中的情节和代码中的注释完美结合,让代码学习过程更有趣味性,更容易让人理解。

文章来源:https://blog.csdn.net/weixin_41704077/article/details/135826290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。