常见问题解决

1、过滤模型、非过滤模型的运行规则是什么?

2、什么是指令价模型和收盘价模型?

3、模型和模组的区别?

4、如何导入模型?

5、如何进行多品种的量化交易?

6、模组里可以加载多少个运行单元?

7、运行量化的电脑需要什么样的配置?

8、运行单元状态列表中的“复核”是什么意思?

9、量化运行过程中能否暂停?

10、如何取消主窗口k线图的信号连线显示?

11、量化开的仓,手动平掉可以吗,量化再出平仓信号,会有什么反应?

12、模型可以取到本合约其他周期的指标值吗?

13、模型可以取到其他合约相同周期的指标值吗?

14、模型可以同时引用多个合约、多个周期的数据吗?

15、如何在模型中插入声音提示?

16、如何增加提示音类型?

17、模组运行单元中的浮动盈亏为什么与下单界面中的实际的盈亏不一样?

18、模组中“导入现有持仓”如何使用?

19、量化运行日志中的信号出现价和信号执行价、滑点是什么意思?

20、主力合约换月之后量化加载的合约能否自动换月?

21、如何将模型加载到主窗口k线图上?

22、如何避免指标返回值过大或是过小导致的K线被压缩?

23、如何设置模型的属性?

24、模型源码中有很多开仓和平仓条件,如果希望某个条件开的仓用特定的条件平,该如何操作?

25、编写好的模型可以加密输出给指定使用者或设置使用时限么?

26、量化“默认下单方式”指的是什么?

27、如何让日内模型只计算当日数据?

28、模型回测时能否每月自动对资金重新初始化?

29、如何启用/关闭/修改软件的信号声音提示?

30、不同交易指令同时满足条件时怎样处理?

31、如何监控模组的运行状态?

32、T8趋势策略量化支持哪些合约?

1、过滤模型、非过滤模型的运行规则是什么?

答:过滤模型运行规则:http://www.wenhua.com.cn/popwin/guolvmx.htm
非过滤模型运行规则:http://www.wenhua.com.cn/popwin/feiguolvmx.htm

2、什么是指令价模型和收盘价模型?

答:k线走完前,由于行情的变化可能会出现信号产生和信号消失交替的情况,为了避免这样的情况出现,很多用户选择在k线走完、信号稳定的情况下再执行信号,这样的模型就是收盘价模型,即k线走完后再执行信号的模型。当然,有的用户认为这样会损失掉信号出现到k线走完这段的利润,还是希望信号出现时立即执行,如果信号消失(不满足条件)则立即更正,让账户恢复到信号出现之前的状态,这样的模型为指令价模型。
应该使用哪种模型?
使用指令价模型还是收盘价模型,应该根据交易合约的活跃程度、k线周期的大小综合考虑。活跃程度高,价格变化快,指令价模型信号消失的概率大,信号消失的成本高;k线周期大的收盘价模型,收盘价格可能会和信号出现时的价格相差较大,k线走完执行信号可能错失大部分利润。两种模型在T8软件中都可以进行精准的历史数据回测,您也可以根据回测效果,决定实盘中的应用。
模型编写:
指令价模型编写:模型源码中加入CHECKSIG/MULTSIG/CHECKSIG_MIN/MULTSIG_MIN函数的模型为指令价模型。
收盘价模型编写:不含有上述函数的模型,为收盘价模型。
注:
1、考虑到指令价模型如果出信号立即执行,信号消失立即恢复,信号消失的成本会比较大,所以指令价模型函数加入了变量参数,可以等信号出并持续存在一定时间后再执行,信号在一定时间后消失再恢复,详见软件中CHECKSIG的函数说明。
2、指令价模型进行历史数据回测时,采用逐笔tick数据回测,和实盘执行效果一致,但由于计算量大,测试时间较长。

3、模型和模组的区别?

答:模型是指使用麦语言编写的包含变量、交易条件、交易指令等的公式。
模组是这些公式自动下单的运行工具。每个运行的模型称为单元,在模组后台运行自动下单。

4、如何导入模型?

答:以不同方式备份的模型,导入方式也不同;

(1)模型是以具体名字命名的压缩文件

如果您需要导入的模型是如下图所示的压缩文件,需要在麦语言模型开发平台里导入:

导入方法:

(2)模型是纯源码形式的

如果您需要导入的模型是纯源码形式的,可以直接将模型复制粘贴到麦语言开发平台的编辑器里再保存,如下图所示:

5、如何进行多品种的量化交易?

答:如下图,在模组界面点击按钮,新建运行单元,可以多次建立多个运行单元。

6、模组里可以加载多少个运行单元?

答:模组的运行单元数量上限与CPU线程数挂钩,每一个线程允许32个运行单元,总数不超过256。

7、运行量化的电脑需要什么样的配置?

答:答:运行T8需要8G以上内存,64位操作系统,电脑CPU要达到四核及以上配置,对电脑的其他硬件没有要求。在软件运行时,点击下方的“网络状况指示按钮”在弹出的性能查看器中观察cpu和内存,不超过建议值即可。如果经常超过建议值,建议提高电脑硬件性能或减少模组加载的数量。

8、运行单元状态列表中的“复核”是什么意思?

答:复核是指模型信号是否是固定的,如下图所示,如果“复核”位置显示为“是”,那么信号就是固定的。为“否”信号不固定,可能会信号消失。

9、量化运行过程中能否暂停?

答:点击下图红框位置的“切断账号”按钮,切断与交易账号的连接,策略继续出信号,但不委托。希望量化信号能发出委托时点击绿框的“连接账号”按钮即可。

10、如何取消主窗口k线图的信号连线显示?

答:在主窗口k线图上单击鼠标右键,不勾选显示信号连线。

11、量化策略开的仓,手动平掉可以吗,量化策略再出平仓信号,会有什么反应?

答:无论以什么形式开的仓,都可以在交易界面平掉
在交易界面进行平仓:如果平掉的是之前手动开的仓,对模组运行单元没有影响。如果平掉的是量化策略的开仓,那么当量化策略再出现平仓信号时,会先核实实际持仓,这时候核实的结果应该是实际持仓少于量化策略默认委托手数,那么,实际有几手平几手,没有持仓,不委托。当量化策略再出现开仓信号时,正常开仓。

12、模型可以取到本合约其他周期的指标值吗?如模型加载在if1410合约的1分钟周期上但需要取该合约3分钟周期的指标数值。

答:可以通过#IMPORT跨周期函数来实现,如下图,在模型编写界面点击【插入】—>插入函数,在“K线数据引用”里找到#IMPORT函数,具体使用方法请参考“插入函数”里的函数说明。

如下面案例所示,是如何建立跨周期模型:

案例:在1分钟周期上引用30分钟周期的MA5和MA10指标

建立好的跨周期模型加载到1分钟周期上,AA指标不需要加载,只加载跨周期模型即可。

13、模型可以取到其他合约相同周期的指标值吗?如模型加载在if1410合约的1分钟周期上但需要取IF加权在1分钟周期的指标数值?

答:可以通过#CALL跨合约函数来实现,如下图,在模型编写界面点击【插入】—>插入函数,在“K线数据引用”里找到#CALL函数,具体使用方法请参考“插入函数”里的函数说明。

如下面案例所示,是如何建立跨合约模型:

案例:在IF1410合约1分钟周期上引用IF加权合约1分钟的MA5和MA10指标

建立好的跨合约模型加载到1分钟周期上,AA指标不需要加载,只加载跨合约模型即可。

14、模型可以同时引用多个合约、多个周期的数据吗?

答:可以通过#CALL_PLUS函数实现。
案例:在铁矿石1501合约,1分钟周期上引用“焦煤1501合约,5分钟周期MA5”的数据。如下图

建立好的跨合约跨周期模型加载到铁矿石15011分钟上,AA指标不需要加载,只加载跨合约跨周期模型即可。

15、如何在模型中插入声音提示?

答:在模型源码中加入声音函数PLAYSOUND(条件满足时,播放指定声音)即可。如下图所示方法,可找到声音函数及其用法。

16、如何增加提示音类型?

答:(1)用软件录制声音。
①调出录音软件
如下图所示,点击电脑左下角的开始->程序->附件->娱乐->录音机,调出录音机。

②开始录音
下图为调出的录音机,点击图中红框按钮开始和暂停录音。

③保存录音
完成录音后,按下图所示方法将录制的声音保存。下图将文件保存在桌面,名字为123。

(2)在软件中调用录制的声音文件
回到T8软件的“模型开发平台”,打开“设置声音文件”,按下图所示方法调用桌面的“123”声音文件, 再使用声音函数时即可播放自己的声音文件了。

17、模组运行单元中的浮动盈亏为什么与下单界面中的实际的盈亏不一样?

答:运行单元中的浮动盈亏是软件根据前面信号的指令价作为开仓均价计算浮动盈亏。而下单界面中的逐笔浮盈和盯市浮盈是与开仓均价(当老仓是盯市浮盈与昨结算)比较盈亏。由于计算盈亏时比较的基准价的取值不同,所以我们看到的运行单元浮动盈亏和下单窗口不一样。

18、模组中“导入现有持仓”如何使用?

答:“导入现有持仓”是将您真实账户持仓带入模型,让模型替您打理持仓的功能,如下图,在模型加载后,历史k线图最近一个固定的信号是BK信号,我们在加载模型时错过了这个信号,如果此时真实账户中也有该合约同向持仓,则可以通过此功能,将该持仓带入模型,当模型出现SP信号,会将多头持仓平掉。

19、量化运行日志中的信号出现价和信号执行价、滑点是什么意思?

答:如上图红框所示,
信号触发价:信号委托时的最新价
信号执行价:信号真实委托价格
滑点:成交价与信号触发价之间的差值
买入滑点=成交均价-信号触发价
卖出滑点=信号触发价-成交均价

20、主力合约换月之后交易的合约能否自动换月?

答:模型源码中加入TRADE_OTHER('AUTO')时,可以加载到加权合约、主连实现自动换月移仓。

21、如何将模型加载到主窗口k线图上?

答:如下图所示,双击软件右侧的模型,模型直接加载到主图上。

22、如何避免指标返回值过大或是过小导致的K线被压缩?

答:利用定义变量函数“:=”。
例:布林通道+均线指标,由于TMP2值过小,导致指标图形被压缩,如下图
  MID:MA(CLOSE,26);
  TMP2:STD(CLOSE,26);
  TOP:MID+2*TMP2;
  BOTTOM:MID-2*TMP2;
  MA1:MA(CLOSE,5),LINETHICK1;
  MA2:MA(CLOSE,20),LINETHICK1;

修改指标后,可以正常显示,如下图:
  MID:MA(CLOSE,26);
  TMP2:=STD(CLOSE,26);
  TOP:MID+2*TMP2;
  BOTTOM:MID-2*TMP2;
  MA1:MA(CLOSE,5),LINETHICK1;
  MA2:MA(CLOSE,20),LINETHICK1;

23、如何设置模型的属性?

答:如下图所示:



副图指标:默认加载到副图,可通过叠加指标的方式加载到主图,坐标方式为独立坐标,多指标叠加,指标值不影响图形显示。典型指标:KDJ,MACD。

K线附属指标:默认加载到主图,坐标方式为附属K线,多指标叠加,指标值差异可能导致图形压缩。典型指标:MA组合,BOLL布林通道线。

主图K线形态:默认加载到主图,每个主图只能加载一种K形态,系统默认的K线形态是“K线(蜡烛图)”。典型指标:竹线,宝塔线。

属性为“K线附属指标”的KDJ加载到主图后,K线压缩。

属性为“副图指标”的KDJ加载到主图后,K线和KDJ指标各自坐标独立,均能正常显示。

如何在主图叠加属性是“副图指标”的指标。如下图,通过在主图点右键设置技术指标的方式。

24、模型源码中有很多开仓和平仓条件,如果希望某个条件开的仓用特定的条件平,该如何操作?

答:可以在编写模型的交易指令时使用分组指令,分组指令可以对开平条件分成n个组,某个组的条件开的仓位只有某个组对应的平仓条件条件才能平,其他组的平仓条件满足不会出信号,也就不会委托。
一开一平过滤模型:不同的开仓条件如果想以不同的平仓策略进行平仓,可以利用指令分组来进行控制。如下图 :

加减仓模型:入场策略和加仓策略可能有所不同,相应的止损及出场策略的使用亦不相同,这时可以采用指令分组的方式实现。如下图:

分组指令编写、运行机制:
一开一平过滤模型:
如果上一根K线信号是组A发出的开仓信号(bk sk bpk spk) 当前K线只能是组A的平仓信号
如果上一根K线信号是组A发出的平仓信号(bp sp) 当前K线可以是任意组的开仓信号(以信号出现的顺序取第一个开仓信号)。
注:不分组的平仓条件只能平不分组的开仓条件
加减仓模型:
如果上一个信号为组A发出的开仓信号,则下一信号必须为组A的加仓信号或平仓信号
如果上一个信号为组A的平仓信号并且组A持仓为0,下一信号可以为任意组的开仓信号;
如果A组持仓大于0,则必须为A组的开仓信号或平仓信号
注:不分组的平仓条件只能平不分组的开仓条件

更多分组指令的编写方法,可以参见模型开发平台中“插入指令”中的说明,如下图所示。

注:分组指令对组的命名规则为,只能用 A——I 这九个字母中的其中几个命名。最多支持分成十组。

25、编写好的模型可以加密输出给指定使用者或设置使用时限么?

答:可以。在模型源码中使用加密函数即可对模型进行加密,加密强度很高,破解难度很大。

1、SETEXPIREDATE('yyyymmdd'); 设置模型加密输出的到期日期为yyyymmdd。
例:
C>REF(H,1),BK;//价格大于上一根k线最高价,开多仓
C<BKPRICE-3*MINPRICE,SP;//亏损3点止损
SETEXPIREDATE('20141001');//该模型加密输出的到期日期为2014年10月1日
MONEYTOT<=INITMONEY*(1-10/100),CLOSEOUT; // 权益回撤10%止损
AUTOFILTER;
注:需要通过“文件”菜单下的“加密输出执行副本”导出后加密才能生效。

2、SETQUOTACCOUNT('ACCOUNT1'); 设置该模型加密输出给文华行情账号为ACCOUNT1的使用者。
例:
C>REF(H,1),BK;//价格大于上一根k线最高价,开多仓
C<BKPRICE-3*MINPRICE,SP;//亏损3点止损
SETQUOTACCOUNT('ACCOUNT1');//将该模型加密输出给文华行情账号为ACCOUNT1的使用者。
MONEYTOT<=INITMONEY*(1-10/100),CLOSEOUT; // 权益回撤10%止损
AUTOFILTER;
注:
(1)该函数只能写入一次,即只能设置一个加密输出的行情账号,连续写入多个,只有第一个是有效的。
(2)模型中支持同时写入SETTRADEACCOUNT和SETQUOTACCOUNT函数,即支持同时设置授权的行情账号和资金账号。

3、SETTRADEACCOUNT('ACCOUNT1'); 设置该模型加密输出给文华资金账号为ACCOUNT1的使用者。
例:
C>REF(H,1),BK;//价格大于上一根k线最高价,开多仓
C<BKPRICE-3*MINPRICE,SP;//亏损3点止损
SETTRADEACCOUNT('ACCOUNT1');//将该模型加密输出给文华资金账号为ACCOUNT1的使用者。
MONEYTOT<=INITMONEY*(1-10/100),CLOSEOUT; // 权益回撤10%止损
AUTOFILTER;
注:
(1)该函数只能写入一次,即只能设置一个加密输出的资金账号,连续写入多个,只有第一个是有效的。
(2)模型中支持同时写入SETTRADEACCOUNT和SETQUOTACCOUNT函数,即支持同时设置授权的行情账号和资金账号。

26、量化“默认下单方式”指的是什么?

答:是指在下单参数设置—>程序化参数中默认下单价格,如下图所示,当模型中没有描述信号委托方式的语句时,按照该处设置的下单方式进行委托。

注:
1、该处可设置的默认下单方式为排队价,对手价,超价,市价,最新价。
2、模组运行单元中,使用SETSIGPRICETYPE/SETALLSIGPRICETYPE设置信号下单方式的按照SETSIGPRICETYPE/SETALLSIGPRICETYPE的设置执行,否则按照该处设置的默认下单方式执行。
如:若设置SETALLSIGPRICETYPE(CANCEL_ORDER),则只有BK、SK按CANCEL_ORDER处理,其他信号按没设置过,取交易参数中的“默认下单方式”
3、此处设置实时保存,正在运行过程中的单元,在此处修改后,再次发出信号也会按照最新设置的方式进行下单。

27、如何让日内模型只计算当日数据?

答:使用DAYTRADE1函数,当我们做日内周期,只想以当日数据来运行模型,并且希望昨日的信号和今天的信号间相互独立,这时就需要用到该函数。模型中写入该函数,分钟周期上,只用日内数据进行计算,以避免行情跳空导致指标数据失真。
注:
1、该函数适用日线以下周期。
2、不同函数对当天数据的引用不同,使用时需注意函数用法,如:
  MA(X,N)函数N的取值:当天如果k线小于N根,则返回空值。如果k线为大于等于N根,则取N。
  HHV(X,N)函数N的取值:当天如果k线小于N根,则返回实际根数,如果k线为大于等于N根,则取N。
例:MA5^^MA(C,5);
  MA10^^MA(C,10);
  CROSSUP(MA5,MA10),BK;//5周期均线上穿10周期均线,买开仓
  CROSSDOWN(MA5,MA10),SK;//5周期均线下穿10周期均线,卖开仓
  C<BKPRICE-10*MINPRICE,SP;//亏损10点平多
  C>SKPRICE+10*MINPRICE,BP;//亏损10点平空
  CLOSEMINUTE<=1,CLOSEOUT;//收盘前一分钟,清仓。
  MONEYTOT<=INITMONEY*(1-10/100),CLOSEOUT; // 权益回撤10%止损
  AUTOFILTER;//一开一平信号过滤模型
  DAYTRADE;//只用日内数据进行计算

28、模型回测时能否每月自动对资金重新初始化?

答:可以,例如,每月进行一次总结,盈利则将利润拿出使账户资金恢复到月初首次入金状态;亏损则对账户资金进行补充同样使之恢复到月初状态,对这种策略进行回测时,软件中提供了一类函数可以对这种段落交易的方式进行回测,更具有实盘参考价值。
例:初始资金100000,以月为周期进行交易,每月第一个交易日资金和信号重新初始化在模型中加入MONTHTRADE函数来实现想法。
  HH:=HHV(HIGH,N);
  LL:=LLV(LOW,N);
  HH1:=BARSLAST((HH > REF(HH,1)));
  LL1:=BARSLAST((LL < REF(LL,1)));
  HH1>LL1,SPK;
  HH1<LL1,BPK;
  CLOSEMINUTE<=1,CLOSEOUT;
  MONEYTOT<=INITMONEY*(1-10/100),CLOSEOUT; // 权益回撤10%止损
  AUTOFILTER;
  MONTHTRADE;//使用每月数据计算

我们可以将上面编写好的源码加载到合约上进行回测,回测过程中软件会自动将每个交易阶段区分开来,在每月第一个交易日时重新初始化资金和信号,如下图所示,是回测报告的成交明细,通过该明细我们可以看出,每当新一月的交易日开始,权益都会变为我们所设定的100000。这样一来,及时是这种段落式交易的想法也可以实现历史数据回测了。

相应的,在回测报告中,我们也可以通过查看调整后的权益,来了解模型在历史回测中的变现。

如下图所示:

最终权益=最终权益 = 初始资金 + 入金 - 出金 + 净利润。也就是初始资金+最后阶段的盈亏
(例如:使用DAYTRAD函数,是初始资金+最后一天的盈亏值)之后的指标均由“调整后的权益”计算得来的。
调整后的权益=初始资金+净利润(即交易明细中各平仓盈亏之和)
出金=当上一阶段交易结束,且获利时,开始下一阶段交易前所出金额总和
入金=当上一阶段交易结束,且亏损时,开始下一阶段交易前所入金额总和
其他同类函数:
DAYTRADE:使用每日数据计算。
WEEKTRADE:使用每周数据计算。
MONTHTRADE:使用每月数据计算。
QUARTERTRADE:使用每季度数据计算。
YEARTRADE:使用每年数据计算。

29、如何启用/关闭/修改软件的信号声音提示?

答:启用和关闭模组运行单元信号声音

设置信号的提示音

30、不同交易指令同时满足条件时怎样处理?

答:交易指令指bk(买开)、sk(卖开)、bp(买平)、sp(卖平)、bpk(买平开)、spk(卖平开)、closeout(全平),在同时满足条件时的执行顺序如下:
过滤模型:①bk指令和sk指令同时满足时,bk指令优先于sk指令
     ②反手指令和平仓指令同时满足时,反手指令优先于平仓指令
     ③closeout指令和平仓指令同时满足时,closeout指令优先于平仓指令
非过滤模型:按照模型中指令编写顺序从上往下执行
分组模型:无组别的指令优先执行,然后按照分组ABCD——I的指令顺序执行,组间执行顺序按照上面提到的顺序执行。

31、如何监控模组的运行状态?

情境1:远程监控
当我们需要对程序进行远程监控,或者团队间互通信号有无时,可以使用【监控云主机上的模组】功能来实现。以在B电脑监控A电脑上的信号为例,则B为监控端,A为运行端,设置方法如下:
① 在运行端(A电脑)开启远程监控
如下图,在模组菜单中开启远程监控,并设置远程端口号、密码、和最大连接数。

② 在监控端(B电脑)登录远程模组
如下图,点击软件右上角菜单【量化】->监控云主机上的模组,选择【远程】,输入与运行端匹配的IP地址、端口和密码进行登录。

登录后,便能在监控端(B电脑)上看到运行端(A电脑)模组的运行情况。

情境2:本地监控
模组平台运行单元太多,出信号后一个个点击查看太麻烦,想在一个窗口上直接监控所有单元的出信号情况时,也可以使用【监控云主机上的模组】功能来实现。
设置方法:软件右上角【量化】->监控云主机上的模组,选择【本机】直接登录,如下图。

登录后便可在监控窗口查看本地电脑上所有运行单元的出信号情况。

注:
① 远程监控时,监控窗口只是显示运行端的模组信号;
② 有挂单的信号,在监控窗口会显示撤单和追对手价按钮,可在监控窗口手动辅助处理;
③ 远程监控时,两个软件的版本需保持一致;
④ 一个客户端只能作为监控端或者运行端中的一个,例如,B已经连接了A,则B此时为监控端,不可以再作为运行端被其他软件连接。

32、T8趋势策略量化支持哪些合约?

答:期货合约运行模组支持:国内期货和国外期货合约,后台自动下单;
页面盒子支持:国内期货、国内股票、国外期货合约进行信号监测。
T8中不支持对期权、股票期权进行量化交易。