Files
qmt_bridge/reference/thinktrader_docs/innerApi_start_now.html
T

339 lines
131 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.67">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon.ico"><link rel="preload" href="/embed/chat-ui-embed.css" as="style"><link rel="preload" href="/embed/chat-ui-embed.umd.cjs" as="script"><link rel="stylesheet" href="/embed/chat-ui-embed.css"><style>
[data-chat-ui-embedded] {
background-color: var(--c-bg, #fff);
}
html.dark [data-chat-ui-embedded] {
background-color: var(--c-bg, #1b1b1f);
}
.assistant-layout,
.assistant-panel,
.assistant-chat {
background-color: var(--c-bg, #fff);
}
html.dark .assistant-layout,
html.dark .assistant-panel,
html.dark .assistant-chat {
background-color: var(--c-bg, #1b1b1f);
}
.assistant-chat,
.assistant-chat-preboot {
height: 100%;
width: 100%;
}
.assistant-chat.is-ready,
.assistant-chat-preboot.is-ready {
opacity: 1 !important;
}
</style><script>
// 为浏览器环境提供process变量的兼容性处理
if (typeof window !== 'undefined' && !window.process) {
window.process = { env: { NODE_ENV: 'production' } };
}
</script><script src="/embed/chat-ui-embed.umd.cjs" id="chat-ui-embed-script"></script><script>
window.__chatUILoadPromise = new Promise(function(resolve) {
function onReady() {
resolve(!!window.ChatUI);
}
if (window.ChatUI) {
onReady();
return;
}
var el = document.getElementById('chat-ui-embed-script');
if (!el) {
resolve(false);
return;
}
if (el.readyState === 'complete' || el.readyState === 'loaded') {
onReady();
return;
}
el.addEventListener('load', onReady);
el.addEventListener('error', function() { resolve(false); });
});
</script><script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?db74a9715180bac1ca6d22e853a90e9b";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><title>快速开始 | 迅投知识库</title><meta name="description" content="QMT说明, QMT-Python-API, QMT用户手册。">
<link rel="preload" href="/assets/style-937c34dd.css" as="style"><link rel="stylesheet" href="/assets/style-937c34dd.css">
<link rel="modulepreload" href="/assets/app-2fe24c5e.js"><link rel="modulepreload" href="/assets/start_now.html-2cd8fc71.js"><link rel="modulepreload" href="/assets/start_now.html-5a5de085.js"><link rel="prefetch" href="/assets/index.html-aacedb99.js" as="script"><link rel="prefetch" href="/assets/basic_syntax.html-e393df56.js" as="script"><link rel="prefetch" href="/assets/check_sheet.html-a405c8a3.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-985b4984.js" as="script"><link rel="prefetch" href="/assets/control_statement.html-bf992bd7.js" as="script"><link rel="prefetch" href="/assets/operating_mode.html-a2f39c1a.js" as="script"><link rel="prefetch" href="/assets/start_now.html-1be21f8a.js" as="script"><link rel="prefetch" href="/assets/system_function.html-feab901e.js" as="script"><link rel="prefetch" href="/assets/python调用VBA.html-1946fa92.js" as="script"><link rel="prefetch" href="/assets/全市场涨跌幅度统计.html-b8ba35f1.js" as="script"><link rel="prefetch" href="/assets/全市场资金流向.html-2357f922.js" as="script"><link rel="prefetch" href="/assets/前结_今结_持仓.html-a4436106.js" as="script"><link rel="prefetch" href="/assets/北向资金.html-e540615d.js" as="script"><link rel="prefetch" href="/assets/南向资金.html-9137d95c.js" as="script"><link rel="prefetch" href="/assets/因子获取.html-89140fd6.js" as="script"><link rel="prefetch" href="/assets/外盘_内盘.html-e7f33912.js" as="script"><link rel="prefetch" href="/assets/多空对比.html-a634bb69.js" as="script"><link rel="prefetch" href="/assets/委买价_委卖价_委买量_委卖量.html-e9c29505.js" as="script"><link rel="prefetch" href="/assets/委差_委比.html-ff3246bc.js" as="script"><link rel="prefetch" href="/assets/总股本_总市值.html-e8ba60d4.js" as="script"><link rel="prefetch" href="/assets/振幅.html-e9576d1a.js" as="script"><link rel="prefetch" href="/assets/换手.html-f2f05a67.js" as="script"><link rel="prefetch" href="/assets/最新_今开_最高_最低_总额_总手_交易状态.html-2ca89ba1.js" as="script"><link rel="prefetch" href="/assets/注册资本.html-bec636fc.js" as="script"><link rel="prefetch" href="/assets/流通值.html-f34e70d5.js" as="script"><link rel="prefetch" href="/assets/流通盘_流通值.html-50ac8dc4.js" as="script"><link rel="prefetch" href="/assets/涨停_跌停.html-ba7667b7.js" as="script"><link rel="prefetch" href="/assets/涨跌_涨幅.html-a4d004cb.js" as="script"><link rel="prefetch" href="/assets/涨跌家数变化.html-a30316a7.js" as="script"><link rel="prefetch" href="/assets/现手.html-0f4ec2e6.js" as="script"><link rel="prefetch" href="/assets/规模风向标.html-d7dc3f5e.js" as="script"><link rel="prefetch" href="/assets/量比.html-2be39bbd.js" as="script"><link rel="prefetch" href="/assets/rookie.html-90dba3b5.js" as="script"><link rel="prefetch" href="/assets/ty_rookie.html-8868ad82.js" as="script"><link rel="prefetch" href="/assets/index.html-a4665f64.js" as="script"><link rel="prefetch" href="/assets/bond.html-087de96b.js" as="script"><link rel="prefetch" href="/assets/data_browser_barra_factor.html-2740d45d.js" as="script"><link rel="prefetch" href="/assets/floorfunds.html-f1e05c44.js" as="script"><link rel="prefetch" href="/assets/future.html-3c7280d8.js" as="script"><link rel="prefetch" href="/assets/indexes.html-4c831e2f.js" as="script"><link rel="prefetch" href="/assets/industry.html-07c2d987.js" as="script"><link rel="prefetch" href="/assets/option.html-1cda80f4.js" as="script"><link rel="prefetch" href="/assets/question_answer.html-57f4a833.js" as="script"><link rel="prefetch" href="/assets/scenario_based_example.html-e840fc79.js" as="script"><link rel="prefetch" href="/assets/stock.html-d4aeb9ec.js" as="script"><link rel="prefetch" href="/assets/xuntou_factor.html-47f372c3.js" as="script"><link rel="prefetch" href="/assets/callback_function.html-ba3839f5.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-28482bfc.js" as="script"><link rel="prefetch" href="/assets/data_function.html-412f8b29.js" as="script"><link rel="prefetch" href="/assets/data_structure.html-8f55b710.js" as="script"><link rel="prefetch" href="/assets/drawing_function.html-dee669df.js" as="script"><link rel="prefetch" href="/assets/enum_constants.html-42ed8cba.js" as="script"><link rel="prefetch" href="/assets/interface_operation.html-47a2cf15.js" as="script"><link rel="prefetch" href="/assets/question_answer.html-f08895ff.js" as="script"><link rel="prefetch" href="/assets/quote_function.html-d5906fa7.js" as="script"><link rel="prefetch" href="/assets/related_instructions.html-9b630c20.js" as="script"><link rel="prefetch" href="/assets/system_function.html-79f889f8.js" as="script"><link rel="prefetch" href="/assets/trading_function.html-19c5ecb8.js" as="script"><link rel="prefetch" href="/assets/user_attention.html-e0d27a96.js" as="script"><link rel="prefetch" href="/assets/variable_convention.html-92ed4d6f.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-84d3bae8.js" as="script"><link rel="prefetch" href="/assets/download_xtquant.html-9de3a818.js" as="script"><link rel="prefetch" href="/assets/question_function.html-4e4bd334.js" as="script"><link rel="prefetch" href="/assets/start_now.html-b2c933ee.js" as="script"><link rel="prefetch" href="/assets/xtdata.html-312381bb.js" as="script"><link rel="prefetch" href="/assets/xtdata_new.html-2164196d.js" as="script"><link rel="prefetch" href="/assets/xttrader.html-cd097e38.js" as="script"><link rel="prefetch" href="/assets/JoinQuant2QMT.html-38cb9974.js" as="script"><link rel="prefetch" href="/assets/index.html-22b6b31a.js" as="script"><link rel="prefetch" href="/assets/daoru_daochu.html-c8cace75.js" as="script"><link rel="prefetch" href="/assets/hangqing_setting.html-1a9570b3.js" as="script"><link rel="prefetch" href="/assets/ty_add_indicator.html-1f2f4b0a.js" as="script"><link rel="prefetch" href="/assets/ty_backtest_strategy.html-3f8682bc.js" as="script"><link rel="prefetch" href="/assets/ty_code_review_backtest.html-200ceddd.js" as="script"><link rel="prefetch" href="/assets/ty_content.html-f2564dc8.js" as="script"><link rel="prefetch" href="/assets/ty_data_download.html-351b4a4f.js" as="script"><link rel="prefetch" href="/assets/ty_data_interface.html-2e32a98a.js" as="script"><link rel="prefetch" href="/assets/ty_direct_connect.html-f8b10f83.js" as="script"><link rel="prefetch" href="/assets/ty_factor_data.html-1746bcaa.js" as="script"><link rel="prefetch" href="/assets/ty_native_python.html-55154231.js" as="script"><link rel="prefetch" href="/assets/ty_register_install.html-0d2c078f.js" as="script"><link rel="prefetch" href="/assets/404.html-f9875e7b.js" as="script"><link rel="prefetch" href="/assets/index.html-ced75bd7.js" as="script"><link rel="prefetch" href="/assets/basic_syntax.html-b8abc947.js" as="script"><link rel="prefetch" href="/assets/check_sheet.html-dcf52204.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-3113b68a.js" as="script"><link rel="prefetch" href="/assets/control_statement.html-00e2be67.js" as="script"><link rel="prefetch" href="/assets/operating_mode.html-61fbaed0.js" as="script"><link rel="prefetch" href="/assets/start_now.html-eaff5695.js" as="script"><link rel="prefetch" href="/assets/system_function.html-2d90b97e.js" as="script"><link rel="prefetch" href="/assets/python调用VBA.html-13606619.js" as="script"><link rel="prefetch" href="/assets/全市场涨跌幅度统计.html-233ddc7a.js" as="script"><link rel="prefetch" href="/assets/全市场资金流向.html-ecb85a96.js" as="script"><link rel="prefetch" href="/assets/前结_今结_持仓.html-837c8847.js" as="script"><link rel="prefetch" href="/assets/北向资金.html-b86e0737.js" as="script"><link rel="prefetch" href="/assets/南向资金.html-af4159d2.js" as="script"><link rel="prefetch" href="/assets/因子获取.html-96ca84cb.js" as="script"><link rel="prefetch" href="/assets/外盘_内盘.html-46442d98.js" as="script"><link rel="prefetch" href="/assets/多空对比.html-77a530ac.js" as="script"><link rel="prefetch" href="/assets/委买价_委卖价_委买量_委卖量.html-298fb634.js" as="script"><link rel="prefetch" href="/assets/委差_委比.html-8aaf6597.js" as="script"><link rel="prefetch" href="/assets/总股本_总市值.html-ed03a153.js" as="script"><link rel="prefetch" href="/assets/振幅.html-0d26176f.js" as="script"><link rel="prefetch" href="/assets/换手.html-1a803631.js" as="script"><link rel="prefetch" href="/assets/最新_今开_最高_最低_总额_总手_交易状态.html-256abaa5.js" as="script"><link rel="prefetch" href="/assets/注册资本.html-1d912787.js" as="script"><link rel="prefetch" href="/assets/流通值.html-9ba094fb.js" as="script"><link rel="prefetch" href="/assets/流通盘_流通值.html-2d754f1f.js" as="script"><link rel="prefetch" href="/assets/涨停_跌停.html-e9099f68.js" as="script"><link rel="prefetch" href="/assets/涨跌_涨幅.html-4efc9eb8.js" as="script"><link rel="prefetch" href="/assets/涨跌家数变化.html-53de94c7.js" as="script"><link rel="prefetch" href="/assets/现手.html-0ab76010.js" as="script"><link rel="prefetch" href="/assets/规模风向标.html-79312cc7.js" as="script"><link rel="prefetch" href="/assets/量比.html-9ef1d579.js" as="script"><link rel="prefetch" href="/assets/rookie.html-5fca3b77.js" as="script"><link rel="prefetch" href="/assets/ty_rookie.html-35f28c88.js" as="script"><link rel="prefetch" href="/assets/index.html-fcd652a1.js" as="script"><link rel="prefetch" href="/assets/bond.html-29897ac6.js" as="script"><link rel="prefetch" href="/assets/data_browser_barra_factor.html-e738eab1.js" as="script"><link rel="prefetch" href="/assets/floorfunds.html-0d9d6507.js" as="script"><link rel="prefetch" href="/assets/future.html-f7124802.js" as="script"><link rel="prefetch" href="/assets/indexes.html-d7b6311e.js" as="script"><link rel="prefetch" href="/assets/industry.html-16efb403.js" as="script"><link rel="prefetch" href="/assets/option.html-9f501a6a.js" as="script"><link rel="prefetch" href="/assets/question_answer.html-47cf70ab.js" as="script"><link rel="prefetch" href="/assets/scenario_based_example.html-0950e171.js" as="script"><link rel="prefetch" href="/assets/stock.html-f974aa84.js" as="script"><link rel="prefetch" href="/assets/xuntou_factor.html-8e81ea23.js" as="script"><link rel="prefetch" href="/assets/callback_function.html-a2c9d30a.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-2ffd3c2b.js" as="script"><link rel="prefetch" href="/assets/data_function.html-cb5dd5ef.js" as="script"><link rel="prefetch" href="/assets/data_structure.html-2ba7501e.js" as="script"><link rel="prefetch" href="/assets/drawing_function.html-3f6a35e8.js" as="script"><link rel="prefetch" href="/assets/enum_constants.html-cc910da2.js" as="script"><link rel="prefetch" href="/assets/interface_operation.html-9afd00f4.js" as="script"><link rel="prefetch" href="/assets/question_answer.html-f50e9534.js" as="script"><link rel="prefetch" href="/assets/quote_function.html-8ec4b48e.js" as="script"><link rel="prefetch" href="/assets/related_instructions.html-b21d5ef1.js" as="script"><link rel="prefetch" href="/assets/system_function.html-cb9d0895.js" as="script"><link rel="prefetch" href="/assets/trading_function.html-fdb92ee0.js" as="script"><link rel="prefetch" href="/assets/user_attention.html-67276bd2.js" as="script"><link rel="prefetch" href="/assets/variable_convention.html-96cab360.js" as="script"><link rel="prefetch" href="/assets/code_examples.html-7561c6c2.js" as="script"><link rel="prefetch" href="/assets/download_xtquant.html-9bc2e654.js" as="script"><link rel="prefetch" href="/assets/question_function.html-845d97e5.js" as="script"><link rel="prefetch" href="/assets/start_now.html-9a07cd5e.js" as="script"><link rel="prefetch" href="/assets/xtdata.html-60737e81.js" as="script"><link rel="prefetch" href="/assets/xtdata_new.html-18c73eaa.js" as="script"><link rel="prefetch" href="/assets/xttrader.html-a6a0e543.js" as="script"><link rel="prefetch" href="/assets/JoinQuant2QMT.html-ace7c465.js" as="script"><link rel="prefetch" href="/assets/index.html-9d1612c5.js" as="script"><link rel="prefetch" href="/assets/daoru_daochu.html-eae2410f.js" as="script"><link rel="prefetch" href="/assets/hangqing_setting.html-0ff7ba11.js" as="script"><link rel="prefetch" href="/assets/ty_add_indicator.html-79a10fed.js" as="script"><link rel="prefetch" href="/assets/ty_backtest_strategy.html-bf683d1f.js" as="script"><link rel="prefetch" href="/assets/ty_code_review_backtest.html-3497c894.js" as="script"><link rel="prefetch" href="/assets/ty_content.html-d9354c9a.js" as="script"><link rel="prefetch" href="/assets/ty_data_download.html-d1a7795c.js" as="script"><link rel="prefetch" href="/assets/ty_data_interface.html-8f993a77.js" as="script"><link rel="prefetch" href="/assets/ty_direct_connect.html-ffc766ea.js" as="script"><link rel="prefetch" href="/assets/ty_factor_data.html-75792bc5.js" as="script"><link rel="prefetch" href="/assets/ty_native_python.html-7400d196.js" as="script"><link rel="prefetch" href="/assets/ty_register_install.html-5498913b.js" as="script"><link rel="prefetch" href="/assets/404.html-86fec5d9.js" as="script"><link rel="prefetch" href="/assets/SearchBox-625c401e.js" as="script"><link rel="prefetch" href="/assets/auto-6adc87e8.js" as="script"><link rel="prefetch" href="/assets/index-2bf332f6.js" as="script"><link rel="prefetch" href="/assets/flowchart-c441f34d.js" as="script"><link rel="prefetch" href="/assets/SignPanel-da80f282.js" as="script"><link rel="prefetch" href="/assets/SignPanel-da80f282.js" as="script">
</head>
<body>
<div id="app"><!--[--><div class="theme-container"><!--[--><div class="n-config-provider"><header class="navbar"><div><div class="toggle-sidebar-button" title="切换侧边栏" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div></div><span><a href="/" class=""><img class="logo" src="/images/logo.png" alt="迅投知识库"><span class="site-name can-hide">迅投知识库</span></a></span><span><div class="search-box" role="search" data-v-7a908cc7><div data-v-7a908cc7><input value="" aria-label="Search" class="" placeholder="搜索文档" autocomplete="off" spellcheck="false" data-v-7a908cc7><!----></div><!----><!----></div></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide" id="customize-nav"><!--[--><div class="navbar-item"><a href="/" class="" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="API"><span class="title">API</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="API"><span class="title">API</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/freshman/ty_rookie.html" class="" aria-label="投研新手教程"><!--[--><!--]--> 投研新手教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/freshman/rookie.html" class="" aria-label="QMT新手教程"><!--[--><!--]--> QMT新手教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="内置Python"><!--[--><!--]--> 内置Python <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/nativeApi/start_now.html" class="" aria-label="XtQuant文档"><!--[--><!--]--> XtQuant文档 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/VBA/start_now.html" class="" aria-label="VBA"><!--[--><!--]--> VBA <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="数据字典"><span class="title">数据字典</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="数据字典"><span class="title">数据字典</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/dictionary/" class="" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/stock.html" class="" aria-label="股票数据"><!--[--><!--]--> 股票数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/industry.html" class="" aria-label="行业概念数据"><!--[--><!--]--> 行业概念数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/indexes.html" class="" aria-label="指数数据"><!--[--><!--]--> 指数数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/future.html" class="" aria-label="期货数据"><!--[--><!--]--> 期货数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/option.html" class="" aria-label="期权数据"><!--[--><!--]--> 期权数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/floorfunds.html" class="" aria-label="场内基金数据"><!--[--><!--]--> 场内基金数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/bond.html" class="" aria-label="债券数据"><!--[--><!--]--> 债券数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/question_answer.html" class="" aria-label="常见问题"><!--[--><!--]--> 常见问题 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/scenario_based_example.html" class="" aria-label="场景化示例"><!--[--><!--]--> 场景化示例 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/xuntou_factor.html" class="" aria-label="迅投因子"><!--[--><!--]--> 迅投因子 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/data_browser_barra_factor.html" class="" aria-label="数据浏览器"><!--[--><!--]--> 数据浏览器 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="策略迁移"><span class="title">策略迁移</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="策略迁移"><span class="title">策略迁移</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/strategy/JoinQuant2QMT.html" class="" aria-label="聚宽策略"><!--[--><!--]--> 聚宽策略 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span></span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="客服QQ: 810315303"><!--[--><!--]--> 客服QQ: 810315303 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="联系方式: 18309226715"><!--[--><!--]--> 联系方式: 18309226715 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="视频教程"><span class="title">视频教程</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="视频教程"><span class="title">视频教程</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/videos/touyan/ty_register_install.html" class="" aria-label="投研端教程"><!--[--><!--]--> 投研端教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.xuntou.net/plugin.php?id=keke_video_base" rel="noopener noreferrer" target="_blank" aria-label="迅投学堂"><!--[--><!--]--> 迅投学堂 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><!--]--></ul></div></div><!--]--></nav><div class="navbar-item flexBtn fromBtn"><span> 投研平台 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></span></div><div class="flexBtn fromBtn"><span> 迅投社区 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></span></div><!-- <div class="navbar-item flexBtn fromBtn" v-if="!info.isMobile">
<span
@click="getNUrl('crowdfunding')"
>
特色众筹
<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path>
<polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg>
<span class="external-link-icon-sr-only">在新窗口打开</span>
</span>
</span>
</div> --><div class="navbar-item flexBtn"><a class="external-link" href="http://www.thinktrader.net" rel="noopener noreferrer" target="_blank" aria-label="迅投官网"> 迅投官网 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></a></div><!--v-if--><!--[--><!--]--><div class="ToggleColor"><button class="toggle-color-mode-button" title="切换颜色模式"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></div><div><div class="n-config-provider user"><!--v-if--></div><div role="none" class="n-space" style="display:flex;flex-direction:row;justify-content:flex-start;flex-wrap:wrap;margin-top:;margin-bottom:;gap:8px 12px;"><!-- <n-button strong secondary type="error" @click="linkTo('/signup/')" v-show="!info.isMobile">注册</n-button> --><!-- <n-button strong secondary type="info" @click="linkTo('/signin/')">登录</n-button> --><div role="none" class="" style="max-width:100%;"><button class="n-button n-button--error-type n-button--medium-type n-button--secondary" tabindex="0" type="button" style="--n-bezier:cubic-bezier(.4, 0, .2, 1);--n-bezier-ease-out:cubic-bezier(0, 0, .2, 1);--n-ripple-duration:.6s;--n-opacity-disabled:0.5;--n-wave-opacity:0.6;--n-font-weight:500;--n-color:rgba(208, 48, 80, 0.16);--n-color-hover:rgba(208, 48, 80, 0.22);--n-color-pressed:rgba(208, 48, 80, 0.28);--n-color-focus:rgba(208, 48, 80, 0.22);--n-color-disabled:rgba(46, 51, 56, .05);--n-ripple-color:#0000;--n-text-color:#d03050;--n-text-color-hover:#d03050;--n-text-color-pressed:#d03050;--n-text-color-focus:#d03050;--n-text-color-disabled:#d03050;--n-border:1px solid #d03050;--n-border-hover:1px solid #de576d;--n-border-pressed:1px solid #ab1f3f;--n-border-focus:1px solid #de576d;--n-border-disabled:1px solid #d03050;--n-width:initial;--n-height:34px;--n-font-size:14px;--n-padding:0 14px;--n-icon-size:18px;--n-icon-margin:6px;--n-border-radius:3px;"><!----><!----><span class="n-button__content">注册</span><div aria-hidden="true" class="n-base-wave"></div><!----><!----></button></div><div role="none" class="" style="max-width:100%;"><button class="n-button n-button--info-type n-button--medium-type n-button--secondary" tabindex="0" type="button" style="--n-bezier:cubic-bezier(.4, 0, .2, 1);--n-bezier-ease-out:cubic-bezier(0, 0, .2, 1);--n-ripple-duration:.6s;--n-opacity-disabled:0.5;--n-wave-opacity:0.6;--n-font-weight:500;--n-color:rgba(32, 128, 240, 0.16);--n-color-hover:rgba(32, 128, 240, 0.22);--n-color-pressed:rgba(32, 128, 240, 0.28);--n-color-focus:rgba(32, 128, 240, 0.22);--n-color-disabled:rgba(46, 51, 56, .05);--n-ripple-color:#0000;--n-text-color:#2080f0;--n-text-color-hover:#2080f0;--n-text-color-pressed:#2080f0;--n-text-color-focus:#2080f0;--n-text-color-disabled:#2080f0;--n-border:1px solid #2080f0;--n-border-hover:1px solid #4098fc;--n-border-pressed:1px solid #1060c9;--n-border-focus:1px solid #4098fc;--n-border-disabled:1px solid #2080f0;--n-width:initial;--n-height:34px;--n-font-size:14px;--n-padding:0 14px;--n-icon-size:18px;--n-icon-margin:6px;--n-border-radius:3px;"><!----><!----><span class="n-button__content">登录</span><div aria-hidden="true" class="n-base-wave"></div><!----><!----></button></div></div></div></div></header><!--[--><!-- 桌面端:微信 / 分享始终可见 --><div class="assistant-float-actions" style="right:462px;top:calc(50% + var(--navbar-height) / 2);" data-v-5b14e8e0><button type="button" class="assistant-float-btn" title="微信扫码联系客服" data-v-5b14e8e0><img src="/assets/wechat-d90fd08f.png" alt="微信扫码联系客服" data-v-5b14e8e0></button><button id="assistant-share-btn" type="button" class="assistant-float-btn" title="分享链接" data-v-5b14e8e0><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAHgAAAADKQTcFAAADjElEQVRIDcVXW0hVQRRdM/fce/OVpfRA8dENDckkMILsYRG9PnqQQUkg9NFfBCFEJJSFRj8R+BP4URREGEVGRNSXWEiE1odoDx+lhkoWpTe1+zrT7KPnes59ddQbDujM7D17rbNn9uzZl8FCqxaC36l1l4iAekgIFDOwDEDIP2psUEAMMoY2ZuONFVUpLdWMqVO66P9ZdBWw/ZZY9GXAfZqpolKCL4+1VtfJj/omOLuWm5VS13SC/dHloX1UYtcld5lA4Lr0MCvUyMpc7sAAg+1M78WUh5HW81ChEIKtqh6rVUXgwVxJCZNsCYOwCDOUxySgBa7LY/dkfzR04XzmjLGG3guLy2UvdByTx3J7a+JNSkSESdg6KfVBj+lMaWuMyniPObMd0c9c85iilwIpHkSZqQyudNNGBmGJg7hIoK2gKzOfQKJt27xawc41dtytSELesijEMuCISyOm5ED3lCazbXaJv6fAjvrjyShcaUPlDidy0mzoHI6eP4hL43TVjG1R/erL2ZAm2IF9ax0oW+9EWiLH0w4PSl02bMhW4PYIFF0diwnHFb5VoTQYc5VBmZrAcLDIgf2FTiQ7p+LyxQcvijO5RkpLO4cDBovIQ+JU5NkWR1bPSFekMByW3u0tcMChBC8Cmrq8yF0iU2ue3ILpZolYckoYliHzsG5n6rOWchwrdqJUAttkDjS2ll4fkuwCB9Y5jWJLHhOnMvPKmOy1yfndichNt4Up2vp9mPAEcGqbdjNM+o6hf281cUaO+2mo2ucTaB/ym4DbB/34/MMfkdQXEOgeiR7RQSAGIYnZYFAQMvj6S8XZR+Ooa5rAuFfg/bAfrX1eVO0K95RMuySpzwIvBBtS6BGXNvkhnKbps04fmrt92CivS315ImSyN+n1iZXAorXEyaly0A1j9eNeYJNLgcIjk5KtVWKJ0CrzNm+MRWjUvekP4KPcztHJyLfAMrHCH3OqkahcMRLEGguZ3uuaPWh466XnzrTUCjFxESenwoxqJBNClEnPSAA3Xk3i5msPzj2ZRPntcfR8n7o+Az9VmS6jGBrExEWc2oHRU9XXP/ppLi+UQ17zkyVOjPxWcf+dz0ARPqQ6LCc7NZ+KwGCkLEghQN9GlQEDvxL+nfGRELZefRBi0GOayGBZmGKPqkCtGoyj55qnIRVmmMck0Bud+f8s6E1brZPq/YL8hNHJqacaKd4/2v4CgdaZJ2zGqYAAAAAASUVORK5CYII=" alt="分享链接" data-v-5b14e8e0></button></div><!-- 桌面端:头部下方左右布局,助手固定右侧 --><aside class="assistant-layout" style="width:450px;" data-v-5b14e8e0><div class="assistant-resize-handle" title="拖动调整宽度,向右拖至最窄可关闭" data-v-5b14e8e0></div><div class="assistant-panel" data-v-5b14e8e0><div class="assistant-loading" data-v-5b14e8e0><div class="assistant-loading-inner" data-v-5b14e8e0><span class="assistant-spinner" aria-hidden="true" data-v-5b14e8e0></span><span class="assistant-loading-text" data-v-5b14e8e0>智能助手加载中...</span></div></div><div data-chat-ui-embedded class="assistant-chat" data-v-5b14e8e0></div><!----></div></aside><!-- 后续启用:底部输入条(展开态)
<form
v-if="showFloatingAssistant && quickBarExpanded"
class="assistant-quick-bar"
:class="{ 'assistant-quick-bar--mobile': isMobile }"
role="search"
aria-label="和 AI 开始对话"
@submit.prevent="submitFabQuery"
>
<input
v-model="fabQuery"
type="text"
class="assistant-quick-bar-input"
placeholder="和 AI 说点什么,按 Enter 直接发送..."
maxlength="500"
aria-label="向 AI 提问"
/>
<button
type="button"
class="assistant-quick-bar-submit"
:title="fabQuery.trim() ? '发送并打开智能助手' : '收起输入框'"
@click="onAiBallClick"
>
AI
</button>
</form>
--><!-- 助手收起后:可拖动悬浮球,点击打开智能助手 --><!----><!-- 移动端:保留抽屉 --><!----><!--]--><!--v-if--></div><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><div class="toggleColor" style="display:none;"><button class="toggle-color-mode-button" title="切换颜色模式"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></div><nav class="navbar-items" id="customize-sidebar"><!--[--><div class="navbar-item"><a href="/" class="" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="API"><span class="title">API</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="API"><span class="title">API</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/freshman/ty_rookie.html" class="" aria-label="投研新手教程"><!--[--><!--]--> 投研新手教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/freshman/rookie.html" class="" aria-label="QMT新手教程"><!--[--><!--]--> QMT新手教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="内置Python"><!--[--><!--]--> 内置Python <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/nativeApi/start_now.html" class="" aria-label="XtQuant文档"><!--[--><!--]--> XtQuant文档 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/VBA/start_now.html" class="" aria-label="VBA"><!--[--><!--]--> VBA <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="数据字典"><span class="title">数据字典</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="数据字典"><span class="title">数据字典</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/dictionary/" class="" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/stock.html" class="" aria-label="股票数据"><!--[--><!--]--> 股票数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/industry.html" class="" aria-label="行业概念数据"><!--[--><!--]--> 行业概念数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/indexes.html" class="" aria-label="指数数据"><!--[--><!--]--> 指数数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/future.html" class="" aria-label="期货数据"><!--[--><!--]--> 期货数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/option.html" class="" aria-label="期权数据"><!--[--><!--]--> 期权数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/floorfunds.html" class="" aria-label="场内基金数据"><!--[--><!--]--> 场内基金数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/bond.html" class="" aria-label="债券数据"><!--[--><!--]--> 债券数据 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/question_answer.html" class="" aria-label="常见问题"><!--[--><!--]--> 常见问题 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/scenario_based_example.html" class="" aria-label="场景化示例"><!--[--><!--]--> 场景化示例 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/xuntou_factor.html" class="" aria-label="迅投因子"><!--[--><!--]--> 迅投因子 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/dictionary/data_browser_barra_factor.html" class="" aria-label="数据浏览器"><!--[--><!--]--> 数据浏览器 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="策略迁移"><span class="title">策略迁移</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="策略迁移"><span class="title">策略迁移</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/strategy/JoinQuant2QMT.html" class="" aria-label="聚宽策略"><!--[--><!--]--> 聚宽策略 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span></span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="客服QQ: 810315303"><!--[--><!--]--> 客服QQ: 810315303 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active" aria-label="联系方式: 18309226715"><!--[--><!--]--> 联系方式: 18309226715 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="视频教程"><span class="title">视频教程</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="视频教程"><span class="title">视频教程</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/videos/touyan/ty_register_install.html" class="" aria-label="投研端教程"><!--[--><!--]--> 投研端教程 <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.xuntou.net/plugin.php?id=keke_video_base" rel="noopener noreferrer" target="_blank" aria-label="迅投学堂"><!--[--><!--]--> 迅投学堂 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><!--]--></ul></div></div><!--]--></nav><div class="newSider" style="display:none;"><div class="fromBtn"><span> 投研平台 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></span></div><div class="fromBtn" style="display:none;"><span> 迅投社区 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></span></div><!-- <div class="navbar-item fromBtn" v-if="info.isMobile">
<span
@click="getNUrl('crowdfunding')"
>
特色众筹
<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path>
<polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg>
<span class="external-link-icon-sr-only">在新窗口打开</span>
</span>
</span>
</div> --><div class="navbar-item"><a class="external-link" href="http://www.thinktrader.net" rel="noopener noreferrer" target="_blank" aria-label="迅投官网"> 迅投官网 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></a></div><!----></div><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">内置Python <!----></p><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#一、概述" class="router-link-active router-link-exact-active sidebar-item" aria-label="一、概述"><!--[--><!--]--> 一、概述 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#二、场景需求" class="router-link-active router-link-exact-active sidebar-item" aria-label="二、场景需求"><!--[--><!--]--> 二、场景需求 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#回测模型" class="router-link-active router-link-exact-active sidebar-item" aria-label="回测模型"><!--[--><!--]--> 回测模型 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#实盘模型" class="router-link-active router-link-exact-active sidebar-item" aria-label="实盘模型"><!--[--><!--]--> 实盘模型 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/innerApi/start_now.html#三、运行机制对比" class="router-link-active router-link-exact-active sidebar-item" aria-label="三、运行机制对比"><!--[--><!--]--> 三、运行机制对比 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#逐-k-线驱动-handlebar" class="router-link-active router-link-exact-active sidebar-item" aria-label="逐 K 线驱动:handlebar"><!--[--><!--]--> 逐 K 线驱动:handlebar <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#事件驱动-subscribe-订阅推送" class="router-link-active router-link-exact-active sidebar-item" aria-label="事件驱动 subscribe 订阅推送"><!--[--><!--]--> 事件驱动 :subscribe 订阅推送 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#定时任务-run-time-定时运行" class="router-link-active router-link-exact-active sidebar-item" aria-label="定时任务 run_time 定时运行"><!--[--><!--]--> 定时任务 :run_time 定时运行 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#不同机制匹配不同场景需求" class="router-link-active router-link-exact-active sidebar-item" aria-label="不同机制匹配不同场景需求"><!--[--><!--]--> 不同机制匹配不同场景需求 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/innerApi/start_now.html#四、逐-k-线驱动-handlebar-示例" class="router-link-active router-link-exact-active sidebar-item" aria-label="四、逐 K 线驱动(handlebar)示例"><!--[--><!--]--> 四、逐 K 线驱动(handlebar)示例 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#回测示例-基于-handlebar" class="router-link-active router-link-exact-active sidebar-item" aria-label="回测示例-基于 handlebar"><!--[--><!--]--> 回测示例-基于 handlebar <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/innerApi/start_now.html#实盘示例-基于-handlebar" class="router-link-active router-link-exact-active sidebar-item" aria-label="实盘示例-基于 handlebar"><!--[--><!--]--> 实盘示例-基于 handlebar <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/innerApi/start_now.html#五、事件驱动-subscribe-示例" class="router-link-active router-link-exact-active sidebar-item" aria-label="五、事件驱动(subscribe)示例"><!--[--><!--]--> 五、事件驱动(subscribe)示例 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#实盘示例-基于-subscribe" class="router-link-active router-link-exact-active sidebar-item" aria-label="实盘示例-基于 subscribe"><!--[--><!--]--> 实盘示例-基于 subscribe <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/innerApi/start_now.html#六、定时任务-run-time-示例" class="router-link-active router-link-exact-active sidebar-item" aria-label="六、定时任务(run_time)示例"><!--[--><!--]--> 六、定时任务(run_time)示例 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/innerApi/start_now.html#实盘示例-基于-run-time" class="router-link-active router-link-exact-active sidebar-item" aria-label="实盘示例-基于 run_time"><!--[--><!--]--> 实盘示例-基于 run_time <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul></li><li><a href="/innerApi/user_attention.html" class="sidebar-item" aria-label="使用须知"><!--[--><!--]--> 使用须知 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/interface_operation.html" class="sidebar-item" aria-label="界面操作"><!--[--><!--]--> 界面操作 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/variable_convention.html" class="sidebar-item" aria-label="变量约定"><!--[--><!--]--> 变量约定 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/data_structure.html" class="sidebar-item" aria-label="数据结构"><!--[--><!--]--> 数据结构 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/system_function.html" class="sidebar-item" aria-label="系统函数"><!--[--><!--]--> 系统函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/data_function.html" class="sidebar-item" aria-label="行情函数"><!--[--><!--]--> 行情函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/trading_function.html" class="sidebar-item" aria-label="交易函数"><!--[--><!--]--> 交易函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/callback_function.html" class="sidebar-item" aria-label="成交回报实时主推函数"><!--[--><!--]--> 成交回报实时主推函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/quote_function.html" class="sidebar-item" aria-label="引用函数"><!--[--><!--]--> 引用函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/drawing_function.html" class="sidebar-item" aria-label="绘图函数"><!--[--><!--]--> 绘图函数 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/enum_constants.html" class="sidebar-item" aria-label="枚举常量"><!--[--><!--]--> 枚举常量 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/code_examples.html" class="sidebar-item" aria-label="完整示例"><!--[--><!--]--> 完整示例 <!--[--><!--]--></a><!----></li><li><a href="/innerApi/question_answer.html" class="sidebar-item" aria-label="常见问题"><!--[--><!--]--> 常见问题 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page" data-v-3c904194><!--[--><!--]--><div class="theme-default-contents" data-v-3c904194><!----><!--[--><!--]--><div class="theme-default-content" data-v-3c904194><div data-v-3c904194><h3 id="一、概述" tabindex="-1"><a class="header-anchor" href="#一、概述" aria-hidden="true">#</a> 一、概述</h3><p>QMT 极速策略交易系统,以下简称 <strong>QMT 系统</strong>,内置了 <strong><code>3.6 版本</code></strong><code>python</code> 运行环境,提供<strong>行情数据</strong><strong>交易下单</strong>两大核心功能。通过编写 python 脚本,可以完成指标计算,策略编写,策略回测,实盘下单等需求。</p><h3 id="二、场景需求" tabindex="-1"><a class="header-anchor" href="#二、场景需求" aria-hidden="true">#</a> 二、场景需求</h3><p>QMT 系统支持<strong>回测模型</strong><strong>实盘模型</strong></p><p><img src="/assets/内置API_回测模型_实盘模型-a800c759.png" alt=""></p><p><strong>回测模型:</strong> 指在历史 k 线上,自左向右逐根遍历 k 线,以模拟的资金账号记录每日的买卖信号,持仓盈亏,最终展示策略在历史上的净值走势结果。</p><p><strong>实盘模型:</strong> 指在盘中收取最新的动态行情,即时发送买卖信号到交易所,判断委托状态,需要实时重复报撤的模型。</p><br><p><strong>两类模型分别有各自的注意点:</strong></p><h4 id="回测模型" tabindex="-1"><a class="header-anchor" href="#回测模型" aria-hidden="true">#</a> 回测模型</h4><ol><li><p>回测是遍历固定的历史数据:</p><p><img src="/assets/内置API_操作_数据管理_下载全部-d3b5864c.png" alt=""></p><ul><li>首先需要下载历史行情,首次下载可以在界面左上角,点击<code>操作</code>,选择<code>数据管理</code>补充行情,选择回测的周期,如<code>日线</code>,所需的板块数据,如<code>沪深A股板块</code>,时间范围选择<code>全部</code>,下载完整历史行情</li></ul><p><img src="/assets/内置API_批量下载-c98af807.png" alt=""></p><ul><li>其次设置每日定时更新,可以点击客户端右下角<code>行情</code>按钮,在<code>批量下载</code>界面选择需要每天更新的数据,勾选<code>定时下载</code>选项,之后每天在指定时间会自动下载行情数据到本地</li></ul></li><li><p>回测模型取本地数据遍历,不需要向服务器订阅实时行情,应使用 <code>get_market_data_ex</code>函数,指定<code>subscribe</code>参数为<code>False</code>,来读取本地行情数据。</p></li><li><p>回测模型的撮合规则为,指定交易价格在当前k线高低点间的,按指定价格撮合,超过高低点的,按当前 k 线收盘价撮合。委托数量大于可用数量时,按可用数量撮合。</p></li></ol><p><img src="/assets/内置API_基本信息_回测参数-eec55083.png" alt=""></p><ol start="4"><li>回测模型右侧的基本信息,如默认周期,默认主图,在<code>我的界面</code>点击回测时会生效。在行情界面k线下点击回测,以当前 k 线的周期,品种为准。回测必须以<code>副图模式</code>执行,不要选择主图 /主图叠加.</li></ol><h4 id="实盘模型" tabindex="-1"><a class="header-anchor" href="#实盘模型" aria-hidden="true">#</a> 实盘模型</h4><p>当你回测结束,你需要开始实盘模型,注意这里提到的实盘,指的是接收未来 K 线的数据,生成策略信号,进行交易下单。</p><div class="custom-container tip"><p class="custom-container-title">提示</p><p>实盘模型也分<code>模拟柜台模拟交易</code><code>真实柜台实盘交易</code>两种。具体请参考<a href="https://dict.thinktrader.net/innerApi/interface_operation.md#%E9%85%8D%E7%BD%AE%E8%B4%A6%E5%8F%B7" target="_blank" rel="noopener noreferrer">如何配置账号<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></a></p></div><ol><li><p>你要运行实盘模型,QMT 系统提供两种交易模式:</p><ul><li><p>默认的交易模式为<strong>逐 k 线生效</strong> (<code>passorder</code>函数<strong>快速交易</strong><code>quicktrade</code>参数填 <code>0</code> 即默认值),适用与需要在盘中模拟历史上逐 k 线的效果需求。例如选择一分钟周期,将下单判断,下单函数放在<code>handlebar</code>函数内,盘中主图每个分笔 (三秒一次)会触发一次<code>handlebar</code>函数调用,系统会暂存当前<code>handlebar</code>产生的下单信号。三秒后下一个分笔到达时,如果是新的一分钟 k 线的第一个分笔,判断上一个分笔为前一根k线最后分笔,会将暂存的交易信号发送给交易所,完成交易。如到达的下一个分笔不是新一根 k 线的,则判定当前 k 线未完成,丢弃暂存的交易信号。1 分钟 k 线情形,每根k线内会有 20 个分笔,前 19 个分笔产生的信号会被丢弃,最后一个分笔的信号,会在下一根k线,首个分笔到达时,延迟三秒发出。系统自带的<code>ContxtInfo</code>也做了同样的等待,回退处理,逐 k 线模式的交易记录可以保存在<code>ContextInfo</code>对象的属性中。详细说明参见 <a href="/innerApi/question_answer.html#%E7%B3%BB%E7%BB%9F%E5%AF%B9%E8%B1%A1-contextinfo-%E9%80%90-k-%E7%BA%BF%E4%BF%9D%E5%AD%98%E7%9A%84%E6%9C%BA%E5%88%B6" class="">常见问题:系统对象ContextInfo 逐K线保存的机制</a></p></li><li><p>QMT 系统也支持立即下单的交易模式,<code>passorder</code>函数的<strong>快速交易</strong><code>quicktrade</code>参数填 <code>2</code>,可以在运行后立刻发出委托,不对信号进行等待,丢弃的操作。此时需要用普通的全局变量(如自定义一个<code>Class a()</code>)保存委托状态,不能存在<code>ContextInfo</code>的属性里。参见<a href="/innerApi/code_examples.html#%E4%BD%BF%E7%94%A8%E5%BF%AB%E9%80%9F%E4%BA%A4%E6%98%93%E5%8F%82%E6%95%B0%E5%A7%94%E6%89%98" class="">使用快速交易参数委托</a><a href="/innerApi/code_examples.html#%E8%B0%83%E6%95%B4%E8%87%B3%E7%9B%AE%E6%A0%87%E6%8C%81%E4%BB%93" class="">调整至目标持仓Demo</a></p></li></ul></li><li><p>实盘的撮合规则以交易所为准。股票品种的话,价格不能超过 2% 的价格笼子否则废单。数量超过可用数量时会废单。</p></li><li><p>实盘模型需要在模型交易界面执行。模型交易界面,选择新建策略交易,添加需要的模型。运行模式可以选择<code>模拟</code><code>实盘</code></p><ul><li>选择<code>模拟信号模式</code>,在策略信号界面显示买卖信号,不实际发出委托。具体请参考<a href="/innerApi/variable_convention.html#%E6%A8%A1%E6%8B%9F%E4%BF%A1%E5%8F%B7%E6%A8%A1%E5%BC%8F" class="">模拟信号模式</a></li><li>选择<code>实盘交易模式</code>,显示的策略信号会实际发出到交易所。具体请参考<a href="/innerApi/variable_convention.html#%E5%AE%9E%E7%9B%98%E4%BA%A4%E6%98%93%E6%A8%A1%E5%BC%8F" class="">实盘交易模式</a></li></ul></li></ol><div class="custom-container tip"><p class="custom-container-title">提示</p><p>运行模式的<code>模拟</code><code>实盘</code>,与您使用的账号实际是<code>实盘账号(真实交易所柜台)</code>或是<code>模拟账号(模拟交易柜台)</code>无关。相关账号申请需要联系您做所在券商的工作人员,或者购买<a href="https://xuntou.net/#/productvip" target="_blank" rel="noopener noreferrer">投研端账号<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></a>获取模拟柜台撮合服务。</p></div><h3 id="三、运行机制对比" tabindex="-1"><a class="header-anchor" href="#三、运行机制对比" aria-hidden="true">#</a> 三、运行机制对比</h3><p>QMT 系统提供两大类(事件驱动与定时任务),共三种运行机制。</p><p><img src="/assets/内置API_三种机制对比-bc32690d.png" alt=""></p><h4 id="逐-k-线驱动-handlebar" tabindex="-1"><a class="header-anchor" href="#逐-k-线驱动-handlebar" aria-hidden="true">#</a> 逐 K 线驱动:<code>handlebar</code></h4><p><code>handlebar</code><strong>主图历史 k 线</strong>+<strong>盘中订阅推送</strong>。运行开始时,所选周期历史 k 线从左向右每根触发一次<code>handlebar</code>函数调用。盘中时,主图品种每个新分笔数据到达,触发一次<code>handlebar</code>函数调用。</p><div class="custom-container tip"><p class="custom-container-title">提示</p><p>盘中分笔驱动,但是逐 K 线生效。请参考<a href="/innerApi/question_answer.html#%E7%B3%BB%E7%BB%9F%E5%AF%B9%E8%B1%A1-contextinfo-%E9%80%90-k-%E7%BA%BF%E4%BF%9D%E5%AD%98%E7%9A%84%E6%9C%BA%E5%88%B6" class="">常见问题:系统对象ContextInfo 逐K线保存的机制</a></p></div><h4 id="事件驱动-subscribe-订阅推送" tabindex="-1"><a class="header-anchor" href="#事件驱动-subscribe-订阅推送" aria-hidden="true">#</a> 事件驱动 <code>subscribe</code> 订阅推送</h4><p>盘中订阅指定品种的分笔数据,新分笔到达时,触发指定的回调函数。</p><h4 id="定时任务-run-time-定时运行" tabindex="-1"><a class="header-anchor" href="#定时任务-run-time-定时运行" aria-hidden="true">#</a> 定时任务 <code>run_time</code> 定时运行</h4><p>指定固定的时间间隔,持续触发指定的回调函数.</p><h4 id="不同机制匹配不同场景需求" tabindex="-1"><a class="header-anchor" href="#不同机制匹配不同场景需求" aria-hidden="true">#</a> 不同机制匹配不同场景需求</h4><p><img src="/assets/内置API_不同机制匹配不同场景需求-6942d075.png" alt=""></p><table><thead><tr><th>机制</th><th>分类</th><th>特点</th><th>匹配需求</th></tr></thead><tbody><tr><td>逐 K 线运行(<code>handlebar</code></td><td>事件驱动</td><td>同时支持历史回测和盘中可模拟逐K线效果</td><td>在实盘中模拟逐K线运行的效果</td></tr><tr><td>订阅推送(<code>subscribe</code></td><td>事件驱动</td><td>盘中行情分笔触发函数调用</td><td>盘中随分笔行情判断交易</td></tr><tr><td>定时运行(<code>run_time</code></td><td>定时任务</td><td>固定间隔触发调用</td><td>盘中固定时间间隔判断交易</td></tr></tbody></table><h3 id="四、逐-k-线驱动-handlebar-示例" tabindex="-1"><a class="header-anchor" href="#四、逐-k-线驱动-handlebar-示例" aria-hidden="true">#</a> 四、逐 K 线驱动(handlebar)示例</h3><p>因此,结合不同场景需求(回测或实盘),针对不同的机制(定时任务或事件驱动),我们分别给出回测与实盘的完整示例,复制到策略编辑器中即可使用。</p><p>在编写策略前,有以下注意事项:</p><div class="custom-container danger"><p class="custom-container-title">警告</p><p>在编写一个策略时,首先需要在代码的最前一行写上: <code>#coding:gbk</code> 统一脚本的编码格式是<code>GBK</code></p><p>缩进需要统一 全部统一为<code>····</code>或者<code>-&gt;</code></p></div><h4 id="回测示例-基于-handlebar" tabindex="-1"><a class="header-anchor" href="#回测示例-基于-handlebar" aria-hidden="true">#</a> 回测示例-基于 handlebar</h4><p>回测的操作流程请参考:<a href="/innerApi/interface_operation.html#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B" class="">界面操作-策略回测</a></p><p>复制代码以下代码到策略编辑器:</p><div class="vp-tabs"><div class="vp-tabs-nav" role="tablist"><button type="button" class="vp-tab-nav active" role="tab" aria-controls="tab-258-0" aria-selected="true">python</button></div><!--[--><div class="vp-tab active" id="tab-258-0" role="tabpanel" aria-expanded="true"><div class="language-python line-numbers-mode" data-ext="py"><pre class="shiki dracula" style="background-color:#282A36;" tabindex="0"><code><span class="line"><span style="color:#6272A4;">#coding:gbk</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6272A4;">#导入常用库</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> pandas </span><span style="color:#FF79C6;">as</span><span style="color:#F8F8F2;"> pd</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> numpy </span><span style="color:#FF79C6;">as</span><span style="color:#F8F8F2;"> np</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> talib</span></span>
<span class="line"><span style="color:#6272A4;">#示例说明:本策略,通过计算快慢双均线,在金叉时买入,死叉时做卖出 点击回测运行 主图选择要交易的股票品种</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">init</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#init handlebar函数的入参是ContextInfo对象 可以缩写为C</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#设置测试标的为主图品种</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.stock</span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.stockcode </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">.</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;">C.market</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#line1和line2分别为两条均线期数</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.line1</span><span style="color:#FF79C6;">=</span><span style="color:#BD93F9;">10</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#快线参数</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.line2</span><span style="color:#FF79C6;">=</span><span style="color:#BD93F9;">20</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#慢线参数</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#accountid为测试的ID 回测模式资金账号可以填任意字符串</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.accountid </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">testS</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;"> </span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">handlebar</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#当前k线日期</span></span>
<span class="line"><span style="color:#F8F8F2;"> bar_date </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> timetag_to_datetime(C.get_bar_timetag(C.barpos), </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">%Y%m</span><span style="color:#BD93F9;">%d</span><span style="color:#F1FA8C;">%H%M%S</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#回测不需要订阅最新行情使用本地数据速度更快 指定subscribe参数为否. 如果回测多个品种 需要先下载对应周期历史数据 </span></span>
<span class="line"><span style="color:#F8F8F2;"> local_data </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.get_market_data_ex([</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">close</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">], [C.stock], </span><span style="color:#FFB86C;font-style:italic;">end_time</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> bar_date, </span><span style="color:#FFB86C;font-style:italic;">period</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.period, </span><span style="color:#FFB86C;font-style:italic;">count</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">max</span><span style="color:#F8F8F2;">(C.line1, C.line2), </span><span style="color:#FFB86C;font-style:italic;">subscribe</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">False</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> close_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;font-style:italic;">list</span><span style="color:#F8F8F2;">(local_data[C.stock].iloc[</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;">])</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#将获取的历史数据转换为DataFrame格式方便计算</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#如果目前未持仓,同时快线穿过慢线,则买入8成仓位</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">len</span><span style="color:#F8F8F2;">(close_list) </span><span style="color:#FF79C6;">&lt;</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(bar_date, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">行情不足 跳过</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> line1_mean </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">round</span><span style="color:#F8F8F2;">(np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">C.line1</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;">]), </span><span style="color:#BD93F9;">2</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> line2_mean </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">round</span><span style="color:#F8F8F2;">(np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">C.line2</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;">]), </span><span style="color:#BD93F9;">2</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">bar_date</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 短均线</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">line1_mean</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 长均线</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">line2_mean</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">&quot;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> account </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> get_trade_detail_data(</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">test</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">stock</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">account</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> account </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> account[</span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;">]</span></span>
<span class="line"><span style="color:#F8F8F2;"> available_cash </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;font-style:italic;">int</span><span style="color:#F8F8F2;">(account.m_dAvailable)</span></span>
<span class="line"><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> get_trade_detail_data(</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">test</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">stock</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">position</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> {i.m_strInstrumentID </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">.</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> i.m_strExchangeID : i.m_nVolume </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> i </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> holdings}</span></span>
<span class="line"><span style="color:#F8F8F2;"> holding_vol </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> holdings[C.stock] </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> C.stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">else</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> holding_vol </span><span style="color:#FF79C6;">==</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> line1_mean </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> line2_mean:</span></span>
<span class="line"><span style="color:#F8F8F2;"> vol </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;font-style:italic;">int</span><span style="color:#F8F8F2;">(available_cash </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">] </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span><span style="color:#F8F8F2;">) </span><span style="color:#FF79C6;">*</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单开仓</span></span>
<span class="line"><span style="color:#F8F8F2;"> passorder(</span><span style="color:#BD93F9;">23</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">1101</span><span style="color:#F8F8F2;">, C.accountid, C.stock, </span><span style="color:#BD93F9;">5</span><span style="color:#F8F8F2;">, </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, vol, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">bar_date</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 开仓&quot;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.draw_text(</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;"></span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#如果目前持仓中,同时快线下穿慢线,则全部平仓</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">elif</span><span style="color:#F8F8F2;"> holding_vol </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> line1_mean </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> line2_mean:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#状态变更为未持仓</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.holding</span><span style="color:#FF79C6;">=</span><span style="color:#BD93F9;">False</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单平仓</span></span>
<span class="line"><span style="color:#F8F8F2;"> passorder(</span><span style="color:#BD93F9;">24</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">1101</span><span style="color:#F8F8F2;">, C.accountid, C.stock, </span><span style="color:#BD93F9;">5</span><span style="color:#F8F8F2;">, </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, holding_vol, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">bar_date</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 平仓&quot;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.draw_text(</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;"></span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--]--></div><p><strong>基础信息设置</strong> 请参考<a href="/innerApi/interface_operation.html#%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF-%E5%AD%97%E6%AE%B5%E6%8F%8F%E8%BF%B0" class="">基础信息-字段描述</a></p><p><strong>回测参数设置</strong> 请参考<a href="/innerApi/interface_operation.html#%E5%9B%9E%E6%B5%8B%E5%8F%82%E6%95%B0-%E5%AD%97%E6%AE%B5%E6%8F%8F%E8%BF%B0" class="">回测参数-字段描述</a></p><h4 id="实盘示例-基于-handlebar" tabindex="-1"><a class="header-anchor" href="#实盘示例-基于-handlebar" aria-hidden="true">#</a> 实盘示例-基于 handlebar</h4><p>实盘的操作流程请参考:<a href="/innerApi/interface_operation.html#%E7%AD%96%E7%95%A5%E8%BF%90%E8%A1%8C" class="">界面操作-模型交易</a></p><p>复制代码以下代码到策略编辑器:</p><div class="vp-tabs"><div class="vp-tabs-nav" role="tablist"><button type="button" class="vp-tab-nav active" role="tab" aria-controls="tab-278-0" aria-selected="true">python</button></div><!--[--><div class="vp-tab active" id="tab-278-0" role="tabpanel" aria-expanded="true"><div class="language-python line-numbers-mode" data-ext="py"><pre class="shiki dracula" style="background-color:#282A36;" tabindex="0"><code><span class="line"><span style="color:#6272A4;">#coding:gbk</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6272A4;"># 导入包</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> pandas </span><span style="color:#FF79C6;">as</span><span style="color:#F8F8F2;"> pd</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> numpy </span><span style="color:#FF79C6;">as</span><span style="color:#F8F8F2;"> np</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> datetime</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6272A4;">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color:#6272A4;">示例说明:双均线实盘策略,通过计算快慢双均线,在金叉时买入,死叉时做卖出</span></span>
<span class="line"><span style="color:#6272A4;">&quot;&quot;&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">class</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">a</span><span style="color:#F8F8F2;">():</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">pass</span></span>
<span class="line"><span style="color:#F8F8F2;">A </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> a() </span><span style="color:#6272A4;">#创建空的类的实例 用来保存委托状态 </span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">init</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.stock</span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.stockcode </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">.</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> C.market </span><span style="color:#6272A4;">#品种为模型交易界面选择品种</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.acct</span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> account </span><span style="color:#6272A4;">#账号为模型交易界面选择账号</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.acct_type</span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> accountType </span><span style="color:#6272A4;">#账号类型为模型交易界面选择账号</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.amount </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">10000</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#单笔买入金额 触发买入信号后买入指定金额</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.line1</span><span style="color:#FF79C6;">=</span><span style="color:#BD93F9;">17</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#快线周期</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.line2</span><span style="color:#FF79C6;">=</span><span style="color:#BD93F9;">27</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#慢线周期</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.waiting_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> [] </span><span style="color:#6272A4;">#未查到委托列表 存在未查到委托情况暂停后续报单 防止超单</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.buy_code </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">23</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.acct_type </span><span style="color:#FF79C6;">==</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">STOCK</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">else</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">33</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#买卖代码 区分股票 与 两融账号</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.sell_code </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">24</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.acct_type </span><span style="color:#FF79C6;">==</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">STOCK</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">else</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">34</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&#39;双均线实盘示例</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.stock</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.acct</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.acct_type</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 单笔买入金额</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.amount</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">handlebar</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#跳过历史k线</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">not</span><span style="color:#F8F8F2;"> C.is_last_bar():</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">return</span></span>
<span class="line"><span style="color:#F8F8F2;"> now </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> datetime.datetime.now()</span></span>
<span class="line"><span style="color:#F8F8F2;"> now_time </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> now.strftime(</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">%H%M%S</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;"># 跳过非交易时间</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> now_time </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">093000</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">or</span><span style="color:#F8F8F2;"> now_time </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">150000</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;">:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">return</span></span>
<span class="line"><span style="color:#F8F8F2;"> account </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> get_trade_detail_data(A.acct, A.acct_type, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">account</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">len</span><span style="color:#F8F8F2;">(account)</span><span style="color:#FF79C6;">==</span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;">:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&#39;账号</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.acct</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 未登录 请检查&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">return</span></span>
<span class="line"><span style="color:#F8F8F2;"> account </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> account[</span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;">]</span></span>
<span class="line"><span style="color:#F8F8F2;"> available_cash </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;font-style:italic;">int</span><span style="color:#F8F8F2;">(account.m_dAvailable)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#如果有未查到成交 查询成交</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.waiting_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> found_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> []</span></span>
<span class="line"><span style="color:#F8F8F2;"> deals </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> get_trade_detail_data(A.acct, A.acct_type, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">deal</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> deal </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> deals:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> deal.m_strRemark </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.waiting_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> found_list.append(deal.m_strRemark)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.waiting_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> [i </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> i </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.waiting_list </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> i </span><span style="color:#FF79C6;">not</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> found_list]</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.waiting_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;当前有未查到委托 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.waiting_list</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 暂停后续报单&quot;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">return</span></span>
<span class="line"><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> get_trade_detail_data(A.acct, A.acct_type, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">position</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> {i.m_strInstrumentID </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">.</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">+</span><span style="color:#F8F8F2;"> i.m_strExchangeID : i.m_nCanUseVolume </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> i </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> holdings}</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#获取行情数据</span></span>
<span class="line"><span style="color:#F8F8F2;"> data </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.get_market_data_ex([</span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">close</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;">],[A.stock],</span><span style="color:#FFB86C;font-style:italic;">period</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">1d</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">,</span><span style="color:#FFB86C;font-style:italic;">count</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">max</span><span style="color:#F8F8F2;">(A.line1, A.line2)</span><span style="color:#FF79C6;">+</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> close_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> data[A.stock].values</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">len</span><span style="color:#F8F8F2;">(close_list) </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">max</span><span style="color:#F8F8F2;">(A.line1, A.line2)</span><span style="color:#FF79C6;">+</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">行情长度不足(新上市或最近有停牌) 跳过运行</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">return</span></span>
<span class="line"><span style="color:#F8F8F2;"> pre_line1 </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">A.line1</span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">])</span></span>
<span class="line"><span style="color:#F8F8F2;"> pre_line2 </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">A.line2</span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">])</span></span>
<span class="line"><span style="color:#F8F8F2;"> current_line1 </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">A.line1</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;">])</span></span>
<span class="line"><span style="color:#F8F8F2;"> current_line2 </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> np.mean(close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;">A.line2</span><span style="color:#FF79C6;">:</span><span style="color:#F8F8F2;">])</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#如果快线穿过慢线,则买入委托 当前无持仓 买入</span></span>
<span class="line"><span style="color:#F8F8F2;"> vol </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;font-style:italic;">int</span><span style="color:#F8F8F2;">(A.amount </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> close_list[</span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">] </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span><span style="color:#F8F8F2;">) </span><span style="color:#FF79C6;">*</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#买入数量 向下取整到100的整数倍</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.amount </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> available_cash </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> vol </span><span style="color:#FF79C6;">&gt;=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> A.stock </span><span style="color:#FF79C6;">not</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> pre_line1 </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> pre_line2 </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> current_line1 </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> current_line2:</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单开仓 ,参数说明可搜索PY交易函数 passorder</span></span>
<span class="line"><span style="color:#F8F8F2;"> msg </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;双均线实盘 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.stock</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 上穿均线 买入 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">vol</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">&quot;</span></span>
<span class="line"><span style="color:#F8F8F2;"> passorder(A.buy_code, </span><span style="color:#BD93F9;">1101</span><span style="color:#F8F8F2;">, A.acct, A.stock, </span><span style="color:#BD93F9;">14</span><span style="color:#F8F8F2;">, </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, vol, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">双均线实盘</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">2</span><span style="color:#F8F8F2;"> , msg, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(msg)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.waiting_list.append(msg)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#如果快线下穿慢线,则卖出委托</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> A.stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> holdings </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> holdings[A.stock] </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> pre_line1 </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> pre_line2 </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> current_line1 </span><span style="color:#FF79C6;">&lt;</span><span style="color:#F8F8F2;"> current_line2:</span></span>
<span class="line"><span style="color:#F8F8F2;"> msg </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;双均线实盘 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">A.stock</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 下穿均线 卖出 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">holdings[A.stock]</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">&quot;</span></span>
<span class="line"><span style="color:#F8F8F2;"> passorder(A.sell_code, </span><span style="color:#BD93F9;">1101</span><span style="color:#F8F8F2;">, A.acct, A.stock, </span><span style="color:#BD93F9;">14</span><span style="color:#F8F8F2;">, </span><span style="color:#FF79C6;">-</span><span style="color:#BD93F9;">1</span><span style="color:#F8F8F2;">, holdings[A.stock], </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">双均线实盘</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#BD93F9;">2</span><span style="color:#F8F8F2;"> , msg, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(msg)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.waiting_list.append(msg)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--]--></div><div class="custom-container danger"><p class="custom-container-title">警告</p><p>对于立刻下单的模型需要用普通的全局变量来保存状态不能ContextInfo对象存详细说明参考<a href="/innerApi/question_answer.html#%E7%B3%BB%E7%BB%9F%E5%AF%B9%E8%B1%A1-contextinfo-%E9%80%90-k-%E7%BA%BF%E4%BF%9D%E5%AD%98%E7%9A%84%E6%9C%BA%E5%88%B6" class="">常见问题:系统对象ContextInfo 逐K线保存的机制</a></p></div><p>更多示例请参见<a href="/innerApi/code_examples.html" class="">完整示例</a></p><h3 id="五、事件驱动-subscribe-示例" tabindex="-1"><a class="header-anchor" href="#五、事件驱动-subscribe-示例" aria-hidden="true">#</a> 五、事件驱动(subscribe)示例</h3><h4 id="实盘示例-基于-subscribe" tabindex="-1"><a class="header-anchor" href="#实盘示例-基于-subscribe" aria-hidden="true">#</a> 实盘示例-基于 subscribe</h4><div class="vp-tabs"><div class="vp-tabs-nav" role="tablist"><button type="button" class="vp-tab-nav active" role="tab" aria-controls="tab-297-0" aria-selected="true">python</button></div><!--[--><div class="vp-tab active" id="tab-297-0" role="tabpanel" aria-expanded="true"><div class="language-python line-numbers-mode" data-ext="py"><pre class="shiki dracula" style="background-color:#282A36;" tabindex="0"><code><span class="line"><span style="color:#6272A4;">#coding:gbk</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">class</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">a</span><span style="color:#F8F8F2;">():</span><span style="color:#FF79C6;">pass</span></span>
<span class="line"><span style="color:#F8F8F2;">A </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> a()</span></span>
<span class="line"><span style="color:#F8F8F2;">A.bought_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> []</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F8F8F2;">account </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">testaccount</span><span style="color:#E9F284;">&#39;</span></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">init</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单函数的参数需要 ContextInfo对象 在init中定义行情回调函数 可以用到init函数的入参 不用手动传入 </span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">callback_func</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">data</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#print(data)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> data:</span></span>
<span class="line"><span style="color:#F8F8F2;"> current_price </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> data[stock][</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">close</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">]</span></span>
<span class="line"><span style="color:#F8F8F2;"> pre_price </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> data[stock][</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">preClose</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">]</span></span>
<span class="line"><span style="color:#F8F8F2;"> ratio </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> current_price </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> pre_price </span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">1</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(stock, C.get_stock_name(stock), </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">当前涨幅</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, ratio)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> ratio </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">not</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.bought_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> msg </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;当前涨幅 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">ratio</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 大于0 买入100股&quot;</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(msg)</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单函数passorder 安全起见处于注释状态 需要实际测试下单交易时再放开</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#passorder(23, 1101, account, stock, 5, -1, 100, &#39;订阅下单示例&#39;, 2, msg, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.bought_list.append(stock)</span></span>
<span class="line"><span style="color:#F8F8F2;"> stock_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> [</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">600000.SH</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">000001.SZ</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">]</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> stock_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.subscribe_quote(stock, </span><span style="color:#FFB86C;font-style:italic;">period</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">1d</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">, </span><span style="color:#FFB86C;font-style:italic;">callback</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> callback_func)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--]--></div><h3 id="六、定时任务-run-time-示例" tabindex="-1"><a class="header-anchor" href="#六、定时任务-run-time-示例" aria-hidden="true">#</a> 六、定时任务(run_time)示例</h3><h4 id="实盘示例-基于-run-time" tabindex="-1"><a class="header-anchor" href="#实盘示例-基于-run-time" aria-hidden="true">#</a> 实盘示例-基于 run_time</h4><div class="vp-tabs"><div class="vp-tabs-nav" role="tablist"><button type="button" class="vp-tab-nav active" role="tab" aria-controls="tab-308-0" aria-selected="true">python</button></div><!--[--><div class="vp-tab active" id="tab-308-0" role="tabpanel" aria-expanded="true"><div class="language-python line-numbers-mode" data-ext="py"><pre class="shiki dracula" style="background-color:#282A36;" tabindex="0"><code><span class="line"><span style="color:#6272A4;">#coding:gbk</span></span>
<span class="line"><span style="color:#FF79C6;">import</span><span style="color:#F8F8F2;"> time, datetime</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">class</span><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">a</span><span style="color:#F8F8F2;">():</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">pass</span></span>
<span class="line"><span style="color:#F8F8F2;">A </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> a()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">init</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.hsa </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.get_stock_list_in_sector(</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">沪深A股</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.vol_dict </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> {}</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.hsa:</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.vol_dict[stock] </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.get_last_volume(stock)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.bought_list </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> []</span></span>
<span class="line"><span style="color:#F8F8F2;"> C.run_time(</span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">f</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">1nSecond</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;">, </span><span style="color:#E9F284;">&quot;</span><span style="color:#F1FA8C;">2019-10-14 13:20:00</span><span style="color:#E9F284;">&quot;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF79C6;">def</span><span style="color:#F8F8F2;"> </span><span style="color:#50FA7B;">f</span><span style="color:#F8F8F2;">(</span><span style="color:#FFB86C;font-style:italic;">C</span><span style="color:#F8F8F2;">):</span></span>
<span class="line"><span style="color:#F8F8F2;"> t0 </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> time.time()</span></span>
<span class="line"><span style="color:#F8F8F2;"> now </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> datetime.datetime.now()</span></span>
<span class="line"><span style="color:#F8F8F2;"> full_tick </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> C.get_full_tick(A.hsa)</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_market_value </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_ratio </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span></span>
<span class="line"><span style="color:#F8F8F2;"> count </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">for</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.hsa:</span></span>
<span class="line"><span style="color:#F8F8F2;"> ratio </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> full_tick[stock][</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">lastPrice</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">] </span><span style="color:#FF79C6;">/</span><span style="color:#F8F8F2;"> full_tick[stock][</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">lastClose</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">] </span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">1</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">if</span><span style="color:#F8F8F2;"> ratio </span><span style="color:#FF79C6;">&gt;</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">0.09</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">and</span><span style="color:#F8F8F2;"> stock </span><span style="color:#FF79C6;">not</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">in</span><span style="color:#F8F8F2;"> A.bought_list:</span></span>
<span class="line"><span style="color:#F8F8F2;"> msg </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> </span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&quot;</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">now</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">stock</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">C.get_stock_name(stock)</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 当前涨幅 </span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">ratio</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 大于5% 买入100股&quot;</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#下单示例 安全起见处于注释状态 需要实际测试下单时可以放开 </span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#6272A4;">#passorder(23, 1101, account, stock, 5, -1, 100, &#39;示例策略&#39;, 2, msg, C)</span></span>
<span class="line"><span style="color:#F8F8F2;"> A.bought_list.append(stock)</span></span>
<span class="line"><span style="color:#F8F8F2;"> market_value </span><span style="color:#FF79C6;">=</span><span style="color:#F8F8F2;"> full_tick[stock][</span><span style="color:#E9F284;">&#39;</span><span style="color:#F1FA8C;">lastPrice</span><span style="color:#E9F284;">&#39;</span><span style="color:#F8F8F2;">] </span><span style="color:#FF79C6;">*</span><span style="color:#F8F8F2;"> A.vol_dict[stock]</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_ratio </span><span style="color:#FF79C6;">+=</span><span style="color:#F8F8F2;"> ratio </span><span style="color:#FF79C6;">*</span><span style="color:#F8F8F2;"> market_value</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_market_value </span><span style="color:#FF79C6;">+=</span><span style="color:#F8F8F2;"> market_value</span></span>
<span class="line"><span style="color:#F8F8F2;"> count </span><span style="color:#FF79C6;">+=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">1</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_ratio </span><span style="color:#FF79C6;">/=</span><span style="color:#F8F8F2;"> total_market_value</span></span>
<span class="line"><span style="color:#F8F8F2;"> total_ratio </span><span style="color:#FF79C6;">*=</span><span style="color:#F8F8F2;"> </span><span style="color:#BD93F9;">100</span></span>
<span class="line"><span style="color:#F8F8F2;"> </span><span style="color:#8BE9FD;">print</span><span style="color:#F8F8F2;">(</span><span style="color:#FF79C6;">f</span><span style="color:#F1FA8C;">&#39;</span><span style="color:#BD93F9;">{</span><span style="color:#F8F8F2;">now</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;"> 当前A股加权涨幅 </span><span style="color:#BD93F9;">{</span><span style="color:#8BE9FD;">round</span><span style="color:#F8F8F2;">(total_ratio, </span><span style="color:#BD93F9;">2</span><span style="color:#F8F8F2;">)</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">% 函数运行耗时</span><span style="color:#BD93F9;">{</span><span style="color:#8BE9FD;">round</span><span style="color:#F8F8F2;">(time.time()</span><span style="color:#FF79C6;">-</span><span style="color:#F8F8F2;"> t0, </span><span style="color:#BD93F9;">5</span><span style="color:#F8F8F2;">)</span><span style="color:#BD93F9;">}</span><span style="color:#F1FA8C;">&#39;</span><span style="color:#F8F8F2;">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--]--></div></div></div><!--[--><!--]--></div><footer class="page-meta pageFooter" data-v-3c904194><!----><div class="meta-item last-updated"><span class="meta-item-label">上次更新: </span><!----></div><!----><div id="myFooter"><div vertical id="content"><div class="content-title">邀请注册送VIP优惠券</div><div>分享下方的内容给好友、QQ群、微信群,好友注册您即可获得VIP优惠券</div><div class="content-body"><div class="n-input-group"><div class="tip"><div>玩转qmt,上迅投qmt知识库</div></div><button class="n-button n-button--info-type n-button--small-type n-button--secondary" tabindex="0" type="button" style="--n-bezier:cubic-bezier(.4, 0, .2, 1);--n-bezier-ease-out:cubic-bezier(0, 0, .2, 1);--n-ripple-duration:.6s;--n-opacity-disabled:0.5;--n-wave-opacity:0.6;--n-font-weight:500;--n-color:rgba(32, 128, 240, 0.16);--n-color-hover:rgba(32, 128, 240, 0.22);--n-color-pressed:rgba(32, 128, 240, 0.28);--n-color-focus:rgba(32, 128, 240, 0.22);--n-color-disabled:rgba(46, 51, 56, .05);--n-ripple-color:#0000;--n-text-color:#2080f0;--n-text-color-hover:#2080f0;--n-text-color-pressed:#2080f0;--n-text-color-focus:#2080f0;--n-text-color-disabled:#2080f0;--n-border:1px solid #2080f0;--n-border-hover:1px solid #4098fc;--n-border-pressed:1px solid #1060c9;--n-border-focus:1px solid #4098fc;--n-border-disabled:1px solid #2080f0;--n-width:initial;--n-height:28px;--n-font-size:14px;--n-padding:0 10px;--n-icon-size:18px;--n-icon-margin:6px;--n-border-radius:3px;" id="copy-btn2"><!----><!----><span class="n-button__content">登录后获取</span><div aria-hidden="true" class="n-base-wave"></div><!----><!----></button></div><!-- <n-space style="width: 100%;" vertical>
<div style="width: 100%;">
<div>玩转qmt,上迅投qmt知识库,复制分享要登录</div>
</div>
<n-space style="width: 100%;" justify="end">
</n-space>
</n-space> --></div></div></div></footer><nav class="page-nav" data-v-3c904194><p class="inner"><!----><span class="next"><a href="/innerApi/user_attention.html" class="" aria-label="使用须知"><!--[--><!--]--> 使用须知 <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app-2fe24c5e.js" defer></script>
</body>
</html>