Skip to content

Commit

Permalink
⭐ 支持通过点击工具栏刷新按钮刷新
Browse files Browse the repository at this point in the history
  • Loading branch information
shidenggui committed Jun 26, 2020
1 parent 8973ad6 commit bb1c4d1
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
11 changes: 11 additions & 0 deletions docs/help.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@ from easytrader import grid_strategies
user.grid_strategy = grid_strategies.Xls
```

# 通过工具栏刷新按钮刷新数据

当前的刷新数据方式是通过切换菜单栏实现,通用但是比较缓慢,可以选择通过点击工具栏的刷新按钮来刷新

```python
from easytrader import refresh_strategies

# refresh_btn_index 指的是刷新按钮在工具栏的排序,默认为第四个,根据客户端实际情况调整
user.refresh_strategy = refresh_strategies.Toolbar(refresh_btn_index=4)
```

# 无法保存对应的 xls 文件

有些系统默认的临时文件目录过长,使用 xls 策略时无法正常保存,可通过如下方式修改为自定义目录
Expand Down
8 changes: 5 additions & 3 deletions easytrader/clienttrader.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@
import easyutils
from pywinauto import findwindows, timings

from easytrader import grid_strategies, pop_dialog_handler
from easytrader import grid_strategies, pop_dialog_handler, refresh_strategies
from easytrader.config import client
from easytrader.grid_strategies import IGridStrategy
from easytrader.log import logger
from easytrader.refresh_strategies import IRefreshStrategy
from easytrader.utils.misc import file2dict
from easytrader.utils.perf import perf_clock

Expand Down Expand Up @@ -62,6 +63,7 @@ class ClientTrader(IClientTrader):
# The strategy to use for getting grid data
grid_strategy: Union[IGridStrategy, Type[IGridStrategy]] = grid_strategies.Copy
_grid_strategy_instance: IGridStrategy = None
refresh_strategy: IRefreshStrategy = refresh_strategies.Switch()

def enable_type_keys_for_editor(self):
"""
Expand Down Expand Up @@ -478,8 +480,8 @@ def _cancel_entrust_by_double_click(self, row):
).double_click(coords=(x, y))

def refresh(self):
# self._switch_left_menus_by_shortcut("{F5}", sleep=0.1)
self._toolbar.button(3).click() # 我的交易客户端工具栏中“刷新”是排在第4个的,所以其索引值是3
self.refresh_strategy.set_trader(self)
self.refresh_strategy.refresh()

@perf_clock
def _handle_pop_dialogs(self, handler_class=pop_dialog_handler.PopDialogHandler):
Expand Down
59 changes: 59 additions & 0 deletions easytrader/refresh_strategies.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
import abc
import io
import tempfile
from io import StringIO
from typing import TYPE_CHECKING, Dict, List, Optional

import pandas as pd
import pywinauto.keyboard
import pywinauto
import pywinauto.clipboard

from easytrader.log import logger
from easytrader.utils.captcha import captcha_recognize
from easytrader.utils.win_gui import SetForegroundWindow, ShowWindow, win32defines

if TYPE_CHECKING:
# pylint: disable=unused-import
from easytrader import clienttrader


class IRefreshStrategy(abc.ABC):
_trader: "clienttrader.ClientTrader"

@abc.abstractmethod
def refresh(self):
"""
刷新数据
"""
pass

def set_trader(self, trader: "clienttrader.ClientTrader"):
self._trader = trader


# noinspection PyProtectedMember
class Switch(IRefreshStrategy):
"""通过切换菜单栏刷新"""

def __init__(self, sleep: float = 0.1):
self.sleep = sleep

def refresh(self):
self._trader._switch_left_menus_by_shortcut("{F5}", sleep=self.sleep)


# noinspection PyProtectedMember
class Toolbar(IRefreshStrategy):
"""通过点击工具栏刷新按钮刷新"""

def __init__(self, refresh_btn_index: int = 4):
"""
:param refresh_btn_index:
交易客户端工具栏中“刷新”排序,默认为第4个,请根据自己实际调整
"""
self.refresh_btn_index = refresh_btn_index

def refresh(self):
self._trader._toolbar.button(self.refresh_btn_index - 1).click()

0 comments on commit bb1c4d1

Please sign in to comment.