| | |
| | | |
| | | import log |
| | | |
| | | |
| | | # 识别同花顺看盘页面上面的代码 |
| | | |
| | | # 获取配置的屏幕缩放比 |
| | | scale = setting.get_screen_scale() |
| | | |
| | | |
| | | def ocr_ths_code(): |
| | | hwnd = ths_util.get_ths_main_content_hwnd() |
| | | if not hwnd: |
| | |
| | | # 格式为:(上边距,宽度,高度,缩放倍数) |
| | | rect_ = setting.get_ths_auto_code_rect() |
| | | # 测试 |
| | | scale = 1 if constant.IS_TEST else 1.5 |
| | | if len(rect_) > 3: |
| | | scale = rect_[3] |
| | | # if len(rect_) > 3: |
| | | # scale = rect_[3] |
| | | width = int((rect[2] - rect[0]) * scale) |
| | | left = width - rect_[1] |
| | | img = win32_util.window_capture(hwnd, (left, rect_[0], width - 1, rect_[0] + rect_[2]), scale) |
| | |
| | | self.btn_load_data = wx.Button(self, label="加载数据", size=(100, 30)) |
| | | boxSizer1.Add(self.edit_code1) |
| | | boxSizer1.Add(self.edit_code2) |
| | | boxSizer1.Add(self.btn_load_data, 1, wx.LEFT|wx.TOP, 2) |
| | | boxSizer1.Add(self.btn_load_data, 1, wx.LEFT | wx.TOP, 2) |
| | | |
| | | self.boxsier.Add(boxSizer1) |
| | | |
| | |
| | | def OnInit(self): |
| | | self.SetAppName(APP_TITLE) |
| | | self.__init_data() |
| | | self.frame = TickCompareFrame() |
| | | self.frame = TickFrame() |
| | | # self.floatFrame = FloatFrame() |
| | | global_datas["tickFrame"] = self.frame |
| | | # global_datas["floatFrame"] = self.floatFrame |
| | |
| | | # 后台运行 |
| | | t1.setDaemon(True) |
| | | t1.start() |
| | | self.__show_main_frame() |
| | | # self.__show_main_frame() |
| | | |
| | | return True |
| | | |
| | |
| | | background: #bbf1ff; |
| | | } |
| | | |
| | | .color-blue{ |
| | | color: #2156e6; |
| | | } |
| | | |
| | | .button-blue { |
| | | display: block; |
| | | /* float: left; */ |
| | |
| | | flex-wrap: wrap; |
| | | padding: 10px; |
| | | background-color: black; |
| | | color: white; |
| | | |
| | | color: #FE033F; |
| | | } |
| | | |
| | | .cb_list_top > div{ |
| | |
| | | |
| | | <!-- 右侧 --> |
| | | |
| | | <div style="float: right; width:72%;"> |
| | | <div style="float: right; width:72%;" class="scroll-y"> |
| | | <div class="cb_list_top"> |
| | | <div v-for="item in cb_list_top" v-on:click="select_cb(item)" :class="{'red': cb_selected_code == item[0][0]}"> |
| | | <div v-for="item in cb_list_top" v-on:click="select_cb(item)" :class="{'orange': code == item[1][0]}"> |
| | | <img v-if="item[3]" style="margin-right:5px;" src="./images/stop_up.png"> |
| | | <span>{{item[0][1]}}</span> |
| | | <span>({{item[0][0]}})</span> |
| | |
| | | |
| | | <div v-for="item in cb_list" class="cb_list" :class="{'red': cb_selected_code == item[0][0]}"> |
| | | <table> |
| | | <tr><td>正股名称:{{item[1][1]}}({{item[1][0]}}) <button v-on:click="add_to_ths(item[1][0])">查看</button></td><td >转债名称:<span class="green">{{item[0][1]}}({{item[0][0]}})</span> <button v-on:click="add_to_ths(item[0][0])">查看</button></td></tr> |
| | | <tr><td>正股名称:{{item[1][1]}}({{item[1][0]}}) <button v-on:click="add_to_ths(item[1][0])">查看</button></td><td >转债名称:<span class="color-blue">{{item[0][1]}}({{item[0][0]}})</span> <button v-on:click="add_to_ths(item[0][0])">查看</button></td></tr> |
| | | <tr><td>涨停时间:{{item[2]}}</td><td>---</td></tr> |
| | | <tr><td>最新涨幅:{{item[1][2][1]}}%</td><td>最新涨幅:{{item[0][2][1]}}%</td></tr> |
| | | </table> |
| | |
| | | }, 3000, 3000); |
| | | |
| | | setInterval(function() { |
| | | if (is_trade_time()||true) { |
| | | if (is_trade_time()) { |
| | | app.get_cb_list(); |
| | | } |
| | | }, 3000, 3000); |
| | |
| | | }); |
| | | app.get_last_trade_day_reasons(code); |
| | | }, 10); |
| | | |
| | | this.set_selected_cb_top(true); |
| | | //init_data(); |
| | | }, |
| | | show_want_codes: function(plate) { |
| | |
| | | var arr= new Array(); |
| | | arr = arr.concat(res.data); |
| | | app.cb_list_top = arr; |
| | | app.set_selected_cb_top(); |
| | | app.set_selected_cb_top(true); |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | set_selected_cb_top:function(){ |
| | | set_selected_cb_top:function(update_top){ |
| | | var temp_list=app.cb_list; |
| | | for(var i=0;i<temp_list.length;i++){ |
| | | if(temp_list[i][0][0] == app.cb_selected_code){ |
| | |
| | | temp_list.splice(i, 1); |
| | | temp_list.unshift(data); |
| | | app.cb_list = temp_list; |
| | | |
| | | break; |
| | | } |
| | | } |
| | | if(update_top){ |
| | | // 先变黄 |
| | | // 置顶 |
| | | var temp_list=app.cb_list_top; |
| | | for(var i=0;i<temp_list.length;i++){ |
| | | if(temp_list[i][1][0] == app.code){ |
| | | var data = temp_list[i]; |
| | | temp_list.splice(i, 1); |
| | | temp_list.unshift(data); |
| | | app.cb_list_top = temp_list; |
| | | app.cb_selected_code = data[0][0]; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | |
| | | select_cb:function(data){ |
| | | app.cb_selected_code = data[0][0]; |
| | | this.set_selected_cb_top(); |
| | | |
| | | |
| | | this.set_selected_cb_top(false); |
| | | }, |
| | | add_to_ths:function(code){ |
| | | pyjs.add_code_to_ths(code); |
| | |
| | | else: |
| | | self.webview.load(QUrl("http://127.0.0.1:8848/kp/index23-05-04.html")) |
| | | |
| | | self.secondWindow.show() |
| | | if not constant.IS_TEST: |
| | | self.secondWindow.loadUrl(f"http://{constant.WEB_HOST}/kp/codes_list.html") |
| | | else: |
| | | self.secondWindow.loadUrl("http://127.0.0.1:8848/kp/codes_list.html") |
| | | if not setting.is_only_convertible_bonds(): |
| | | self.secondWindow.show() |
| | | if not constant.IS_TEST: |
| | | self.secondWindow.loadUrl(f"http://{constant.WEB_HOST}/kp/codes_list.html") |
| | | else: |
| | | self.secondWindow.loadUrl("http://127.0.0.1:8848/kp/codes_list.html") |
| | | |
| | | # 绑定槽函数 |
| | | self.signal_update_code.connect(self.set_target_code) |
| | |
| | | xgb_window_info = [-2354, 86, 1920, 1017] |
| | | window_watch_float_info = [146, 419, 435, 220] |
| | | window_tick_info = [280, 81, 800, 1000] |
| | | kp_second_window_info = [-1907, -8, 1920, 1017] |
| | | kp_second_window_info = [-2142, 158, 1920, 1061] |
| | | code_attribute_window_info = [-650, 315, 291, 278] |
| | | client = hxh |
| | | float_frame_auto_focus = 1 |
| | | float_frame_trade_quick_key = 1 |
| | | only_convertible_bonds = 1 |
| | | screen_scale = 1 |
| | | |
| | | [juejin] |
| | | strategy_id = 95a982ce-fc2d-11ec-8ff3-0a0027000010 |
| | |
| | | return False |
| | | |
| | | |
| | | def is_only_convertible_bonds(): |
| | | """ |
| | | 是否只有可转债 |
| | | :return: |
| | | """ |
| | | cp = __read_setting() |
| | | val = __get_setting(cp, "config", "only_convertible_bonds") |
| | | if val: |
| | | if int(val) > 0: |
| | | return True |
| | | return False |
| | | |
| | | |
| | | # 获取屏幕的比例 |
| | | def get_screen_scale(): |
| | | """ |
| | | 获取屏幕比例,默认1.5 |
| | | :return: |
| | | """ |
| | | cp = __read_setting() |
| | | val = __get_setting(cp, "config", "screen_scale") |
| | | if val: |
| | | return round(float(val), 2) |
| | | return 1.5 |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | print(get_ths_auto_click_time_space()) |
| | | set_ths_auto_click_time_space(1000) |
| | | print(get_screen_scale()) |