From 6ab1bf526f22c7161091784600825850eb26946e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=98=89=E4=BF=8A?= <654181984@qq.com> Date: Wed, 25 May 2022 15:24:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=99=A8=E9=80=82=E9=85=8D?= =?UTF-8?q?=E6=9C=9F=E8=B4=A7=E4=BA=A4=E6=98=93=E5=9C=BA=E6=99=AF=EF=BC=9B?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rqalpha_mod_sys_scheduler/scheduler.py | 66 +++++++++++++----- tests/outs/test_f_buy_and_hold.pkl | Bin 17466 -> 17306 bytes tests/outs/test_f_macd.pkl | Bin 157722 -> 157532 bytes tests/outs/test_f_macd_signal.pkl | Bin 157690 -> 157494 bytes tests/outs/test_f_mean_reverting.pkl | Bin 84407 -> 84439 bytes tests/outs/test_s_buy_and_hold.pkl | Bin 70934 -> 70909 bytes tests/outs/test_s_dual_thrust.pkl | Bin 156161 -> 156168 bytes tests/outs/test_s_scheduler.pkl | Bin 436839 -> 436846 bytes tests/outs/test_s_tick_size.pkl | Bin 61195 -> 61202 bytes tests/outs/test_s_turtle.pkl | Bin 297902 -> 297909 bytes tests/outs/test_s_turtle_signal.pkl | Bin 297934 -> 297941 bytes tests/outs/test_sf_buy_and_hold.pkl | Bin 39282 -> 39177 bytes 12 files changed, 48 insertions(+), 18 deletions(-) diff --git a/rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py b/rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py index ae26eb02c..71c589fe3 100644 --- a/rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py +++ b/rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py @@ -27,22 +27,28 @@ from rqalpha.core.events import EVENT from inspect import signature from rqalpha.utils.exception import patch_user_exc, ModifyExceptionFromType +from rqalpha.utils.logger import system_log +from rqalpha.utils.datetime_func import convert_dt_to_int, convert_date_to_int def market_close(hour=0, minute=0): + if Environment.get_instance().config.base.accounts.get("STOCK") is None: + system_log.warning("market_close using in stock market") minutes_since_midnight = 15 * 60 - hour * 60 - minute - if minutes_since_midnight < 13 * 60: - minutes_since_midnight -= 90 return minutes_since_midnight def market_open(hour=0, minute=0): + if Environment.get_instance().config.base.accounts.get("STOCK") is None: + system_log.warning("market_open using in stock market") minutes_since_midnight = 9 * 60 + 31 + hour * 60 + minute - if minutes_since_midnight > 11 * 60 + 30: - minutes_since_midnight += 90 return minutes_since_midnight +def physical_time(hour=0, minute=0): + return hour * 60 + minute + + def _verify_function(name, func): if not callable(func): raise patch_user_exc(ValueError('scheduler.{}: func should be callable'.format(name))) @@ -58,8 +64,8 @@ def __init__(self, frequency): self._today = None # type: Optional[datetime.date] self._this_week = None # type: Optional[List[datetime.date]] self._this_month = None # type: Optional[List[datetime.date]] - self._last_minute = 0 # type: Optional[int] - self._current_minute = 0 # type: Optional[int] + self._last_dt = 0 # type: Optional[int] + self._current_dt = 0 # type: Optional[int] self._stage = None self._frequency = frequency self._trading_calendar = None @@ -106,11 +112,22 @@ def _is_nth_trading_day_in_month(self, n): return False def _should_trigger(self, n): - # 非股票交易时间段不触发 - if self._current_minute < 9*60+31 or self._current_minute > 15*60: + if self._stage == "before_trading": + # 只处理交易时间段内的定时任务 return False - - return self._last_minute < n <= self._current_minute + if self._frequency == "1d": + # 日频直接触发 + return True + if n > self.ucontext.now.hour * 60 + self.ucontext.now.minute: + """ + 当前位置主要是针对股票账户下的 15 - 24 点设置的时间点的延后执行。 + 举例:用户设置 n 为 21:00,在当天收盘后(15:00),下一个bar是第二天的09:31,则 dt 需要表示为当天的21:00。所以需要在日期上 - 1。 + 期货交易场景下早盘也会进入,但会被 self._last_dt < df 条件所限制 + """ + dt = convert_date_to_int(self.ucontext.now - datetime.timedelta(days=1)) + n // 60 * 10000 + n % 60 * 100 + else: + dt = convert_date_to_int(self.ucontext.now) + n // 60 * 10000 + n % 60 * 100 + return self._last_dt < dt <= self._current_dt def _is_before_trading(self): return self._stage == 'before_trading' @@ -123,8 +140,8 @@ def _time_rule_for(self, time_rule): raise patch_user_exc(ValueError( 'invalid time_rule, "before_trading" or int expected, got {}'.format(repr(time_rule)) )) - - time_rule = time_rule if time_rule else self._minutes_since_midnight(9, 31) + # 期货交易的交易时段存在0点 + time_rule = time_rule if time_rule is not None else self._minutes_since_midnight(9, 31) return lambda: self._should_trigger(time_rule) @ExecutionContext.enforce_phase(EXECUTION_PHASE.ON_INIT) @@ -183,8 +200,6 @@ def next_day_(self, event): return self._today = Environment.get_instance().trading_dt.date() - self._last_minute = 0 - self._current_minute = 0 if not self._this_week or self._today > self._this_week[-1]: self._fill_week() if not self._this_month or self._today > self._this_month[-1]: @@ -196,13 +211,13 @@ def _minutes_since_midnight(hour, minute): def next_bar_(self, event): bars = event.bar_dict - self._current_minute = self._minutes_since_midnight(self.ucontext.now.hour, self.ucontext.now.minute) + self._current_dt = convert_dt_to_int(self.ucontext.now) for day_rule, time_rule, func in self._registry: if day_rule() and time_rule(): with ExecutionContext(EXECUTION_PHASE.SCHEDULED): with ModifyExceptionFromType(EXC_TYPE.USER_EXC): func(self.ucontext, bars) - self._last_minute = self._current_minute + self._last_dt = self._current_dt def before_trading_(self, event): self._stage = 'before_trading' @@ -212,6 +227,12 @@ def before_trading_(self, event): with ModifyExceptionFromType(EXC_TYPE.USER_EXC): func(self.ucontext, None) self._stage = None + if self._last_dt == 0: + # 回测刚开始时将_last_df定义为前一个交易日的收盘时间,为0时,期货夜盘会触发前一个交易日早盘的任务 + if self._today == self.ucontext.now.date(): + self._last_dt = convert_date_to_int(self.ucontext.now - datetime.timedelta(days=1)) + 15 * 10000 + 30 * 100 + else: + self._last_dt = convert_date_to_int(self.ucontext.now) + 15 * 10000 + 30 * 100 def _fill_week(self): weekday = self._today.isoweekday() @@ -236,7 +257,16 @@ def _fill_month(self): def set_state(self, state): r = json.loads(state.decode('utf-8')) self._today = parse(r['today']).date() - self._last_minute = r['last_minute'] + if r.get("last_dt"): + self._last_dt = r['last_dt'] + elif r.get("last_minute"): + # 保持向前兼容 + if r['last_minute'] > 15 * 60: + # 针对期货交易夜盘 + dt = convert_date_to_int(self._today - datetime.timedelta(days=1)) + r['last_minute'] // 60 * 10000 + r['last_minute'] % 60 * 100 + else: + dt = convert_date_to_int(self._today) + r['last_minute'] // 60 * 10000 + r['last_minute'] % 60 * 100 + self._last_dt = dt self._fill_month() self._fill_week() @@ -246,5 +276,5 @@ def get_state(self): return json.dumps({ 'today': self._today.strftime('%Y-%m-%d'), - 'last_minute': self._last_minute + 'last_dt': self._last_dt }).encode('utf-8') diff --git a/tests/outs/test_f_buy_and_hold.pkl b/tests/outs/test_f_buy_and_hold.pkl index e8509ee2d7e45e4a859f50b8f515a8a1b88f9e33..1c21789d0cb2f591c052019e5593e177bf626ca2 100644 GIT binary patch literal 17306 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 diff --git a/tests/outs/test_f_macd.pkl b/tests/outs/test_f_macd.pkl index f90abd7fac62067597928e4668fd8765cc60b9c2..6078b0e7cbf442042f328912731ce278f984bc5f 100644 GIT binary patch delta 36849 zcmeHw30PJ~n(qH2;)X0L2rh^_D6+WVnuHVM7L8Ff2BWrug1?9h2Q+Ge2ZMmPqDNU= z5I0m`kg2MC?8WFe_nvu9>IW~H81(=8u3emW76M@`BA08!}dCdf~FG9Tb z{e)tF`&$vwRt#`f1sXiCv&X|e7{&IpmM)=yB^vJ3uvEh`4a+s$rD27JyEWXS;oecq zal)tBuvx>K z8s5_IwuUVVw&een_lCFm-=mwn7VSuM`WJnmVTp!2H7wPzOv7>wcWGFm;cgB0XtX;OB7^u8IgH1Bxnh|)+)j(> zZ*PkkX|Ih5wQt6R+ZSSj?XScn*nb!jVs{%5Z~qRmX#``O0_gxUv& zhS+xoB-o7uLhRoRNC+J}YD{u$%D73%$@t$KZ->YBvtN%5wFkt8*sEg`?8UgB!u?Cb zLhNtg{?`ac3>;|(4Gi@f_Wa@f?7V^D_KJbQcE!LXd;7p{HVsS&O&OIkL0g?+e{Wzv zyU(C-J2WoX9zQ7F9tNC0D8a6a3$YsqCE6zk1=~MF`0Im0yz}jW@%`*6gG244_z-*X z;6(e4!NImYI3YB3)M!7eZ`;=g_p^Tjy+?yX>`p@x?f-HaLuLDXeW+}o@L>soynSqASgL4{(qXbe z9^uX#@8_PYC1+uPJyanv<#ixoY4;>+^ynMtUd)0`j5F33%yv=7#pD@8} zxxO@@yEh^u1h4m5(|^!}+~+MGFNHA1=i!XtCVb z%>~oUTHYpHCNDbpX_5756`zwHum3YKon2@iMLT3+F?tO5INzW7Sdn>Lz%Mv+<_QG( zsGwJj?Zj>2pHSHQm4? zVEVjJyTBv)g0!$2Y1%>9{0A-05SdLAW`DFw%x}Y+A&zECnuFE#R z;)s^7%P!1Zm1z}bn*S5BW#<3lF??WV78aTX=2sCcGXECWO%O^QSy=w)c&nc}vZI2F?v={@Umny{w;c zEj*i_3$0(^T4??f*DT*3=KB7a8vw|6nxetc#M$PrAjuWm&0J@f`D=*M&EMdPf&DMI zIi2HQIYtrwO(^_3u3|`_5M}0n@VJPMd#50A zU=36`(&)&}utV%_1lz^6Em(Q0M}k3zHY{i5>=HG)8q7``Y2ZWLm=V54beqVNF3A+$ygmz=Mtm#GbB3g3dD|7ou(L{e0i952_}lR+z0Jzvh0*Dos5V}vj-$&;kF`v7QUt=_ zeOARPH;~mz=Z86=nRIQKLD#5)O4#YuJm9F+&}BEk>ZuWdT`QMOd4pPq8H4Bn-KHa~ zj`l0Dmug&X+Djj}I?&tg#uQT7FvD`Pn?d_@-s~D3Rkr999e0zkCOYC8+ss-Vog-|I zg3HzoGu}!b(ZyWh>QU7@+HygXpRtL4`LCtRL!Iif`&2&EsaK!5L)|u^^KZFIo$28a zH)6*6p(0!M!9+J9?VhgjB|}?b_mbTRi{199r2AR@5Mg99JE|?yd3I=sZ0#-tqpPGQ#_NXJ=OtP!`J?WH@x+xi(6+l@v& zMHk7Q5^b;tbf#B-c5-gCK~0e}=h30*(MB|#&gi|0b|}OS$M-d;fn6O+XQ`e_`Zxhr zAJx}j&F|3-*2HcN?I#n`{h_@bDP75lFsSw=^l6N=+XD^OV0E3&&J|?DD&@1eeO%=e zRN-WKd~TG%if6J%MRci0Zzn^#Fd5~PB}vY33*})|{Tw4Nr42B;=d;V**wxo#jW;6L z-q+c+5iwFWB0CoSPZTFIZlF;>)jiB9D+a0((oxo`k}Ri-F|vT{GAoHuMKOmd;n;NK z*JS$WAXRPdW4s<5u$GE*P!S=U%kK9vdQ&a!A3tsg8tV)@$BqS#m@1(K9FX8Bj4E;! z=q}soh_l%_SDwZ0^f8KF8HeH4{5dBNkPUlWjeu>k4D()cqN%L63+vd0Xi>y1x%_US ztgT6S@}jIk^dL%>e;2zN<&<^Mf+$sibzATpWKH+8GO5an*>NYHoml3=TdW=rUMR1R zb&}<<+jxAk3D{}c-P;n`dFDH+w10SSmDw9Hu4>kV-a?Pnu;NHrz}D9zmEK$PB4vYg z*cR#7rlV9DA*BUt6=2O&72y=WVR3}8W5ML*UIK1J-xna3j!TfdMcy;$gakfT-^(as zSJ`cLdIp0!o$b}X%c9T-qxZ~tQ}7#L^Co z%s}HEy2b9iLs#icfH9mtU}eK;5AF0C)XerTpqn#Toma`(F=`C7oQUyDJGwByNjj2F zcn!8Mj;^qM;p}XHV|_n8^eW8uCpltPm*hxEX!N4W*D%zZ=r;1-F>&zglN0HFnm}}q zF46V0UY1m;UmRq-#E!kiPA*}G!wi{_ir?*SurpqEzhe)&f|=uxhw1{tyACqC`Ud6A zWJh9D8g}MQ^x%`U53|aFX;TLoYuV9v*>SczaD*$)j7e1D&#_Xx4}`6V6l;`%UUmoX z>9OIdR6~c7j0vk>Tf_FSL!*oUcC>R}+W+=wBbD||o=eTNW2~{pvw`jKB%}zv!PGKB z*?yUwOAxXFnTbmOAZtuEVhy^!l6JqGXt2AOSa#C`W(OxiY(YLKiz5KGe^H`ASGu!@ z$)VYa#=^oOteRnFMj3^0@)RYU)h9`%_#iULHEFRXC($W?F+Fsw4vvL(IXnM0?Pm3? z0j05IXdxX|NwJbT2)Pu$#*RA{uOvA}=-R7}?zy*J)woG6%tJLr*%uqCVtDV@ILTQ{ zpej7=PffCn zORKUb1h@t}xK@F4D^n~fYTP14)VN-!Sj9?oSx&#JBNCQK?U66b`{I5&ZVIZ!bD@K`w$QX zIRZcF zvzbko(UpaCJ*#!B^q~qT&$w|;$$EuZj)5)c9WoI+9+qNYf{UV?tT9RC%uY^q>}(v5 z;#O>C59uT|P(`AV6_&9zmM&m;-N#&Uy$3yHR}zgRIx%EAt6--U3}=n5#w7MYCZkqn zT}(9c`*!!R>aIx!wi{Td?48jq(SdZYBa+py9R)f0bO>aY_V83+;4Nf=nu=;vH z4^VO`Z}6ehT&CiQtT~8X8>7S_L1UEiO4fj(c!%u^!m8mx(pY1FrHrsMI$~cRLpHKwadyvCxse-Z#}>Rh45Yl{gA?Y3g_<_nxeJJkP}9RXEXqg355r zcp-&wWS)aMQZWo)Vjs+B74!ksq#B#wj9ElGXm6@9wI4MOT2Hl7hHcBSR3i+#(iXZl zg?3132imQYRMQ@bhVry@g56@)PIlj7ciarNut!p5B)h9rpn)~PO~24Fx}-zwNYHp$ z4tANY`N{WDiCY*%A)qR;klj`VDq+@TSDem}+Q0CkfXIC-FSd$U!7JlLh=Qw#DAuYY zRHAb!fUX1B%C2=_=UG`w zsu2^J+nt@KgX4^Cc+n3=c~6fM`z^Xw#4bA!=I%Op42NPDwg`g@346UlWq6=9%813S z@Se@La&*m0`yG{eqQCR~+ak7~i)EI#=zya^r)i&yZ?G1nf@RA+$DYWZPIW_zR$%2) z>!>I4am5Wy7mSyic-1l%CBKE=1H+U?92|)Mc7Majq5S(olaG-i8bQsTv{KV- z;S^?#oiWU%97~3ic(V2EcsLzNrgJXF%NxC8TdKv4Ug8boq`uYBRic{QRAVDv4!gj| z6bmK38l@viR6S0tJvYoEdz_-6!Js-Pnw8LQ z;2LJ_C|II=%xfjgKZXOVm?;_M2`AEERMJk`NscC3Vs-wFKT^Vc=YhV?x zFg{(Ko0~Rx_DWYs=hnH{=#S>%@h_!}$NG~`?u%0Cx@!x5Hn-dW-NY(QWenAeFwNg` zld<|v#nSkGN9^J*uzfB*%;i!Adu0q+g&(p~2QOlHBvMRpNT^CR#?iG2AdrqR%%i-u z>Ck$-jq#vm1Xb`6FH_`kDDw?qm~5qVG`AvQ2rta`{uADPk54ajmX%m#Z_q!J2u{!O_u^+!&n<{^v3*sFpSQ>FJD7y14EtrJ+8agcPLkJ(t(IkoOH(kkA?I>kYpB_ zop8&QpD8-?)VciYL@wvabLCfwE|3|_&l1ksc@5-y*zW}$_<;=7n-4n5j1`nK#>`at3%`W z;CPwYQ;0+x^%Br+qX-0f8%5%tZuaJp_@2|b)QsX0oW+j@uy`YVS2mJl^EYlNSW~!W z!}{eL*XNmippwxI9DkvixoXY&)k4^p3*|S9HF;Zws2>;c4>kA}uzJmUvp>S%|6_1d zZ9M=m-HgRm^8W*Y@I)tx4*-J@C^82Nk^2E)2-igghT@)X4&#yP1Hf=#=L0|-*Fyh^ z7g{55Ei^~s`k@a1xgWv%Cx|4Ya0Tz5h?~>Bk~l`r$wDCoSJ8BW_aDvUA~@|Ia1iyi zKd9~hg8F|!{fjRRFR1?))PHY!LH%R(AifQ}p#EP_|1YTj7u5d?>R)^WctQQYp#Je` z;05*ng8H}TyrBMHQ2+e93HW{Rg)gXo{w?7J_3x7RFR1?))c^l?)PJ}c-Tc*G{BE_C zga3xjqLwt;2e(@M=?4#rmNYKT$pL`(bS?iw7hgsQG^>Z|JNl`!y%Uvu;|M=79mjX} z+e)A66pW?&K>j8zoiV=cJVNXk{5KWfJhUD@?ia%}FHq!i0IosyTYkB*y(|1fmzOAY zd=@eh&5qrnrY@oha)xx3)wU;f71meKg|2P|^VlOuaUjTpr+c%T zE1$y3gJrUkbs@3=E9Zu|(ZTF$s4Ob{*F-kMs5nF<=)m?!z`xJQq-k_UiWaalq0;I- zb}&q!k*qGv;Q4!IvMXV327yUo!v03KM`lEoog`p2Q8Ef&C*e@YI|JOpc1yIDi+HC= z?HlgeVmr5m`!$R&Ty~AJjo~7TWV&T3i^a4@+JVQgGTlu3q(%0ST~%tWhBT40NoO*J z+3?m>qZh9EQk8pPs{+wYmAYntE=~Mv;k*Xc7`7)+pfM|{Oy*2BQ%M&skSU`Qbo;zk zAZ4CmS~iDngo>(drWy&@!yY<%;WC+|^O`WXHE4&hgZ78l;6*K;NcB>A9yMtx98r&| z!W|nen}8a6N)R$qmLGFQt*mh*9a3%B$gZn4yvk1K0`;R-W!vJD+Ya9N{Mm&Nlz5Mz z;%MDevtH3Sgv`9cY28QGuee6!XjPm&{Ou5GgPPb462lh7OP}; zdkBpJx+B37cDtu*k)2BQ3tVLNJ%!!%Y;RAIQ&>d;bF9O32^PY)ubVRk7}09Ich0X4y8 zTC`z3)v37FtqNRVwxtU+od(|u`p9(T6pMVh`*mjQ=)>SQ!ECCCJx z>`0*&Ib4R*#>#sfyQ7Ock<}`z?5>Q4`^7z85;6bd?RIJwyv5Z_54VrwR*`IH z4o)6Crs))jYQ54LotY#-0V{)dvMMk9pk=O+gWwadg!vg!>bbC;vT#&MXLOU`P*5pa zj=%ruYHV*=>IUx3?v~+rciAcC_UoyIhv}H?NpvAy_P~woqVAz|inYjI{N5BT-O6h9 zd=*$E$JoZfP_!@yb)zbsL9YTiUZ^=(3-dlFM++7A(!zwTY6Q@J89RZ_$w8M&yYx`= zQllI)R2QvFL_3y=(QA3;W$U6XOwsAW{pIY4nrqVKT+?%!tR!osi+XaP3c~Eb-wU*7 zv9?5aM#~axMwOiBgHCo@)xSfGtnzyie$l5wW$k=a@62~>mzsK7he%N*+o|U?Y}yXV z7b4E2o#-ka=&(fj28RFWv0$C`oh9!3)Y{9APwp;yN*LQOU%Z1~3f9m2{x%uAf_CY* z%=@fK&G#!qwb=?*E~W70+~3_b0e8mkqEQOoRnfQUsC+%oBkPP-e4onX%Nkx~|qB~HZ`v(P`pCDj>?uxiRBw3 zwI`z>eCD9CDBU0Dpu35ww3SY1>1%XHiam5!^@z$C-Q6&ootFJ$J!{pe=1{rpn+ry$ z4pkQujg?xiRYops*Fr3fPwE5{ z*%@hfdv7^c_!8CoH>1CtGlF=dI(1+b1Jw8~!8GAW4OXKAVoKu=Y<;fGeZpK_?X8oX zLT}eSDS;YfpTve>hg^)Z5-T7?PQAA`IDJ1*N>W*gluV_=!LqsP>9$0%R4qpV)xRde zJl5#1C2WOZB8MYo?qQNfeKFs<72EEmdu>{ENjOXJmkEP*y+O zY1#V{B-0K(SK-WKrF>3Ql`9`>+IsoC3h26;nfj|odWQB&6CQ?nk(YqgFPDj|uq9W3sFEY617R2;#2bc{QMuFz<2x_jZw6C|)}+gV{8?pt#RPuJ1m4^f&yyhHR&be=K?;FM{)A@;WP(Gjv&%x_Fke02rp93uu)l8PDqH zO7pCKlLTSRI_ammmmws&XA>)vi0TtnUuzzxpXK}W)w66^sB1ZEwDW*pmVi}->D9s3 zIQ7zOqGQ_79E(or5ZH+us-@}~)&jgJd{jAAp29Bb03BZ=HDU`?no7DP5mjR3@x**^ z@s7&Q%$7w8!gR|8V+N_T)=+IR508weqNW^`oHa=xXauJeO9?cC6Tm#sB6V2tTv@{v zz4e^GFjTDt&d@;_3$mj`w+gfFu)8uMnH^CY^{iSiwfg02JY||r89iRhgC}a7utW{^ zDpo3AG989XyVNvKC!duYYM5iV(=GSd94ovl$KhINrsB#ye#dj~O5x2q0m#qecOs8~ zOXeip)6K~|QhKva;St=M^(8Lzb7sxuzN@+1S2dS=r{*e`)R%!R<&*jfaJrd>E8Kq# zt|Z-mUj-aD+9wVJD;8~TLW8e9v_TwFhegQo&Pu8=svA`PTr z53Zyj$&p&v2TSe|Z%VM_9`RNLN$zo9dx1$(2$Edo*AAB40!@ye1aLQ^KCfDEZuE+r zL6fWP)bnAGugV`A4wi@&SM)_qa{RS#tT*=-6o4h+xSj2pQ=W z&y%y{9#LViu)!20@!_QEh&`%jOxi-#Oa;XHCTxJfITtBy2uV@UGTs}I^l1mgd zJiskymv;hGm%0#uqG0|7P2NGR)TmA?f+m-moFxws3Sh}4088G%wFs8nF94RjgQy}{ z@(v=Wu%JL!*GLMKEm1NdP-t18$peKNXmSanf;-CM+zY}_Sg7X%mRu%CWo25*S#li$ zOWx7V2`qU>X_sA6-va9kBmhgUKs{M?DzbH}0-(u*Tq~R=f37UK%K?2nO)fuy{s~L2 zzeI{Jh`Kb{E|6gp1RY6&Z6Pj!_Y2hX3W2!$@MozoU(qXL!2h} z3+>G5;yw_m=u8}KX351j$ofyD$wkGU7fbH8|Hsqhn3JE1CGX(2QNmU=0%*S+N?^(P zpu>ks+9gMt_yz)+T#gygkuh= zB1>*PnI>;5OOBT#Z|cn}0i1pco~B&MIZ;jzEcf*dsvIwE{sJy|*HHmkj@L7P)z8D+ z{lL`)TdrQ)oGw=?;L9E53?ld2~Q`$+KTWaO=bj z$ei<0`efo9t9PzQ_EP>URcZnSb*|*#&gq^d<_JztyQ_Osp~0&Z0D%s~$0Ok@0HD+T zqA~X6o`6&6N(US|GT_>tJO#j_`)x7apQgm%(aE|mCn@+!X}c4{)SLh=-EXp(H4_0b z++=Zi7GbNAPROb@r~;@$a$#fuQgAge>I%)nw@N7kr|v)haaJ7@khGPnrlPd<0K5@F ztRopm3;HV&X2iY96u5PTK(4E#VOap85NsEa)Bd2>5pr6v3x2NvL2j4q?LfS+X-`YB ztLYleX~P81la;Mh2$Z+V04%#IB&XQ{d66vCVJ|1z5ta$@OlAAXT^uhOxOSz^wK>_Y zR6r>1QqZ#n*|?Ql@>uRpZRyTxr47a%PYdeO2Lzn^haW#L3{{O*`e~^Ej+w=a{Q@A~ zl@4d#rBUHQ0_xo_#JP6_dGpT07G3rkknfg)px;$Ay3YY61Oczmb7J6|$$An4j{-RL z1_h6h)5dw7QE&cquyMW&Ij)n0;$w|KHJ&b_<3pD7dX zJpU&$@&3IF2g!6_0~e1FuSRTv0vO1b6a*cwkQk4$y=Fti8!0G&EIIhb3{qOLLjjzo z$V*dFu<{Cpp&=da0`7f|W}A6=OYB!Lj{J%FC-d?c@lMuLrXk>Tk?8S$F~Jl40trhH z5IqCrJRon04#O!*F0{bUL*`hSl}nFW@@u?*6IQ*V#+%oYcF{X)=y;yE4NPVA_1}9} zRe$%Px3T)sh=9)4oFG2}>$4%*{5dw>;XZ4U&7WiA`G3|Vn?J`krVS(;e}v=3)9dr` zbXoORzT*9t>Nn@%5yOvCu9KeyL-h0nktH*KMhwx@6GYsv;n^`nPfrkKJyVA0BMBn@ zuy^r?-Nk~#;vYh-bfN6l>8>vuS)zdq%Yvee$N! z9VpLs&zQ=cMzFf%3oW>00l8~DdTi79_@0r!orlVi4tFbOmDh&7Am7}fH?@5$XsH3- z#=Ri2r@igj3R>;k3u1>P*0^on3Mw+WZQfXqd0Ty?GZxC{tk6GtD~JO%?b!?RS-M?Y zLH;qV-CkKwcFOV}7>{iQt@iB&+r1T(o7pz+1>3z9T-3h3;KywRt22M)9amlX6Yt9E zU-E6-ydQfvRe$;W-tTc)Di8K`V=F~$OYzUWqrFlXJ1U^ojo$7i-qeD`0}|D|)xLwA z+BXA4M;p#@%IDVhgPeR7*Pe5n(g}dI`5@=x=Qy8!dyRt_?Q&xA-(O=2f9mbE)lMfC z|NS-cf9mZuR;bRKwoOhf{`>1TY_HSA!lxZhEFZrqmtVu5vPxfKqPMFX4sHfWJfB2-QB2E-1DIHVV;Kb54<^-#4;q0QFAfDe*Pc-l+ob;6Q z&+|O$iT?fxJ}izCoZnH;&y+=S@?Y3SCzkfINO=FW%Za7EJ}l_}A9vLAGa;^U5T;#D zEbS$(taduFw3oQz6i~W2jkjRLbMZ3yG)^WWfBa&sKA-vQyi7iglZln{{Jcy)jgyJ` z66kk6^VxZsxF^eShSOQ;e%Q%`Z{EuuJD-V3^BH-Wd>X>gdX8QupN24WJfWV4mx;T* z_yod`_y6bRW%4*-n8t~oKXEdVi_lLv$oZU^Me8|wnP5}+L}n2$!RO{>@?>Vwa>Xg|KSGvR{t_J-~taOi`bUR?|b9D)lI+h zZsFlgZgi|nym3^(7bJ@P0ltK9oDwj&1r{#%oo(_XUpQk{AdZ6-;#z2K!ZpkJmnJrI z1)LXqS14@3m7f<25a-3V@;H8WZyOi4oLU-?+r|Fn$awqJQN8Rrqq@HM`=SkA^nw59 z`#_froOgW>Lp%$IN#Ex~T^@ig63{*3yB$G3Q&_mCo5ehmpDZmkckl>4O?<#*;&^Ya zJjGk>%Ly24<*FmKC5To>YIg#ro25LVI89u}Q|f)Mnjd0T2dWQpX_0wIM2ZvD{J^Z= ziRysa-T8@X8`5<1Fs_@5%p+QxPnUk$p4kChyGm$RbM0*W^Gk!w8o&=7z<%ufb!~OS y>VScrjzX=-JXZZB1V$c5fKS{fa8Ebua4j=W3S5ut8{g?P+w;bEaoMyf@&5ppp-r3s delta 38502 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 Ud;;#Q?{uB%ne{%L($dub0>Ad64gdfE diff --git a/tests/outs/test_f_macd_signal.pkl b/tests/outs/test_f_macd_signal.pkl index c0d5eb6d7ff4d08196a28a3fcdaab3051c982ace..bac960fb8ebfd7ebb471d20f4e442f30914f45d7 100644 GIT binary patch delta 36857 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 diff --git a/tests/outs/test_f_mean_reverting.pkl b/tests/outs/test_f_mean_reverting.pkl index a8ec761f6a28a07f08cad30dc66aa4ca89a2ad92..03f3a1e49f7cabdf72feb7e121e5fca2f0843aba 100644 GIT binary patch delta 6838 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 delta 6841 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 VEvsH(gLF%3lv>hC+%DVN-UUk!FoXaA delta 1554 zcmYMz$u7fD6vy$aYM#Yx(~VfRJONg=m58;7NMm7WY;3N1o@c7&sWsN$Oi5hN;59sf zgihysSD*ZL=bqpB4cOO$_65JAUMb~l_O|zWoo#)deov3b+0xb9>FsW9Yj-xe>qB1+ z6}m1{sm~3U@qNxG<^6LLZb2X1hJLsMci|q~hX?Rb<0E(sPv9v$g8>+X=kNkv!mAi{ zWaew)8yJGO(1LgH9zMWF_ynKfi%ZMLzY@Q}Fnos}LNfpd;Sd~#BXBfMt&|xf9)}Zf z5>CNsI0I+l9Gr&>aM5LSymw}acp0w1Rk#M%Atg4H*id3aiT@8H{;ZsEiOuS86xo&? z4!7Q@N$kUH!Y$~7+t3ep;4a*Q`|toBMyVqwXpV@F;R!s2XD|SR@El&iOLzsZHNJr% zcnd9f2k+qne1uQ%8NS3AxkmF!{077D9exN^ZDMmtBAX~#WEZ7~QWMfDEkTto$`ECW tvP9XU98s<)Pn0hz5EY7wqH;&}Uo2sXs8m!YDi>9VDn*SkS=CkFKYx-!MGF7` diff --git a/tests/outs/test_s_dual_thrust.pkl b/tests/outs/test_s_dual_thrust.pkl index 24c6239bc7f88838cb24d1309a2380ba5bcbe922..b67fb59059a506e147a0c25f67f92bacd7a90477 100644 GIT binary patch delta 775 zcmX}oyGp}g0EXc|Zkb#JA$V%5)>HdyJ)btEN{gac6i*@5&^CoclSVuYK^*KPUVxK# zARV$emEMTpg=lMhw}*H8zQ>kYZ>g_u$*d4U7Ch7S~tw%V-6yqBXQ0Dg3G{n$r00jVVF;|L9G$g|<-+<MSEx; z9iRd_jP!f-5%CzEpmU@n0~OIFGEoVYk%g*lopz44i4Jm+hkSH{ZqXfj_|ucFJ?okh J>RQ)(_6M}n2c`f3 delta 761 zcmX}oyH3Jj0EXcoHYOIs&?q9F@$f6)84?|g7>x!Z!3dFXXtk1vw!w%Djd9QoCRv!g z1H<5Mxd1OovCX?ZdAIL-8~C0FzD_T+D}<0)Q#DLkY3NV-y)JWgqh{WfDyqz+_df0Z zh-JSwzuO+a5Tj@e1<^PPp$Qa5lV}P}qZu^o$`WFZIFBM|0WG2>w2UNLL8~Z=VkkaT z;eY!YaUE@-O|*r!(GE(Wq@(^%AmO#_uKVylN})q^gpSb(Iz?%eL1!q7a<2X!J||wF xJi0_hR6=D`MJl>N*XRb-hH@UhCDxIFOw>RR=n*wh%h8LbylRT)OH;fb2fvOn3^4!z diff --git a/tests/outs/test_s_scheduler.pkl b/tests/outs/test_s_scheduler.pkl index edb5d1f58d8211b92a0e9818eeb5676bf678547b..bad88dd1f5f7da29e56afaab4b640091af9de5a6 100644 GIT binary patch delta 8219 zcmZ|T`M1sW9>?*oF(NWg5pfCUI3gk<;^r!)D5VsM3|%tay1Mz26FD72M5c(ylv!k6 z>-+u}`XBCZ_iwm+d_H%zS!*wk^on(fGLv~Hgy*%5hE z{wR;hPxaPGY}2AP>qz^053t8sad-VTi*JM?S=9G5leQ!xV=p4pSVa zI7%tbg*Xgx7~(L*VTi*Jr(uf26o)AeQyiu^OmSTE?Hl4S#9@fT5Jw@zY2n%rQyiu^ zOmUdvFvU?$aqfOoQ@)Uzpr)u9YK~eIl;&?eEh#>PTA|kHVblh-MUS9%s6BcVbwC|! z$bTn_olzIm6?H@1Q4iD;^+J!K-lz{sABTNWKlB9Zj|QN>p@C=+dJ+vrL(tHo^7r2w zinVAMszbxkQ)mPliJnHI&}j4w8k1A$`Ws8}Su_rfN6(=NXd-$ZO+u5=3up?On!>-M z7tu8I4>TRUgkDB7&@1RwG!wm6Qttl$I>lLNHhKfSiRPfU(A#J(dI!CW=ArlUDqjEZ zQ=E?$pbyYO^dVY=7Nd{Q60{U8L(6NJzaLZlCt874qEFB&v>L5JYtcINFZ5|yY4TZ_ z$-mKh^f~$u`T}i0<|x}pG20}+l$&LJ#m{|Zd5hdCzn0r%gZxG|%I$K8+*xE{|Jr5w zTe(~Ak>AO^a-aNO?w1GTL3zmjXNN8SAdkqS@<(}09+yAK6Y`||xy0P{mz}bFTAq<- z0u;xNQvh@%kV(*9+N!xV=p4pSVaILax`y?sL*hBypy7~(L*k(%N# z#bJuW6o)AeQyjSzmk$w!I1F(Z;xNQf3~^!q3sW4XI81Sv;xNTQijy$JVThC3@?X{j zHAT(xDt`XWDYif@(L<;eYKkHuV5eaqOyo)~bHM`qQbZbf~I+lKSgGDL;fNk4F_pqUz_M z>W81|Cmzr0m8YCPoM&i4LX?}JW~e!8g<7LFs4Z%T+M|xBQ(0-!rOc!&>V+OdPoM#4 zAR2@QqammU)uOtB3K!vUiX+fSGzyJIW6)SM4vj|>&_px|O?C)Qp*R&yL(|dAXa;%} z%|x%GS!fP=3#D`6J7^wy56wpl&_eVfT8utIOVKj4p{RWRQ;L~GHgm{kPS(uHnmJCh zZN7pdG;6f#+{|`b%?-=)mq6KW%Z|v*37I(-Gsj})EX)r13J$>Rh}FW>D}Ld~(910$ zj=JoGPj`NVF{_edDzCvb;CAR?ihbrEb`wgJz$xzi=_>sxP(;O8~(H{6yAHa6`|T< zP;DKkwghx=32^jR8~D}6yu-a0W4<@)gZiR=sDD{$GN8=lNi-M@MKx#`szXnq5$I_& z3O$3y6jb>9pQShsJ%=Ws=g}ne0-B0mMAOi8^b(p;%l+>aiZjt`Xcn4{-b8cI+h{I& z7tKTOqjWy}04+p|&|HqhUwGj)n~l8yYq=Y-lv5{ti1D zb~Nm0*wL_~VMn9T(c+M@pIsN57aLoHBC)C#pmZBSd( z4z))eP{+KA*I#FfT~IgF9rZ-LP;b-+^+o+qe>4CM9LD)?5XHf02&zG~s16NBBhW}R z3XMi%%9@glEi)O1#-j;nBASFI7qxkI!`9giO>&Q>xkt0yqj~Pp;>PTTmYw?kAFtf# ArvLx| delta 8212 zcmZ|U`=3qq9>?+J8kxvlBN~}QL?a?1B2JD{E|oGVny5*KkW=YoB}yhTxlFl4L~gl@ za_e!{_h0CLIKQ30;e7XHyrY1?! z@WQ&~Yu7b2t#97Yyr#Kf(dxA;*S))}X?eqf`O`1{D_xR?Js)N}+x1A2?2tSxzn4ek zQTc;BCXdS>VmqWJ5e`OgYH7zQ4e%C>WO-V zy?Oq7Q|yEKqJF498i4LWwP+x^7Y#y#QFje?i00aP$BgfkvVSODcT+ zj-ogkJ%k$281yh2i^icx(0DWfJ&GnqmG8ev6dyyA(G>JJnu?~OC(v{>13igmqFE{Y zD|!meMt?(d(9`G{G#5RKoUP3RU#i$Xzf|j6H3o70J zuTflzmZ8^C6M6$JM=Q{q=q=QY-bO1!ntyD(L-Fru6E~WXM z8JALMii0T*TfD#!2SXeTaWKT85aN9QGR46Z$EB3tY>I;^4&@XV_Af&m3~?~T!4L;S z9PdAWhbfLrDZkki2U8qOaX8?$hBz4FV2I;V%Ig+GT;9J-aokF|!W74)l&UF?ODR=D z9G6n6hBz*zR1I-RO>x{xxxy63rIe~Ej!P-knBx2pVTj{WO4Sg@rIczZ#KrwDZl#n> zaa>BNn&P;WQYFPnTuP}L;v}@Ol;&zrtwTYjfB%jYJE6|#4%7v8MR%fZs0Q7Ix}zTG z?vUnxubvcpq28zu>WliJ{%8QY2i2nb-f>Zn|KOu#sH%RF`u~GcVF*#29L`%@CXenBTn$R0)1$q-T zqqot6<22jmD>y>4?N*(e*-oo*SmuY|Y?oz6Wafm- z9E+J_F>@AX2YdwwV0^U5n=4Me(gR0^UR**Pb=fg5cD_|EX{Wrvp_ZMu>YU0hS#>yN zPNb|bk;+R*<`~KxL)i^q!rAjDThk`44R-NQ_9K^~v~nwI@g;0ysJ{NRdTqtdv)ig& z3~g5JVrio(FCn%u9Q0y)7aybLZH$l6pslOiQfys(UdFZdD?S;cnpWRDY-8oRVH+!V zj6xgBQ>V086rL-^M_g1ZmI=EUA8QpZC@mq?_J%)f3&q@4TM?=)2G!PqYD+**mjFk9 zwSix4%sbo%GUf-N!Ke-mK|^z;Nqx@b0W<1xjYW^3@#s-Bv8dv||6>#< zqsP%y^aPrYoYYH zS8SErWQ*J`cgUTxRqm3z&Q9+SuA37MYMr{x)W zR-Tg=?r;{6xr9B==Yyba?cf&7B_NC4W=IOnL^(0KT#YD0q!4ck+% zu%q#8&!4lS@jy@2j>bbg)nZ3W-)h*_@8owf< zYDeP{oT?3tBaf;Ljb8w92#jC*aD^R>-}O+nqwy?F)sDuIN43=4;vl?f)!xRhZ%Wt3 zhhXt*xbpmLk2;`Es59z9&=+}N_Uv87%7 VX&-+&#Gj7wr_;5@md?HF{tGDzQ}+M> diff --git a/tests/outs/test_s_tick_size.pkl b/tests/outs/test_s_tick_size.pkl index 579c35439fbe99f4b647d8fa6541353ba9f8aa81..10b704b952194be52218c72462464d4d7fd1e6d9 100644 GIT binary patch delta 99 zcmeCa$2{pC^MqOIt_%ze`k}?CMaBA68TqAInTc7YdHOD?#n~nK1^Pvq$*F~>*h T@=!nHcG4RB diff --git a/tests/outs/test_s_turtle.pkl b/tests/outs/test_s_turtle.pkl index 012511a9e5e4c16d9faae0362cd01027a0951ac4..8047516c2cfd6b5b078330953d57a54718af9f20 100644 GIT binary patch delta 252 zcmZ2CU1;lcp$XH~ofsGx^h1kNi;DHDGV)8aG83~(^YmR(i?d7e3-pUJlT!;z6Z1+o zZWj^=XVE*^h1kNi;DG=OEar73p4e@^NX^J3lfu4^@9Q(H|`S>h+sWD zz4A~$BR>NJ8=S=sXK}z;oNyKwoW%`i@xWQUP}byy*S#he2?m87o(VNy6wVTZvn1dw kNjOUi&XR_+WZ*1W2&-92s9j2k5r~<9n0dRD5X%UFhm`p$YTUJsB7n^h1kNi;DHDGV)8aG83~(^YmR(i?d7e3-pUJlT!;z6Z1+o z?voaX*FMyDXgeoA1H+-I2<9{db2@@K1Hqh$V9r7?XCs(%pv=h|uX{~y5)6)mOC9b- rF#8b92?*vy1alICIT^v6f?z@&-E1t>ZY;zI#7scUyxmxcWp*V1h2?4q delta 265 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 azROS>gnU+GXbn0CT2JQ{ZU?QY9sR#h6UzYr delta 10409 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 Y%+tVpz-Q1JlmKm{XB0jQS{Iq}U-UsWCIA2c