{"id":3803,"date":"2022-03-18T13:29:35","date_gmt":"2022-03-18T05:29:35","guid":{"rendered":"https:\/\/egonlin.com\/?p=3803"},"modified":"2022-04-26T14:07:51","modified_gmt":"2022-04-26T06:07:51","slug":"%e7%ac%ac%e4%b8%89%e8%8a%82%ef%bc%9a%e5%8f%af%e8%a7%86%e5%8c%96%e9%a1%b5%e9%9d%a2%e6%90%ad%e5%bb%ba","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=3803","title":{"rendered":"\u7b2c\u4e09\u8282\uff1a\u53ef\u89c6\u5316\u9875\u9762\u642d\u5efa"},"content":{"rendered":"<h1>\u53ef\u89c6\u5316\u9875\u9762\u642d\u5efa<\/h1>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj1.gif'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj1.gif\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h2>1\u3001\u57fa\u7840\u9875<\/h2>\n<p>\u5728\u57fa\u7840\u9875\u9762\u4e3b\u8981\u6d89\u53ca\u4ee5\u4e0b\u529f\u80fd\uff1a<\/p>\n<ul>\n<li>1\u3001\u5c55\u793a\u521d\u59cb\u6295\u8d44\u8d44\u91d1<\/li>\n<li>2\u3001\u8bbe\u7f6e\u65f6\u95f4\u6a21\u5f0f\n<ul>\n<li>2.1\u4f7f\u7528\u56de\u6d4b\u5e74\u6570<\/li>\n<li>2.2\u4f7f\u7528\u56de\u6d4b\u5f00\u59cb\u7ed3\u675f\u65f6\u95f4<\/li>\n<\/ul>\n<\/li>\n<li>3\u3001\u56de\u6d4b\u7ed3\u679c\u8bbe\u7f6e<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj2.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj2.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>1\u3001\u5c55\u793a\u521d\u59cb\u6295\u8d44\u8d44\u91d1<\/h3>\n<p>\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e2d\u53ef\u4ee5\u8ba9\u7528\u6237\u81ea\u5b9a\u4e49\u8bbe\u7f6e\u521d\u59cb\u6295\u8d44\u8d44\u91d1\uff0c\u4ee5\u53ca\u642d\u5efa\u4e00\u4e2a\u57fa\u7840\u9875\u9762\u7684\u57fa\u7840\u7c7b<\/p>\n<pre><code class=\"language-python\"># \u7ee7\u627f\u4e24\u4e2a\u7c7b\uff0c\u4e00\u4e2a\u5904\u7406\u65f6\u95f4\u6a21\u5f0f\u8bbe\u7f6e\uff0c\u4e00\u4e2a\u5904\u7406\u56de\u6d4b\u7ed3\u679c\u8bbe\u7f6e\nclass WidgetRunTT(WidgetTrad, WidgetTime):\n    &quot;&quot;&quot;\u57fa\u7840\u8bbe\u7f6e\u754c\u9762\uff1a\u521d\u59cb\u8d44\u91d1\uff0c\u56de\u6d4b\u5f00\u59cb\uff0c\u7ed3\u675f\u5468\u671f\u7b49&quot;&quot;&quot;\n\n    def __init__(self):\n        &quot;&quot;&quot;\u521d\u59cb\u5316\u57fa\u7840\u56de\u6d4b\u8bbe\u7f6e\u754c\u9762&quot;&quot;&quot;\n        # \u521d\u59cb\u8d44\u91d1\n        self.cash = widgets.BoundedIntText(\n            value=1000000,\n            min=10000,\n            max=999999999,\n            step=1,\n            description=&#039;\u521d\u59cb\u8d44\u91d1:&#039;,\n            disabled=False\n        )\n        # \u65f6\u95f4\u6a21\u5f0f\u8bbe\u7f6e\n        tm_box = self.init_time_mode_ui()\n        # \u56de\u6d4b\u7ed3\u679c\u8bbe\u7f6e\n        metrics_box = self.init_metrics_ui()\n        # \u901a\u8fc7VBox\u529f\u80fd\u5c06\u5176\u5c55\u793a\u5230\u9875\u9762\u4e0a\n        self.widget = widgets.VBox([self.cash, tm_box, metrics_box])<\/code><\/pre>\n<p>\u57fa\u7840\u7c7b\u5df2\u7ecf\u5b8c\u6210\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u65f6\u95f4\u6a21\u5f0f\u8bbe\u7f6e\u4ee5\u53ca\u56de\u6d4b\u7ed3\u679c\u8bbe\u7f6e\u8fd8\u6ca1\u6709\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj3.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj3.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>2\u3001\u65f6\u95f4\u6a21\u5f0f\u8bbe\u7f6e\uff08init_time_mode_ui\uff09<\/h3>\n<pre><code class=\"language-python\">class WidgetTime(object):\n    &quot;&quot;&quot;\n        \u4fbf\u4e8e\u4e0a\u5c42widgte\u4f7f\u7528self\u53bb\u83b7\u53d6\u8bbe\u7f6e\uff0c\u7edf\u4e00\u4e0a\u5c42\u4f7f\u7528\n        \u6df7\u5165\u7c7b\uff1a\u57fa\u7840\u65f6\u95f4\u6a21\u5f0f\u8bbe\u7f6e\uff1a\n        1. \u5e74\u6570\u6a21\u5f0f\n        2. \u5f00\u59cb\u7ed3\u675f\u6a21\u5f0f\n    &quot;&quot;&quot;\n\n    # noinspection PyProtectedMember\n    def init_time_mode_ui(self):\n        &quot;&quot;&quot;\u6784\u5efa\u57fa\u7840 return widgets.VBox&quot;&quot;&quot;\n        # \u56de\u6d4b\u65f6\u95f4\u6a21\u5f0f\n        self.time_mode = widgets.RadioButtons(\n            options={&#039;\u4f7f\u7528\u56de\u6d4b\u5e74\u6570&#039;: 0,\n                     &#039;\u4f7f\u7528\u56de\u6d4b\u5f00\u59cb\u7ed3\u675f\u65e5\u671f&#039;: 1},\n            value=0,\n            description=&#039;\u65f6\u95f4\u6a21\u5f0f:&#039;,\n            disabled=False\n        )\n        self.time_mode.observe(self.on_time_mode_change, names=&#039;value&#039;)\n        # \u5e74\u6570\u6a21\u5f0f\n        self.run_years = widgets.BoundedIntText(\n            value=2,\n            min=1,\n            max=6,\n            step=1,\n            description=&#039;\u56de\u6d4b\u5e74\u6570:&#039;,\n            disabled=False\n        )\n        # \u5f00\u59cb\u7ed3\u675f\u6a21\u5f0f\n        self.start = widgets.Text(\n            value=&#039;2015-01-01&#039;,\n            placeholder=&#039;\u5e74-\u6708-\u65e5&#039;,\n            description=&#039;\u5f00\u59cb\u65e5\u671f:&#039;,\n            disabled=False\n        )\n        self.end = widgets.Text(\n            value=&#039;2019-04-26&#039;,\n            placeholder=&#039;\u5e74-\u6708-\u65e5&#039;,\n            description=&#039;\u7ed3\u675f\u65e5\u671f:&#039;,\n            disabled=False\n        )\n        self.run_years.disabled = False\n        self.start.disabled = True\n        self.end.disabled = True\n\n        return widgets.VBox([self.time_mode, self.run_years, self.start, self.end])\n\n    def on_time_mode_change(self, change):\n        &quot;&quot;&quot;\u5207\u6362\u4f7f\u7528\u5e74\u6570\u8fd8\u662f\u8d77\u59cb\uff0c\u7ed3\u675f\u65f6\u95f4\u505a\u4e3a\u56de\u6d4b\u53c2\u6570&quot;&quot;&quot;\n        if change[&#039;new&#039;] == 0:\n            self.run_years.disabled = False\n            self.start.disabled = True\n            self.end.disabled = True\n        else:\n            self.run_years.disabled = True\n            self.start.disabled = False\n            self.end.disabled = False<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj4.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj4.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>3\u3001\u56de\u6d4b\u8f93\u51fa\u8bbe\u7f6e\uff08init_metrics_ui\uff09<\/h3>\n<pre><code class=\"language-python\">class WidgetTrad(object):\n    &quot;&quot;&quot;\n        \u56de\u6d4b\u8f93\u51fa\u8bbe\u7f6e\uff1a\n        1. \u8f93\u51fa\u5ea6\u91cf\u5bf9\u8c61\uff1a\n            1. \u53ea\u8f93\u51fa\u4ea4\u6613\u5355\uff1aorders_pd\n            2. \u53ea\u8f93\u51fa\u884c\u4e3a\u5355\uff1aaction_pd\n            3. \u53ea\u8f93\u51fa\u8d44\u91d1\u5355\uff1acapital_pd\n            4. \u540c\u65f6\u8f93\u51fa\u4ea4\u6613\u5355\uff0c\u884c\u4e3a\u5355\uff0c\u8d44\u91d1\u5355(orders_pd, action_pd, capital_pd)\n        2. \u8f93\u51fa\u4ea4\u6613\u5355\u6700\u5927\u884c\u5217\u663e\u793a\u8bbe\u7f6e\uff1a\n            1. \u9ed8\u8ba4\u6700\u5927\u884c\u663e\u793a50\n            2. \u9ed8\u8ba4\u6700\u5927\u5217\u663e\u793a50\n        3. \u662f\u5426\u5c06\u4ea4\u6613\u5355\uff0c\u884c\u4e3a\u5355\uff0c\u8d44\u91d1\u5355\u4fdd\u5b58\u5728\u672c\u5730output\u6587\u4ef6\u4e2d\n    &quot;&quot;&quot;\n    def init_metrics_ui(self):\n        &quot;&quot;&quot;\u6784\u5efa\u57fa\u7840 return widgets.VBox&quot;&quot;&quot;\n\n        self.metrics_out_put = widgets.RadioButtons(\n            options={&#039;\u53ea\u8f93\u51fa\u4ea4\u6613\u5355\uff1aorders_pd&#039;: 0,\n                     &#039;\u53ea\u8f93\u51fa\u884c\u4e3a\u5355\uff1aaction_pd&#039;: 1,\n                     &#039;\u53ea\u8f93\u51fa\u8d44\u91d1\u5355\uff1acapital_pd&#039;: 2,\n                     &#039;\u8f93\u51fa\u4ea4\u6613\u5355\uff0c\u884c\u4e3a\u5355\uff0c\u8d44\u91d1\u5355&#039;: 3},\n            value=0,\n            description=&#039;\u8f93\u51fa\u5bf9\u8c61:&#039;,\n            disabled=False\n        )\n\n        out_put_display_max_label1 = widgets.Label(&#039;\u8f93\u51fa\u663e\u793a\u6700\u5927\u884c\u5217\u6570\uff0c\u6700\u5927100\u884c\uff0c100\u5217&#039;,\n                                                   layout=widgets.Layout(width=&#039;300px&#039;,                                                               align_items=&#039;stretch&#039;))\n        out_put_display_max_label2 = widgets.Label(&#039;\u5982\u9700\u67e5\u770b\u66f4\u591a\u8f93\u51fa\u8868\u5355\uff0c\u8bf7\u9009\u62e9\u4fdd\u5b58\u8f93\u51fa\u81f3\u6587\u4ef6&#039;,\n                                                   layout=widgets.Layout(width=&#039;300px&#039;, align_items=&#039;stretch&#039;))\n        self.out_put_display_max_rows = widgets.IntSlider(\n            value=50,\n            min=1,\n            max=100,\n            step=1,\n            description=&#039;\u884c\u6570&#039;,\n            disabled=False,\n            orientation=&#039;horizontal&#039;,\n            readout=True,\n            readout_format=&#039;d&#039;\n        )\n\n        self.out_put_display_max_columns = widgets.IntSlider(\n            value=50,\n            min=1,\n            max=100,\n            step=1,\n            description=&#039;\u5217\u6570&#039;,\n            disabled=False,\n            orientation=&#039;horizontal&#039;,\n            readout=True,\n            readout_format=&#039;d&#039;\n        )\n        out_put_display = widgets.VBox([out_put_display_max_label1,\n                                        out_put_display_max_label2,\n                                        self.out_put_display_max_rows,\n                                        self.out_put_display_max_columns])\n\n        save_out_put_lable = widgets.Label(&#039;\u662f\u5426\u4fdd\u5b58\u4ea4\u6613\u5355\uff0c\u884c\u4e3a\u5355\uff0c\u8d44\u91d1\u5355\u5230\u6587\u4ef6&#039;,\n                                           layout=widgets.Layout(width=&#039;300px&#039;, align_items=&#039;stretch&#039;))\n        save_out_put_lable2 = widgets.Label(&#039;\u8def\u5f84:{}&#039;.format(os.path.join(settings.BASE_DIR, &#039;out_put&#039;)),\n                                            layout=widgets.Layout(width=&#039;300px&#039;, align_items=&#039;stretch&#039;))\n        self.save_out_put = widgets.Checkbox(\n            value=False,\n            description=&#039;\u4fdd\u5b58\u8f93\u51fa&#039;,\n            disabled=False,\n        )\n        save_out_put = widgets.VBox([save_out_put_lable,\n                                     save_out_put_lable2,\n                                     self.save_out_put])\n\n        accordion = widgets.Accordion()\n        accordion.children = [widgets.VBox([self.metrics_out_put, out_put_display, save_out_put])]\n        accordion.set_title(0, &#039;\u56de\u6d4b\u5ea6\u91cf\u7ed3\u679c\u8bbe\u7f6e&#039;)\n\n        return accordion<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/base.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/base.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj5.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kj5.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h2>2\u3001\u80a1\u6c60\u9875<\/h2>\n<p>\u6d89\u53ca\u529f\u80fd\uff1a<\/p>\n<ul>\n<li>1\u3001\u80a1\u6c60\u533a\uff0c\u7528\u4e8e\u5b58\u653e\u9009\u62e9\u7684\u80a1\u7968\n<ul>\n<li>\u70b9\u51fb\u9009\u4e2d\u7684\u80a1\u7968\u53ef\u4ee5\u5c06\u5176\u5220\u9664<\/li>\n<\/ul>\n<\/li>\n<li>2\u3001\u9009\u80a1\u533a\uff0c\u9009\u62e9\u9700\u8981\u56de\u6d4b\u80a1\u7968\n<ul>\n<li>\u70b9\u51fb\u9009\u62e9\u7684\u80a1\u7968\u53ef\u4ee5\u5c06\u5176\u6dfb\u52a0\u5230\u80a1\u6c60\u533a<\/li>\n<\/ul>\n<\/li>\n<li>3\u3001\u641c\u7d22\u533a\n<ul>\n<li>\u8f93\u5165\u80a1\u7968\u4ee3\u7801\u8fd4\u56de\u5bf9\u5e94\u80a1\u7968\u4fe1\u606f\uff0c\u53ef\u4ee5\u9009\u62e9\u6dfb\u52a0\u8fdb\u5165\u80a1\u7968\u6c60<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg1.gif'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg1.gif\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>1\u3001\u80a1\u6c60\u533a<\/h3>\n<pre><code class=\"language-python\">class StockPool(WidgetBase):\n    &quot;&quot;&quot;\u80a1\u7968\u6c60\u9009\u80a1ui\u754c\u9762&quot;&quot;&quot;\n\n    # noinspection PyProtectedMember\n    def __init__(self):\n        &quot;&quot;&quot;\u6784\u5efa\u80a1\u7968\u6c60\u9009\u80a1ui\u754c\u9762&quot;&quot;&quot;\n        label_layout = widgets.Layout(width=&#039;300px&#039;, align_items=&#039;stretch&#039;, justify_content=&#039;space-between&#039;)\n        # \u80a1\u7968\u6c60\u591a\u9009\u6846\n        self.choice_symbols = widgets.SelectMultiple(\n            description=&#039;\u80a1\u6c60:&#039;,\n            disabled=False,\n            layout=widgets.Layout(width=&#039;300px&#039;, align_items=&#039;stretch&#039;, justify_content=&#039;space-between&#039;)\n        )\n        self.choice_symbols.observe(self.choice_symbols_select, names=&#039;value&#039;)\n\n        # \u6784\u5efa\u6240\u6709\u6c99\u76d2\u4e2d\u7684\u6570\u636e\u5e8f\u5217\n        market_title = [&#039;A\u80a1&#039;]  # \u56e0\u4e3a\u76ee\u524d\u56fd\u5185\u80a1\u7968\u5386\u53f2\u6570\u636e\u53ea\u6709A\u80a1\u662f\u514d\u8d39\u83b7\u53d6\uff0c\u5176\u4ed6\u4f8b\u5982\u7f8e\u80a1\u3001\u6e2f\u80a1\u9700\u8981\u82b1\u94b1\u83b7\u53d6\uff0c\u6240\u4ee5\u5148\u4ee5A\u80a1\u8fdb\u884c\u6d4b\u8bd5\n        cn_seed_symbol = [(&#039;{}:{}&#039;.format(name[0], symbol))\n                          for symbol, name in stock_list.get_stock_list(stock_list.K_SAND_BOX_CN).items()]\n        self.market_dict = {&#039;A\u80a1&#039;: cn_seed_symbol,}\n        # \u4e00\u4e2a\u5e02\u573a\u4e00\u4e2atab\uff0ctab\u4e2d\u7684symbol\u4e3a\u6c99\u76d2\u4e2d\u7684symbol\n        self.market_widget_tab = widgets.Tab()\n        self.market_symbol_widget = []\n\n        for title in market_title:\n            market_symbol = widgets.SelectMultiple(\n                options=self.market_dict[title],\n                description=title,\n                disabled=False\n            )\n            market_symbol.observe(self.on_already_select, names=&#039;value&#039;)\n            self.market_symbol_widget.append(market_symbol)\n            self.market_widget_tab.children = self.market_symbol_widget\n\n            for ind, name in enumerate(market_title):\n                self.market_widget_tab.set_title(ind, name)\n\n            self.sc_box = WidgetSearchBox(self.on_already_select)()\n\n        self.widget = widgets.VBox([self.choice_symbols, self.market_widget_tab,self.sc_box])<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg2.gif'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg2.gif\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>2\u3001\u9009\u80a1\u533a<\/h3>\n<pre><code class=\"language-python\">    def on_already_select(self, select):\n        &quot;&quot;&quot;\u641c\u7d22\u6846\u6216\u8005\u5185\u7f6e\u6c99\u76d2symbol\u4e2d\u70b9\u51fb\u653e\u5165\u80a1\u7968\u6c60&quot;&quot;&quot;\n        st_symbol = [symbol.split(&#039;:&#039;)[1] if symbol.find(&#039;:&#039;) &gt; 0\n                     else symbol for symbol in list(select[&#039;new&#039;])]\n        # \u66f4\u65b0\u80a1\u7968\u6c60\u4e2d\u539f\u6709\u7684symbol\u5e8f\u5217\n        self.choice_symbols.options = list(set(st_symbol + list(self.choice_symbols.options)))\n\n    def choice_symbols_select(self, select):\n        &quot;&quot;&quot;\u80a1\u7968\u6c60\u4e2d\u70b9\u51fb\u5220\u9664\u80a1\u7968\u6c60\u4e2d\u5bf9\u5e94\u7684symbol&quot;&quot;&quot;\n        self.choice_symbols.options = list(set(self.choice_symbols.options) - set(select[&#039;new&#039;]))<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg3.gif'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/03\/kg3.gif\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>3\u3001\u641c\u7d22\u533a<\/h3>\n<div id=\"rml_readmorelogin_placeholder\" style=\"position:relative;\"><div id=\"rml_fade_content\" style=\"position: absolute;\r\ntop:-10em;\r\nwidth:100%;\r\nheight:10em;\r\nbackground: -webkit-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -moz-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -o-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -ms-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\"><\/div><div class=\"wpf-controller aru_rml_from_in_post\" style=\"background-color:#eeeeee;border:5px solid #cce6ff;\" id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><h2 id=\"Header\">\u67e5\u770b\u66f4\u591a<\/h2><div id=\"Message\"><p>\u8054\u7cfb\u7ba1\u7406\u5458\u5fae\u4fe1tutu19192010\uff0c\u6ce8\u518c\u8d26\u53f7<\/p>\n<\/div><div id=\"StatusBarHeader\"><\/div><form id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><input name=\"post_id\" value=\"3803\" type=\"hidden\"\/><input name=\"_init_callback\" value=\"InitLogin\" type=\"hidden\"\/><input name=\"post_id\" value=\"3803\" type=\"hidden\"\/><input name=\"rt_ype\" value=\"1\" type=\"hidden\"\/><input name=\"nonce\" value=\"d01807df60\" type=\"hidden\"\/><input name=\"_wpnonce\" value=\"fa71b785d6\" type=\"hidden\"\/><input name=\"_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_proxy_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_view\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginView\" type=\"hidden\"\/><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\" width=\"400px\"><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Username:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"username\" value=\"\" type=\"text\"\/><\/td><\/tr><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Password:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"password\" value=\"\" type=\"password\"\/><\/td><\/tr><\/tbody><\/table><p class=\"wpf-table-placeholder submit\"><button class=\"wp_plugin_framework_ajax_button\" type=\"button\" style=\"background-color:#4D90FE;;color:#ffffff;;border:1px solid #3079ed;\" name=\"_event\" value=\"ButtonLogin\">Log in<\/button><\/p><\/td><td class=\"wpf-table-placeholder-input\"><\/td><\/tr><\/tbody><\/table><\/form><div id=\"ButtonStartRegister\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=register\">Register<\/a><\/div><div id=\"Link1\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=lostpassword\">Forgotten username or password?<\/a><\/div><div id=\"StatusBarFooter\"><\/div><\/div><\/div><div id=aru_remaining_content><\/div>","protected":false},"excerpt":{"rendered":"<p>\u53ef\u89c6\u5316\u9875\u9762\u642d\u5efa 1\u3001\u57fa\u7840\u9875 \u5728\u57fa\u7840\u9875\u9762\u4e3b\u8981\u6d89\u53ca\u4ee5\u4e0b\u529f\u80fd\uff1a 1\u3001\u5c55\u793a\u521d\u59cb\u6295\u8d44\u8d44\u91d1 2\u3001\u8bbe\u7f6e\u65f6\u95f4\u6a21\u5f0f 2.1\u4f7f\u7528\u56de [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[319,310],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/3803"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3803"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/3803\/revisions"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}