如上表中所示,ABLK函数可以实现把符合条件的股票加入到自选股中,也可以从自选股中删除以及获取该自选股板块中的股票总数。我们利用这个特点可以在股池中设计中当买入前判断是否大某个自选股中,如果在则不进行买入,买入后把买入的股票写入到自选股中,可以达到不重复购买股票的作用。或者判断某个股票在2个或者以上的自选股中是否都存在,以达到交集统计的目的。下面我们通过实例来继续讲解。 ★我的第一个自动交易股票池 根据上面的基础,我们来制作第一个可以实现自动买卖的简单策略池,这个池子就是我们以后组装更复杂自动交易策略的基础,或者说组件,只要把这个池子弄明白了,任何复杂的模型,都是用这个池子拆分后来重新组建的。 第一步、股票池画出备选股,通常咱们是全市场,你可以根据自己需要,指定某个板块,或者某个自选股。参考第一节《买入池设计》 第二步、初步过滤条件,画出三角形,写入必要的过滤条件,我这里用的条件如何下: 盘子:=CAPITAL/100; 选股:盘子<=100000 and c<35 and STRFIND(STKNAME,'S',1)=0 and DYNAINFO(7)<>0; 以上过滤公式仅仅是过滤掉大盘股,高价股,st,停牌,大家可以根据自己操作习惯,做更多,更符合自己的过滤公式,如果不会写,可以找朋友代写,也可以联系我们。在每个三角形后面都有一个方块形状的格子,用来存放条件筛选出来的股票。双击方块如下图进行一些必要的设置
下面的内容你可以直接复制 {初选 你可以在下面加入你自己的初选条件} T1:=strfind(stklabel,'3',1)<>1;{剔除创业板的股票} T2:=CAPITAL/1000000<8;{流通盘小于8亿股的股票} T3:=between(close,5,30);{股价在5-30的股票} T4:=strfind(stkname,'S',1)=0;{剔除ST,S,SST,*ST股} T5:=dynainfo(4);{剔除今日停牌股票} 初选:T1 and T3 and T4 and T5; 然后勾选如图中所示
{再次进行指标判断,确保可以再次买入时仍然符合买入条件} D:="KD.D"; K:="KD.K"; T:=CROSS(K,D) and D<20;
{资金数据} 可用资金:="ADLL@AGET"(0,0); 总资金:="ADLL@AGET"(1,0); 持股量:="ADLL@AGET"(6,0); 可卖量:="ADLL@AGET"(7,0); 重复判断1:=INBLOCK('自选股1')=0;{控制重复买入,不在自选股1中的不买} 重复判断2:=INBLOCK('自选股2')=0;{当天卖出的不买入} {基本要素模块} 卖三:=IF(DYNAINFO(36)=0,DYNAINFO(54),DYNAINFO(36));{用卖3价作为买入报价} 买入资金:=总资金*0.1;{交易资金为总资金的10%} 资金状态:=可用资金 > 买入资金; 预警:T and 重复判断1 and 重复判断2 and 资金状态 and 持股量<1; if 预警>0 then begin buy1:="ADLL@A"(1,买入资金*预警,卖三*预警,0); if Buy1 then {如果调用买入交易成功} begin addBLK1:="ADLL@ABLK"(1,1*预警);{调用买入后记录到自选股1中} end; end; { ADll.dll文件中所提供的交易函数参数使用方法详细见A } { 计划帮助文件里大智慧股票池预警一节 } { 利用A计划提供的交易函数,你几乎可以设计出任何你想要的交易模型} 注意上图中1、2行加粗部分代码,其实现的目的就是当天买入的票不再买入,第3行加粗部分代码实现调用买入交易后,加入到自选股1,其目的也是第1、2行的代码判断基础。 其它的步骤同步骤3一样设置。 到这里我们已经设计好了买入部分,下面继续讲解卖出部分的处理。
D:="KD.D"; K:="KD.K"; T:CROSS(D,K) and K>70; 可卖量:="ADll@AGET"(7,0); 买三:=IF(DYNAINFO(30)=0,DYNAINFO(55),DYNAINFO(30)); 卖出:T and 可卖量>50; if 卖出>0 then begin S1:="ADll@AN"(0,可卖量*卖出,买三*卖出,0); if S1 then begin addblk2:="ADll@ABLK"(1,2*卖出); end; end; 上面代码中判断,如果可卖量大于50并且满足KD买入条件,则执行下单,下单后把该支股票加入到自选股2中(有什么作用?在后面的部分会讲解)。 流程属性同步骤3 在这一步中我们实现了对持仓股票的KD指标卖出。在接下来的步骤中我们继续讲解后续的处理完善工作。 7、加入一个“清除”池 实现目的:自动检测持仓股票中可卖数量不足的票,从“持仓股票”中转移出来。如下图
可卖数量:="ADll@AGET"(7,0)<50; 清除:可卖数量; if 清除>0 then begin blk1del:="ADll@ABLK"(0,1*清除); end; 上面代码中清除后,同时从自选股1中清除,以便该股满足条件可以再次买入。 如上图中白线流程,流程属性同步骤3 8、再加入一个从“买入”池至持仓股票的转移条件。 如图所示
根据上面说明,我们可以用如下代码实现: 存储条件:C>0; If 存储条件>0 then Begin Save1:=”ADll@ASAVE”(1,c*存储条件); End; 调用我们存储的值: D1:=SELFDATA(“a1”); 如上:变量d1的返回值就是我们存储在自定义数据a1的股票相关序列值里存储的数据。