请大家不要客气,任何意见建议可以在这里评论提出。 被采纳后我们将奖励1G研究环境内存 3个月。 背景与目的 之前我们有了策略回测代码,到实盘要经过熟悉实盘API、写代码、调试代码的环节,大概还需要1-2周的时间才能实盘,有非常多的用户到这一步 会束手无策,甚至放弃! 现在,有了回测代码直接实盘的功能,可以省去这个步骤,让刚入门的朋友也可以直接拿回测代码进行实盘了。很棒!为我们的工程师点赞! 此外还新增了一些接口,方便实盘交易。 不断降低实盘的门槛是我们的目标,如果您有任何好的想法意见请随时留言! 本功能需要重启研究环境才能生效! 策略实盘交易(回测代码1分钟实盘) ?调用方法: research_trade( name, source_code, capital_base=100000, frequency='DAILY', stock_market='STOCK', benchmark=None, trade_api=None, signal_mode=True, dry_run=False, recover_dt=False, ) ?参数说明: name:str,策略名称,会在./persist/下生成一个同名目录,用于存放持久化的策略信息 source_code:str,策略代码,可从策略研究模块中直接复制,代码置于"""..."""中 capital_base: float,初始资金量 如果接入了TradeAPI对象,且 signal_mode=False,那么此参数无意义 frequency: str,策略频率,'DAILY'或'MINUTE' stock_market: str,策略类型,默认'STOCK' benchmark: str,基准指数 trade_api: TradeAPI对象,绑定需要仿真交易的资金账号 如果不传入TradeAPI对象,即 trade_api=None,此时为模拟交易 如果传入TradeAPI对象,此时为仿真交易 signal_mode: bool,(新增)默认为 True signal_mode=True,此时策略实际上运行的时初始资金为capital_base的模拟交易,context、get_orders等方法返回的结果均为模拟交易中计算的数据,与资金账号的数据无关;策略下单在模拟交易撮合成交后,才会通过trade_api下单至柜台 signal_mode=False,此时策略中context、get_orders等方法返回的结果均为从 柜台查询,策略下单也会直接下至柜台 dry_run: bool,试运行,立即返回,默认为 False recover_dt: bool或 str,(新增)是否断点运行,默认为 False recover_dt=False,从当前时点开始执行,不从断定运行 recover_dt=True,从上次策略结束时点开始运行 recover_dt='today',从当日开始运行,此模式下只会补执行 before_trading与 open_auction,handle_bar依旧从当前时间开始执行 recover_dt='yyyyMMdd HH:mm',从指定时间开始运行 ?️ 返回值: RealtimeService类 ?作用: 模拟交易:撮合机制与回测相同 仿真交易:通过仿真柜台撮合,更贴近真实交易环境 ❗注意事项: 策略需在9:00前开启运行,否则在未设置recover_dt的情况下,会跳过before_trading等步骤 初始化TradeAPI时需要指定下单策略order_policy,MarketPolicy为市价下单;LimitPolicy为限价下单。如未指定,由于策略下单时使用均价,可能存在多位小数,最终实盘账户下单的时候可能产生废单 signal_mode=True时,如想在context中获得仿真账号的持仓、资金等数据,可以使用同步函数 sync_trade_api() ?示例: from tick_trade_api import TradeAPI #初始化TradeAPI时需要指定下单策略,MarketPolicy为市价下单;LimitPolicy为限价下单 trade_api=TradeAPI('69271711',order_policy=MarketPolicy) source_code=""" # 股票策略模版 def init(context): pass # 盘前执行 def before_trading(context): pass # 开盘时运行函数 def handle_bar(context, bar_dict): order_id = order('000001.SZ', 100) print(get_orders()) try: cancel_order(order_id) except: print('撤单失败') print(get_open_orders()) print(get_tradelogs()) print(context.portfolio.stock_account) print(context.portfolio.positions) """ rtrade = research_trade( '研究环境策略', source_code, frequency='MINUTE', trade_api=trade_api, signal_mode=False, recover_dt='today' ) trade_api=TradeAPI('69271711',order_policy=MarketPolicy) 中的账号是模拟资金账号或者是实盘资金账号。 其他更新 这次还增加了几个功能 策略框架中增加 : cancel_order_all() 全撤 get_tradelogs()获取当日全部成交订单 get_orders() 获取委托,和get_order()一致,主要时和tradeapi中函数名对齐 tradeapi增加: get_open_orders() 获取当日未成订单 cancel_order_all() 全撤 哪个证券公司使用SUPERMIND资金要求比较少?知道的,告诉一下。 MSGPACKError: could not establish connection DETAIL: could not connect to server: Connection refused Is the server running on host "10.206.0.220" and accepting TCP/IP connections on port 5432? 模拟交易,同一个策略,打开独立模式,就不运行,不开就正常运行。这是什么原因导致的啊,是因为打开后是在研究环境中运行吗,研究环境有独立的api,不和回测的api通用,是这个原因吗? 你以为的“拉升信号”,其实是为你设计的陷阱 你是否经历过这样的场景:紧盯着一只股票,它突然在盘中划出一条完美的直线,强势拉升。你心跳加速,认为这是千载难逢的赚钱信号,于是毫不犹豫地追了进去。然而,你的买入点,精准地成为了该股当日的最高点,随后股价急转直下,你被牢牢套在了高位。 这并非偶然的市场波动,也并非你运气不佳。这很可能是一个利用顶级量化交易工具,为散户“量身定制的套路盘”。 量化收割散户靠的不是运气,是数据霸权和工具优势。 本文将分步拆解这个残酷的剧本,揭示每一步背后冰冷的逻辑和精准的人性陷阱,让你看清这场不对等游戏的真相。 第一步:数据抓取 —— 你的底牌已被看穿 量化交易的猎杀,从信息战开始。第一步,就是通过强大的数据抓取能力,让你的交易心理和行为模式在它们面前一览无余。 量化软件会实时抓取全网的舆情数据,当它发现某个概念(例如“商业航天”)的热度在短时间内暴增时,就会锁定相关的标的。但这只是开始,更可怕的是,通过对历史交易数据、讨论区情绪和行为金融模型的分析,量化程序能精确计算出参与这个热点的散户群体,其“心理止损价位”大概在哪个位置。 例如,在一个教科书级的案例中,系统算出散户的集体心理防线在9.8元。这意味着,在交易开始前,你的底牌已经被对手看得一清二楚。 第二步:虚假申报 —— 制造繁荣的假象 底牌被看穿后,剧本的第二幕——诱敌深入——正式上演。这一步的关键操作发生在开盘前的集合竞价阶段。 量化程序会利用其速度优势,执行“秒挂秒撤单”的策略。具体来说,它们可能在9:15分挂上巨额买单,制造出市场需求旺盛、有大资金抢筹的假象。然而,就在正式撮合前的最后一刻,比如9:20分,这些买单又会被瞬间撤掉。 此举的目的非常明确:制造虚假的繁荣,吸引那些盯着集合竞价寻找机会的跟风盘进场,从而在不耗费自身太多成本的情况下,将开盘价推高,为后续的收割操作铺好舞台。这一系列操作在毫秒间完成,是人力无法企及的速度,也是量化交易的“降维打击”所在。 第三步:融券做空 —— 不公平的工具优势 当股价在不知情的散户的合力推动下,被顶到10.5元这样的高位时,剧本进入了最核心的环节:反向猎杀。 此时,量化机构会动用普通投资者无法使用的工具——融券做空。它们在高位借入股票并立刻砸盘卖出。这便构成了对普通散户的“工具压制”:普通散户只能通过买入做多来赚钱,期望股价上涨;而机构却可以在你把股价推高后,反手做空,从股价的下跌中获利。 这种信息和工具上的绝对不对等,决定了散户从一开始就处于劣势地位。 第四步:低位回补 —— 精准收割,完成闭环 收割的最后一步,是精准地在预定位置完成闭环。当股价在量化程序的高位砸盘下,一路下跌至第一步就算出的散户心理止损位——9.8元时,连锁反应发生了。 这个价位会触发大量散户的恐慌性止损卖单,形成踩踏。而量化程序就在这片恐慌之中,从容地低吸筹码,买回之前在高位卖出的股票,完成了做空交易的回补。 然而,剧本的终章在第二天上演。机构会在此日卖出低位回补的筹码,彻底结清融券,将浮盈变为实利。至此,一个历时两天的精准围猎才算真正完成闭环,而高位接盘的散户,则成了这场游戏的最终牺牲品。 普通人如何应对?识别“机器人互殴”的信号 面对如此强大的对手,普通投资者是否毫无还手之力?并非如此。关键在于识别出这些“机器人”的活动迹象,并主动避开它们的战场。以下是两条来自实战的宝贵建议: · 警惕集合竞价的“大撤单”行为。 如果你发现某只股票在集合竞价阶段有巨额买单挂出,但在最后时刻又神秘消失,导致股价异动,这极有可能是虚假申报的信号,务必提高警惕。 · 避开盘中“直线拉升又直线砸盘”的股票。 这种分时图上走出“心电图”或“直角”形态的股票,往往是不同量化程序之间在进行高频交易博弈,其交易逻辑与基本面或散户情绪无关,参与其中无异于误入机枪阵地。 千万别去接飞刀,那是机器人在互殴,别去当炮灰。 算法时代,散户的新战场在哪里? 从数据抓取、虚假申报,到融券做空、低位回补,这套四步剧本清晰地展示了量化交易如何利用数据和工具优势,对市场情绪和人性弱点进行降维打击。 这提醒我们,在今天的金融市场,单纯依靠技术分析或市场情绪来做决策,可能会让你陷入精心设计的陷阱。这不禁引人深思:在这个由数据和算法主导的金融市场中,作为普通投资者,我们真正的优势又应该是什么? 引言:为什么你看遍了交易秘籍,却依然在亏钱? 在交易的世界里,大多数散户都陷入一个怪圈:他们不断学习技术指标,寻找必胜的交易策略,追逐市场的热点,在恐惧和贪婪中追涨杀跌。然而,一番折腾下来,账户却往往以亏损告终。他们中的许多人,都经历过资产被“腰斩再腰斩”的毁灭性打击,最终黯然离场。他们不禁会问,问题到底出在哪里? 如果成功的关键,并非向外寻找一个完美的“交易模型”,而是向内修炼一种强大的心境,那会是怎样一番景象? 本文将从一位经验丰富的短线交易高手的视角,为你提炼出四个颠覆传统认知的进阶心法。这些心法指出,真正的交易之路始于内心,而非市场。它将告诉你,如何从反复亏损的痛苦中,一步步走向纪律、模式和稳定。 1. 心法一:先练心,后找术——执行力远比交易模型更重要 成为职业操盘手的第一步是什么?学习选股?寻找一个成功的交易模型?答案或许出乎你的意料:都不是。第一步,也是最重要的一步,是锻炼铁一般的“交易纪律和执行力”。 这是一个反直觉但至关重要的基础。因为在真实的交易中,人性的弱点——恐惧、贪婪、犹豫——会轻易摧毁任何精妙的策略。没有执行力,即便给你一个被验证过能够稳定盈利的模型,你也无法贯彻到底。在关键的止损点上,你会犹豫;在应该获利了结时,你会贪婪。最终,模型成了摆设,亏损依旧是常态。交易之路的基石,必须是毫不动摇的执行能力。 交易纪律跟执行力是基础…我给你一个我现在的一个成功的交易模型给你,你没有执行力跟交易纪律,你给你也没用,明白吗? 因此,在寻找任何具体的技巧(术)之前,你必须先修炼内心(心),达到能够像机器一样,毫不犹豫地执行既定规则的境界,无论这个规则在当下看起来多么愚蠢或不合理。这是后续一切进阶的前提。 2. 心法二:用小额真金,在痛苦中锻造——模拟盘毫无意义 那么,如何锻炼这种钢铁般的执行力?方法只有一个:使用一笔你亏得起的小额真实资金(例如2万元),在市场的真实波动中反复实践,并做好“腰斩再腰斩”的心理准备。 这位高手强调,在开始这条路之前,你应该用大部分资金去还清债务。因为背负着利息和压力的资金是“负担”,而不是你的“财富”。通过隔离出一个小额、无压力的账户,你才能真正专注于磨练心性,而不是被巨额的盈亏压力所绑架。 为什么必须用真金白银,而不是毫无压力的模拟盘?关键在于,只有真实的亏损才能带来刻骨铭心的心理磨练。模拟盘的数字波动无法触及你的灵魂,无法让你体验到真正的恐惧和压力。而正是这种真实的痛苦,才能让你最终对买卖决策变得麻木和理性,做到“该割就割,该买就买”,内心毫无波澜。 请记住,这个阶段的核心目标不是为了赚钱,而是为了“练心”。你需要通过一次次的真实操作,直到对资金的波动和交易的抉择变得习以为常,情绪不再被市场牵着鼻子走。 你第一阶段不能用模拟盘哦,没用啊,模拟盘它不是钱啊…没有两年,没有腰斩再腰斩,腰斩再腰斩,你走不出来的。 这个过程是持续的。当你用这2万元亏到只剩几千时,你的任务是再次补足到2万元,继续这个循环。真正的里程碑,是你最终能用这2万元做到5万元的时候——那时,你才算真正有所小成。 3. 心法三:找到“舒服”的模式,并接受50%的成功率 当你的执行力基础已经打牢,能够冷静地执行买卖决策后,便可以进入第二阶段——寻找属于自己的交易模式。 这个阶段的关键,并非去生搬硬套别人的成功模式。每个人的性格、习惯、风险偏好都不同,因此你需要通过不断尝试,找到一种让自己“最舒服”的交易习惯和节奏。也许是早盘买入、次日卖出,也许是追逐突破,模式本身没有绝对的好坏,关键在于它是否与你的心性相符。 此阶段的成功标准不是百战百胜,而是用你的这套模式,能够做到单月成功率达到50%。这意味着,即便一半的交易是亏损的,你也能通过纪律控制住整体结果。 达到50%成功率之后,更关键的一步随之而来:复盘与反思。你需要仔细分析那些成功的交易为何成功,失败的交易又为何失败。找出那些导致亏损的“无效交易”——是因为情绪失控、大盘影响,还是操作失误?然后,努力在未来的交易中剔除它们。这是一个极其痛苦的过程,痛苦到“很多人都做不到”。因为它要求你直面自己最深处的弱点和错误,并狠心将其剔除。这正是普通交易者和职业操盘手的分水岭。 4. 心法四:当交易变得“无趣”时,你可能才真正入门 什么才是交易者真正成熟的标志?是抓到涨停板时的狂喜,还是账户屡创新高时的激动?都不是。一个最颠覆性的观点是:当你感觉到做交易这件事变得“好无趣”的时候,你可能才真正入门了。 “无趣”是交易的至高境界。因为它意味着你的所有操作已经摆脱了情绪的干扰,变成了一种冷静、客观、甚至近乎机械化的纪律执行。你不再为盈利而狂喜,也不再为亏损而沮丧。你的眼中只有规则、信号和执行。这时,你才真正理解了“控制回撤”的本质,因为你的关注点已经从单笔交易的输赢,转移到了长期系统的稳定性和风险控制上。 当你什么时候感受到了做交易好无趣的时候,你可能又会想到…哦,原来做交易叫有一个东西叫控制回撤。 然而,真正的“控制回撤”并非单纯地减少亏损。正如这位交易老手所言:**“**没有进攻力的控制回撤都叫做少亏。” 这句话揭示了更高阶的智慧:只有当你的交易系统具备了强大的盈利能力(进攻力)时,风险控制才具有战略意义。否则,你只是在被动地、缓慢地亏钱而已。这种“无趣”的状态,正是在强大的进攻能力和严格的防守纪律之间找到了完美的平衡点。 当走到这一步,你会发现市场的确“毫无规律,毫无模式”,不存在任何一劳永逸的圣杯。所谓的“悟道”,其实是一场永不停止的战斗——持续地反思、适应,并与自己的人性弱点对抗。 结语:你的战场,在K线图之外 回顾这四个心法,它们构成了一条从内到外的修炼之路:始于锻造钢铁般执行力的决心,通过小额真金在痛苦中磨练心性,进而找到与自己心性相符的交易模式并无情优化,最终达到情绪剥离、视交易为“无趣”的超越境界。 真正的交易大师,其战场不在于预测市场的涨跌,而在于战胜自己内心的贪婪与恐惧。正如原文所说:“炒股到最后发现就是跟自己斗。” 那么,在你的交易之路上,你是在执着地寻找必胜的“术”,还是在踏实地修炼自己的“心”?这个问题的答案,或许将决定你最终能走多远。 编写第一个量化策略(手把手详细版教程) 对于大部分人来说,量化交易是非常陌生与神秘的。本节内容将带你开启第一个量化策略! 本节内容摘要: 1.理解量化策略的基本框架。 2.学会编写一个简单的量化交易策略。 3.学会将量化交易策略绑定实盘模拟交易,并实时收到交易策略的买卖信号。 1.理解量化策略的基本框架 通常情况下,完整的量化交易策略至少需要确定两件事: A.交易标的,即买什么; B.确定交易时机,即怎么买卖。 让我们来设计一个简单完整的量化交易策略: 策略交易标的:贵州茅台; 策略交易时机:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。 2.学会编写一个简单的量化交易策略 第一步:打开SuperMind量化交易平台,先在上方导航栏点击“我的策略”—“策略编译”,再点击蓝色按钮“+新建策略”,接着点击已创建的策略进入策略编译器页面,如下: 温馨提示:“回测列表”下方三个按钮,可以设置编译器字体大小,背景颜色,编译设置,开启全屏编译,查看API文档,如下: 第二步:理解量化交易策略框架对应的代码框架。def init(context): #初始化函数:确定交易标的def handle_bar(context, bar_dict): #定时运行函数:确定交易时机 框架理解: 1.def init(context)与def handle_bar(context, bar_dict)是两个函数,函数格式固定为:def 函数名(参数),其中def后面带空格键,函数末尾必须带冒号。 2.def init(context)函数是初始化函数,只运行一次,确定初始化条件;def handle_bar(context, bar_dict)函数是定时运行函数,平台默认该函数定时运行。日级策略,每日9:30;分钟级策略,交易期间内的每分钟。 3.“#”后面为注释内容,用于注释代码,便于编写和阅读。 第三步:确定交易标的:context.security = '600519.SH'。 温馨提示: 1.context是账户对象,该对象存放所有账户相关信息,持仓、可用现金、资产盈亏。 2.context.security是在账户对象下,设置security变量,存放在账户内,这里我们需要确定交易标的,即:context.security = '600519.SH'。def init(context): context.security = '600519.SH'#已确定交易标的def handle_bar(context, bar_dict): #定时运行函数:确定交易时机 第四步:确定交易时机,即为:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。 从交易时机出发,我们需要计算交易标的5日和20日均线,那么5、20日均线需要用历史行情数据的收盘价来计算。 整个流程即:获取历史行情20日的收盘价数据———计算5、20日均线———判断5、20日均线,进行买卖交易。 A.获取历史行情20日的收盘价数据: 1.找到函数历史数据函数:history 2.填写函数参数,获取到数据: i.交易标的,即:获取那个股票的数据。 ii.数据字段:['close']收盘价,即:获取哪个数据。 iii.输入历史长度,即:获取多长时间的数据。 iv.获取数据的时间步长,即:获取日线级步长数据。 v.填写是否跳过停牌数据,复权选项,返回数据格式。 最终结果即为:history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1) 3.将获取到的数据储存,便于计算,即:closeprice = history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1)#获取证券过去20日的收盘价数据 closeprice = history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1) B.计算5、20日均线: 1.获取数据值,即:closeprice['close'],['close']可以获取储存中的收盘价数据,格式为closeprice['close']。温馨提示:closeprice是我们刚才获取的数据,但是数据有股票、时间、数值,我们直接用['close']获取收盘价数据值用于计算即可。 2.选取数据长度,即:closeprice['close'].iloc[-5:]。iloc[]用于取值,我们之前获取20个数据,但5日均线只需要过去5日的收盘价,因此iloc[-5:]即为获取倒数第五个到最后一个数据。温馨提示: i.iloc[:]是获取所有数据。 ii.iloc[:x]是从第一个获取到第x个,不包括第x个。 iii.iloc[x:y]是从第x个到第y个,包括x,但不包括y。 iv.iloc[-x:]获取倒数第x个到最后一个数据。 3.计算均值,即closeprice['close'].iloc[-5:].mean(),赋值给MA5。同理MA20=closeprice['close'].mean(),即对所有值取平均,相当于MA20=closeprice['close'].iloc[:].mean()。#计算二十日均线价格 MA20 = closeprice['close'].mean()#计算五日均线价格 MA5 = closeprice['close'].iloc[-5:].mean() C.判断5、20日均线,进行买卖交易: 1.if判断条件,即为 if MA5 > MA20:。温馨提示if判断函数的格式为if +添加判断+:,其中if后面必须带一个空格键,其次末尾必须带冒号。 2.当MA5小于MA20时,我们再对持仓市值判断,如果有持仓,那么持仓市值必然大于0,需要进行卖出交易,我们直接通过context账户对象中portfolio资产组合内stock_account股票账户下来获取持仓市值,即为:context.portfolio.stock_account.market_value。 3.下单买入交易: i.当触发MA5大于MA20时,我们需要买入股票,这时候我们可以使用order_target_percent下单函数,该函数以目标市值占比下单。 ii.输入下单函数的参数,order_target_percent函数需要输入两个参数: 1.下单的股票,即为context.security,我们之前将交易标的传入进去,可以直接用。 2.下单的占比,即为1,取值范围[0,1],此时取1,表示全仓买入股票。 iii.触发条件后程序提醒,当代码执行完下单函数后,我们用log.info()来打印日志,这样我们也可以看到程序下单了。 温馨提示:log.info()内你可以直接输入中文,例如:log.info('条件满足!买入贵州茅台啦!')# 如果5日均线大于20日均线,则全仓买入股票if MA5 > MA20: # 按目标市值占比下单 order_target_percent(context.security, 1) # 记录这次买入 log.info("买入 %s" % (context.security)) 4.下单卖出交易: i.当触发MA5小于MA20时,我们需要卖出股票,这时候我们可以使用order_target下单函数,该函数以目标股数下单。 ii.输入下单函数的参数,order_target函数需要输入两个参数: 1.下单的股票,即为context.security,我们之前将交易标的传入进去,可以直接用。 2.下单的目标股数,即0,因为我们需要将持仓股票卖出,卖到0股为止。 iii.触发条件后程序提醒,当代码执行完下单函数后,我们同log.info()来打印日志,这样我们也可以看到程序下单了。# 如果5日均线小于20日均线,并且目前有头寸,则清仓股票elif MA20 > MA5 and context.portfolio.stock_account.market_value > 0: # 卖出所有股票,使这只股票的最终持有量为0 order_target(context.security, 0) # 记录这次卖出 log.info("卖出 %s" % (context.security))最终完整代码:def init(context): # 设置要操作的股票:贵州茅台 context.security = '600519.SH'# 设置买卖条件,每个交易频率(日/分钟/tick)调用一次def handle_bar(context, bar_dict): # 获取股票过去20天的收盘价数据 closeprice = history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1) # 计算20日均线 MA20 = closeprice['close'].mean() # 计算5日均线 MA5 = closeprice['close'].iloc[-5:].mean() # 如果5日均线大于20日均线,则全仓买入股票 if MA5 > MA20 : # 按目标市值占比下单 order_target_percent(context.security, 1) # 记录这次买入 log.info("买入 %s" % (context.security)) # 如果5日均线小于20日均线,并且目前有头寸,则清仓股票 elif MA20 > MA5 and context.portfolio.stock_account.market_value > 0: # 卖出所有股票,使这只股票的最终持有量为0 order_target(context.security, 0) # 记录这次卖出 log.info("卖出 %s" % (context.security))第五步 回测量化交易策略 通过以上4步,我们已经完成了量化交易策略编写,那么接下来我们需要进行量化交易策略回测。 A.首先,我们尝试去跑通整个历史行情,排查代码错误。 i.右上角设置回测历史长度,设置资金,设置交易频率。 ii.点击左上角“编译运行”按钮,右边出现量化交易策略在历史行情中的表现情况 B.当量化交易策略能跑通整个历史行情后,我们可以确定该代码正确无误,随后点击右上角蓝色按钮“进行回测”。页面跳转至回测页面,在回测详情界面,您可以查看策略收益曲线,风险指标,每日持仓,交易明细,输出日志等信息,如下: C.学会将量化交易策略绑定实盘模拟交易,并实时收到交易策略的买卖信号 1.在回测显示结果页面,右上角点击蓝色按钮开启模拟交易,可以自行选择:从当前日开始模拟,在已有的回测基础上继续模拟.如下图: 2.至此,我们成功开启了模拟交易,可以查看您的模拟交易账户详细情况:交易明细、持仓、盈亏情况、账户风险指标等等。如下图: 3.您可以为您模拟交易账户新建模拟交易、暂停策略运行、发布策略至社区、重启策略、查看策略运行日志、查看策略代码。注意:重启按钮只会在策略运行错误后显示,如果策略运行正常,显示暂停按钮。新建模拟交易如下图: 
之前我分享过一个小工具网站,支持国内主流量化平台,可以让 AI 直接帮你写各个平台的策略代码,直接生成可运行的策略代码,代码质量远高于直接使用 DeepSeek、Trae 等平台。上线之后获得了非常多朋友的好评。 大家可以直接用描述策略,然后一键生成可运行的完整策略代码,也可以把它当做一个API 查询工具。 AI工具平台:https://iris.findtruman.io/ai/tool/ai-quantitative-trading/ 我看平台正在开发SuperMind支持,很快就能支持同花顺了 贵金属期货 API 指南:实时行情、历史数据与黄金白银报价 随着 2025 年全球经济的不确定性加剧,贵金属期货市场如黄金和白银已成为投资者关注的焦点。这些资产不仅作为避险工具,还在工业应用中扮演重要角色。获取实时行情和历史数据是进行量化分析、交易策略优化的关键。本文将基于专业的期货 API 接口,详细介绍如何通过 RESTful API 和 WebSocket 获取贵金属期货数据,包括黄金(GC)和白银(SI)的报价、成交记录和 K 线历史。所有示例均参考可靠的 API 文档,确保代码实用性和可操作性。 为什么选择贵金属期货 API? 在 2025 年,贵金属市场受地缘政治、通胀预期和供应链影响,波动性增大。API 接口可以帮助你: 实时监控:获取毫秒级报价和成交数据,避免延迟。 历史回测:下载 K 线数据,支持从分钟到月线的多周期分析。 多合约支持:覆盖美国(US)、香港(HK)和中国(CN)市场的主力合约。 数据完整性:包括开盘价(O)、最高价(H)、最低价(L)、收盘价(C)、成交量(V)和成交额(TU)等 OHLC 指标。 API 选型对比 在选择贵金属期货 API 时,需要考虑数据专精度、更新频率、定价和可靠性。以下对比 iTick API、Alpha Vantage 和 Metals-API。基于 2025 年最新信息(官网、用户反馈如 Trustpilot 和 Reddit),帮助您选型。 概述 iTick API:专注于期货市场,包括贵金属如黄金(GC)和白银(SI)。支持 RESTful 和 WebSocket,提供批量实时报价、成交和历史 K 线。覆盖 US/HK/CN 市场,适合高频交易和量化。 Alpha Vantage:成立于 2017 年,由 Y Combinator 支持,提供免费和付费 API。数据来源包括 NASDAQ 等交易所,适用于量化交易、AI 代理和理财 App。支持 JSON/CSV 格式,覆盖全球市场,包括贵金属但非专精。 Metals-API:专注于贵金属和基础金属价格数据,数据来源于 15+可靠提供商(如欧洲央行、LME)。强调实时更新(每 60 秒)和高精度(2 小数位),适合珠宝、投资和电商应用。无免费层,但入门门槛低。 关键对比 使用表格形式呈现核心维度对比(基于官网、用户评论和第三方评审)。 关键对比 维度 iTick API Alpha Vantage Metals-API 焦点领域 期货专精,支持贵金属(GC/SI)主力合约 综合金融数据,包含贵金属 专精贵金属和基础金属 特性 实时/历史数据,WebSocket 推送 实时/历史数据,免费层可用 实时/历史数据,高更新频率 定价计划 免费,专业$99/月 $99/月起 $99/月起 API 限制 批量支持多合约,实时更新 免费层限额严格 60-240 calls/分钟 可靠性 高 uptime,交易所数据源 一般可靠 99.99% uptime 易用性与集成 文档全面,多语言示例 文档全面,社区活跃 文档友好,代码示例丰富 适用场景 期货交易系统,量化回测 理财 App,多资产整合 专注贵金属应用 选型推荐 iTick API:如果需求聚焦期货合约(如 GC/SI 实时 Tick 和历史 K 线),追求批量和 WebSocket 效率。适合 2025 年高波动市场。 Alpha Vantage:如果您的理财应用涉及多种金融资产(如股票+贵金属),预算有限,且能接受免费层的限额。适合初创或测试阶段。2025 年,它在广度和免费访问上领先,但如果只用金属数据,可能冗余。 Metals-API:如果需求专精贵金属(如黄金白银实时报价、波动分析),追求高精度和频繁更新。定价更低入门,可靠性更高,适合专业理财工具或电商。但缺乏广义金融数据。 混合使用:如果预算允许,可结合:用 iTick 处理期货细节,用 Alpha Vantage 补整体金融,用 Metals-API 补金属汇率。 注意事项:两者均无直接比较文章,但 Alpha Vantage 免费测试更易;Metals-API 在金属准确性上更强;iTick 在期货深度上领先。建议注册免费密钥(Alpha)或最低计划(Metals/iTick)测试。监控限额,避免超支。数据来源可靠,但始终交叉验证关键决策。 1. 批量实时报价:获取黄金白银最新行情 实时报价 API 用于批量获取多个合约的最新价格、涨跌幅等指标。适合监控市场动态。 请求参数 region:市场代码(如 US)。 codes:合约代码,逗号分隔(如 GC,SI)。 响应示例 响应返回 JSON 格式,包括最新价(ld)、开盘价(o)等。 Python 代码示例 import requests url = "https://api.itick.org/future/quotes?region=US&codes=GC,SI" headers = { "accept": "application/json", "token": "your_token" } response = requests.get(url, headers=headers) print(response.text) Java 代码示例 import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.itick.org/future/quotes?region=US&codes=GC,SI") .get() .addHeader("accept", "application/json") .addHeader("token", "your_token") .build(); Response response = client.newCall(request).execute(); System.out.println(response.body().string()); Go 代码示例 package main import ( "fmt" "io" "net/http" ) func main() { url := "https://api.itick.org/future/quotes?region=US&codes=GC,SI" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("accept", "application/json") req.Header.Add("token", "your_token") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(string(body)) } 响应: { "code": 0, "msg": null, "data": { "GC": { "s": "GC", "ld": 2650.5, "o": 2640.0, "h": 2660.0, "l": 2635.0, "t": 1754062000728, "v": 150000, "tu": 400000000.0, "ts": 0 }, "SI": { "s": "SI", "ld": 30.5, "o": 30.0, "h": 31.0, "l": 29.8, "t": 1754062000728, "v": 120000, "tu": 3660000.0, "ts": 0 } } } 2. 批量实时成交:追踪黄金白银逐笔交易 实时成交 API 提供精确到毫秒的 Tick 数据,包括价格、成交量和时间戳。适用于高频交易策略。 请求参数 region:市场代码(如 US)。 codes:合约代码(如 GC,SI)。 响应示例 返回最新成交记录。 Python 代码示例 import requests url = "https://api.itick.org/future/ticks?region=US&codes=GC,SI" headers = { "accept": "application/json", "token": "your_token" } response = requests.get(url, headers=headers) print(response.text) Java 代码示例 import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.itick.org/future/ticks?region=US&codes=GC,SI") .get() .addHeader("accept", "application/json") .addHeader("token", "your_token") .build(); Response response = client.newCall(request).execute(); System.out.println(response.body().string()); Go 代码示例 package main import ( "fmt" "io" "net/http" ) func main() { url := "https://api.itick.org/future/ticks?region=US&codes=GC,SI" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("accept", "application/json") req.Header.Add("token", "your_token") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(string(body)) } 响应: { "code": 0, "msg": null, "data": { "GC": { "s": "GC", "ld": 2650.5, "t": 1754062000728, "v": 100 }, "SI": { "s": "SI", "ld": 30.5, "t": 1754062000728, "v": 50 } } } 3. 批量历史 K 线:分析黄金白银趋势 历史 K 线 API 支持多周期查询,用于回测和趋势分析。参数包括 K 线类型(kType)和数量(limit)。 请求参数 region:市场代码(如 US)。 codes:合约代码(如 GC,SI)。 kType:K 线类型(1:分钟,8:日等)。 limit:K 线数量。 et:截止时间戳(可选)。 响应示例 返回时间序列数据。 Python 代码示例 import requests url = "https://api.itick.org/future/klines?region=US&codes=GC,SI&kType=8&limit=5" headers = { "accept": "application/json", "token": "your_token" } response = requests.get(url, headers=headers) print(response.text) Java 代码示例 import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.itick.org/future/klines?region=US&codes=GC,SI&kType=8&limit=5") .get() .addHeader("accept", "application/json") .addHeader("token", "your_token") .build(); Response response = client.newCall(request).execute(); System.out.println(response.body().string()); Go 代码示例 package main import ( "fmt" "io" "net/http" ) func main() { url := "https://api.itick.org/future/klines?region=US&codes=GC,SI&kType=8&limit=5" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("accept", "application/json") req.Header.Add("token", "your_token") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(string(body)) } 响应: { "code": 0, "msg": null, "data": { "GC": [ { "tu": 100000000.0, "c": 2650.5, "t": 1754656800000, "v": 1000, "h": 2660.0, "l": 2635.0, "o": 2640.0 } // 更多K线数据... ], "SI": [ // 白银K线数据... ] } } 4. WebSocket 实时推送:黄金白银数据流 对于需要毫秒级更新的场景,使用 WebSocket 订阅报价、成交和盘口数据。支持心跳机制保持连接。 连接与订阅步骤 连接 WebSocket:wss://api.itick.org/future。 发送订阅消息:指定合约(如 GC$US)和类型(quote、tick、depth)。 Python WebSocket 示例 import websocket import json import threading import time WS_URL = "wss://api.itick.org/future" API_TOKEN = "your_token" def on_message(ws, message): print("Received message:", message) def on_open(ws): print("WebSocket connection opened") subscribe(ws) def subscribe(ws): subscribe_msg = { "ac": "subscribe", "params": "GC$US,SI$US", "types": "tick,quote,depth" } ws.send(json.dumps(subscribe_msg)) def send_ping(ws): while True: time.sleep(30) ping_msg = {"ac": "ping", "params": str(int(time.time() * 1000))} ws.send(json.dumps(ping_msg)) ws = websocket.WebSocketApp( WS_URL, header={"token": API_TOKEN}, on_open=on_open, on_message=on_message ) ping_thread = threading.Thread(target=send_ping, args=(ws,)) ping_thread.daemon = True ping_thread.start() ws.run_forever() 类似地,Java、Go 和 Node.js 示例可参考文档调整,焦点在订阅黄金(GC$US)和白银(SI$US)。 最佳实践与注意事项 数据处理:使用 Pandas 等库解析 JSON,进行可视化分析。 限频与配额:遵守 API 调用限制,避免滥用。 安全:Token 需保密,使用 HTTPS/WebSocket Secure。 扩展:结合机器学习模型预测 2025 年贵金属趋势。 结语 在 2025 年,贵金属市场呈现出新的特点和发展趋势,对于开发者和数据分析人员来说,掌握 API 技术获取实时和历史数据变得尤为重要。通过本文介绍的 RESTful API 和 WebSocket 技术,您可以有效地获取黄金(GC)和白银(SI)等贵金属期货的行情数据,为后续的数据分析和策略研究奠定基础。 无论您是在构建金融数据分析平台,还是在研究市场趋势模式,或是开发量化交易系统,正确使用 API 都是实现目标的关键环节。需要注意的是,在使用任何金融数据 API 时,都应当遵守相关服务条款,合理控制请求频率,并妥善保管认证凭证。 随着金融科技的不断发展,API 在数据获取和系统集成方面发挥着越来越重要的作用。我们鼓励读者在合法合规的前提下,积极探索 API 的应用场景,不断提升自己的技术能力。希望本文提供的各种编程语言示例能为您的项目开发带来帮助,让您更好地理解和应用贵金属期货市场数据。 温馨提示:本文仅供参考,不构成任何投资建议。市场有风险,投资需谨慎 参考文档:https://blog.itick.org/metal-api/free-metal-api-comparison GitHub:https://github.com/itick-org/