Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update #49

Merged
merged 54 commits into from
Jul 18, 2016
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
2945e8d
Adding yh.json
Apr 14, 2016
fe393dc
Merge remote branch 'shidenggui/master'
Apr 14, 2016
d6bea49
Merge remote branch 'shidenggui/master'
May 14, 2016
1786134
- change : 统一时间戳
lamter May 14, 2016
37f58af
Adding select without user model
May 15, 2016
0bb32e8
Adding without brocker model
May 15, 2016
2b18903
Merge pull request #31 from ruyiqf/develop-without-user2
shidenggui May 15, 2016
081c1ba
- add : 单元测试
lamter May 15, 2016
712bd36
- change : 注释掉无用的代码
lamter May 15, 2016
415457f
Merge branch 'feature/重构clock_engine' into feature/refactor_clock_engine
lamter May 15, 2016
6cb1749
Merge commit '2b18903cd7d4097286268e26a52f47e915c03794' into feature/…
lamter May 15, 2016
e9f874f
Merge branch 'feature/refactor_clock_engine' into feature/重构clock_engine
lamter May 15, 2016
e6ca25a
Merge pull request #32 from lamter/feature/重构clock_engine
shidenggui May 15, 2016
7257ffd
refactor
shidenggui May 15, 2016
e9248b5
Fix requirements
JoeyJiao May 20, 2016
5ef74af
Add GF choose
JoeyJiao May 20, 2016
6909c66
- fix : 增加时钟事件触发的条件:交易日
lamter May 22, 2016
4bfaa10
- change : 去掉测试代码
lamter May 22, 2016
938753a
- fix : 对 interval clock event 和 moment clock event 分开做 tick 单元测试
lamter May 22, 2016
c52cc8e
- change : 更改时使用的日期
lamter May 22, 2016
2c4af65
Merge pull request #33 from lamter/easyquant
shidenggui May 22, 2016
6d415c7
fix(requiremtens): dateutil -> python-dateutil
shidenggui May 22, 2016
df0d3b8
Allow multiple login from different thread
JoeyJiao Jun 3, 2016
d6c4d4d
Merge remote-tracking branch 'shidenggui/master'
JoeyJiao Jun 3, 2016
af599d8
Merge pull request #35 from JoeyJiao/master
shidenggui Jun 3, 2016
af43778
Priority clock engine
JoeyJiao Jun 3, 2016
3fe9476
Merge pull request #36 from JoeyJiao/master
shidenggui Jun 6, 2016
f86e2ca
fix is_trade_date & its usage.
weichaoguo Jun 15, 2016
8f176ec
add xueqiu zuhe tracing strategy.
weichaoguo Jun 15, 2016
41467e7
Merge pull request #38 from weichaoguo/master
shidenggui Jun 15, 2016
a2fa53f
fix is_trade_date & its usage.
weichaoguo Jun 16, 2016
d16acdc
remove no use files
shidenggui Jun 16, 2016
f192260
使用关键字参数传递markup
hahahay Jun 17, 2016
a05a377
Merge pull request #40 from hahahay/patch-1
shidenggui Jun 18, 2016
a4bd7e8
fixed typo in register_moment
hahahay Jun 19, 2016
d60921d
Merge pull request #41 from hahahay/patch-2
shidenggui Jun 20, 2016
5072a57
Merge pull request #42 from weichaoguo/master
shidenggui Jun 20, 2016
12c4f41
- add : 修正 clock_engine 初始化的错误,_init_clock_handler 必须在任何情况下启动时都要执行
lamter Jul 13, 2016
af099f5
Merge pull request #46 from lamter/easyquant
shidenggui Jul 13, 2016
4a5c0eb
Merge commit 'af099f584704a64675d58c1064542f3bfc955b43' into easyquant
lamter Jul 14, 2016
d0b9a93
- add : 添加了使用 mock 更改时间戳的说明
lamter Jul 14, 2016
0fcb2ca
- change : 添加单元测试中使用时间戳的例子以及 readme
lamter Jul 14, 2016
13e4bc4
- add : 完成 readme
lamter Jul 14, 2016
37326ca
- change : 修正 超链接
lamter Jul 14, 2016
8523b3d
- change : 更改超链接地址
lamter Jul 14, 2016
655e46c
Merge pull request #47 from lamter/fix/重构时钟引擎和单元测试
shidenggui Jul 15, 2016
8e6a24e
Update clock_engine.py
shidenggui Jul 15, 2016
368885c
Adding redis IO
Jul 17, 2016
dfad0f3
Create easyredis class
Jul 17, 2016
50a867f
Adding redis.conf
Jul 17, 2016
9312685
Fix gf trade delay problem
Jul 17, 2016
a95c2d9
Merge pull request #48 from ruyiqf/develop
shidenggui Jul 17, 2016
b75c94a
feat(gf): sleep 10s for gf trader load delay
shidenggui Jul 17, 2016
b79e287
fix(redisio): remove invalid log handler import
shidenggui Jul 17, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
- add : 添加了使用 mock 更改时间戳的说明
  • Loading branch information
lamter committed Jul 14, 2016
commit d0b9a93d535f75f7849874168b31d2bf8b642a6d
4 changes: 2 additions & 2 deletions easyquant/main_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class MainEngine:
"""主引擎,负责行情 / 事件驱动引擎 / 交易"""

def __init__(self, broker=None, need_data=None, quotation_engines=None,
log_handler=DefaultLogHandler(), now=None, tzinfo=None):
log_handler=DefaultLogHandler(), tzinfo=None):
"""初始化事件 / 行情 引擎并启动事件引擎
"""
self.log = log_handler
Expand All @@ -46,7 +46,7 @@ def __init__(self, broker=None, need_data=None, quotation_engines=None,
self.log.info('选择了无交易模式')

self.event_engine = EventEngine()
self.clock_engine = ClockEngine(self.event_engine, now, tzinfo)
self.clock_engine = ClockEngine(self.event_engine, tzinfo)

quotation_engines = quotation_engines or [DefaultQuotationEngine]

Expand Down
40 changes: 19 additions & 21 deletions easyquant/push_engine/clock_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,15 @@ class ClockEngine:
"""
EventType = 'clock_tick'

def __init__(self, event_engine, now=None, tzinfo=None):
def __init__(self, event_engine, tzinfo=None):
"""
:param event_engine:
:param event_engine: tzinfo
:return:
"""
# 默认使用当地时间的时区
self.tzinfo = tzinfo or tz.tzlocal()
# 引擎启动的时间,默认为当前.测试时可手动设置模拟各个时间段.
self.time_delta = self._delta(now)
# self.start_time = self.now_dt.replace(hour=0, minute=0, second=0, microsecond=0)

self.event_engine = event_engine
self.is_active = True
self.clock_engine_thread = Thread(target=self.clocktick)
Expand Down Expand Up @@ -150,23 +148,23 @@ def close():
for interval in (0.5, 1, 5, 15, 30, 60):
self.register_interval(interval)

def _delta(self, now):
if now is None:
return 0
if now.tzinfo is None:
now = arrow.get(datetime.datetime(
now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond, self.tzinfo,
))

return (arrow.now() - now).total_seconds()
# def _delta(self, now):
# if now is None:
# return 0
# if now.tzinfo is None:
# now = arrow.get(datetime.datetime(
# now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond, self.tzinfo,
# ))
#
# return (arrow.now() - now).total_seconds()

@property
def now(self):
"""
now 时间戳统一接口
:return:
"""
return time.time() - self.time_delta
return time.time()

@property
def now_dt(self):
Expand All @@ -175,13 +173,13 @@ def now_dt(self):
"""
return arrow.get(self.now).to(self.tzinfo)

def reset_now(self, now=None):
"""
调试用接口,请勿在生产环境使用
:param now:
:return:
"""
self.time_delta = self._delta(now)
# def reset_now(self, now=None):
# """
# 调试用接口,请勿在生产环境使用
# :param now:
# :return:
# """
# self.time_delta = self._delta(now)

def start(self):
self.clock_engine_thread.start()
Expand Down
45 changes: 15 additions & 30 deletions unitest_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
"""
import time
import unittest
from unittest import mock
import datetime
import pandas as pd
from easyquant.easydealutils.time import get_next_trade_date, is_trade_date
import arrow

from dateutil import tz
from easyquant.main_engine import MainEngine
Expand Down Expand Up @@ -57,7 +59,7 @@ def setUp(self):

now = datetime.datetime.combine(self.trade_date, self.time)
# 此处重新定义 main_engine
self._main_engine = MainEngine('ht', now=now)
self._main_engine = MainEngine('ht', 'tmp/ht.json')

# 设置为不在交易中
self.clock_engine.trading_state = False
Expand Down Expand Up @@ -86,41 +88,24 @@ def tearDown(self):
def test_set_now(self):
"""
重设 clock_engine 的时间
通过 mock 来重设时间戳
mock 只能重设 time.time 函数的时间戳,但是不能重设 datetime.datetime.now 函数的时间戳,详情见:
http://stackoverflow.com/questions/4481954/python-trying-to-mock-datetime-date-today-but-not-working
:return:
"""

tzinfo = tz.tzlocal()
now = datetime.datetime.combine(
self.trade_date,
datetime.time(8, 59, 00, tzinfo=tzinfo),
)
clock_engien = ClockEngine(EventEngine(), now, tzinfo)

# 去掉微秒误差后比较
self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)

def test_reset_now(self):
"""
重设时钟引擎当前时间为其他时间点
:return:
"""
tzinfo = tz.tzlocal()
clock_engien = ClockEngine(EventEngine())
now = datetime.datetime.combine(
self.trade_date,
datetime.time(8, 59, 00, tzinfo=tzinfo),
)
clock_engien.reset_now(now)
# 使用datetime 类构建时间戳,转化为浮点数时间戳
now = datetime.datetime(1990, 10, 16, 19, 27, 16)

# 去掉微秒误差后比较
self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)
# 通过mock ,将 time.time() 函数的返回值重设为上面的打算模拟的值
time.time = mock.Mock(return_value=now)

# 重设为当前时间
clock_engien.reset_now()
now = datetime.datetime.now(tzinfo).replace(microsecond=0)
# 生成一个时钟引擎
clock_engien = ClockEngine(EventEngine(), tzinfo)

# 去掉微秒误差后比较
self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)
# 去掉微秒误差后验证其数值
self.assertEqual(clock_engien.now, now) # time.time 时间戳
self.assertEqual(clock_engien.now_dt, arrow.get(now)) # datetime 时间戳

def test_clock_moment_is_active(self):
# 设置时间
Expand Down