以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  编写求助  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=156177)

--  作者:2017gogogoo
--  发布时间:2017/7/24 9:59:41
--  编写求助

请问我在图表程序化运行中,用type(1)<>3来过滤连续开空的信号,为什么还是出现连续开空的情况呢?请帮忙看下,谢谢!!!

 

代码:

VARIABLE:dzsATR=0,kzsATR=0;

ma20:ref(ma(c,20),1);
hh:=HHV(ref(h,1),200);
ll:llv(ref(l,1),200);
aa:=ref(c,1)<ma20;

TR1:= MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:= ref(MA(TR1,20),1);

//“ATR止损”赋值
if type(1)<>1 and type(1)<>3 then BEGIN
 dzsATR:=0;
 kzsATR:=0;
 end
 
 
 //开多
 if type(1)<>1 and h>hh and o<=hh then BEGIN
  buy(1 ,20%,MARKET);
  dzsATR:=hh-ATR;
  end


 
 //平多
 //ATR止损 
 if l<dzsATR then BEGIN
  sell(1,ENTERVOL,market);
  
  end
  
 //原价止损 
 if l<ENTERPRICE and enterbars>4 then BEGIN
  sell(1,entervol,market);
  end
  
 //m20止损
 if aa and type(1)=1 then BEGIN
  sell(1 ,entervol,market);
   
  end  
      
 //开空
 if type(1)<>3 and l<ll and o>=ll then BEGIN
  BUYSHORT(1,20%,market);
  kzsATR:=ll+ATR;
  end
 
  
 //平空
 if h>kzsATR then BEGIN
  SELLSHORT(1,entervol,market);
  
  end
  
 if h>ENTERPRICE and  enterbars>4 then BEGIN
 SELLSHORT(1,ENTERVOL,market);
 end
 
 
 if aa=0 and type(1)=3 then BEGIN
  sellshort(1,entervol,market);
  
  end


持仓:holding,linethick0;
资产:asset,noaxis,COLORBROWN;
可用现金:cash(0),linethick0;


--  作者:pyd
--  发布时间:2017/7/24 10:08:07
--  

过滤连续开多连续开空要再开多和开空条件里分别加上holding=0的限制


--  作者:2017gogogoo
--  发布时间:2017/7/24 10:18:27
--  
以下是引用pyd在2017/7/24 10:08:07的发言:

过滤连续开多连续开空要再开多和开空条件里分别加上holding=0的限制

我图表运行了多个品种,用holding函数会不会出现干扰?


--  作者:wenarm
--  发布时间:2017/7/24 10:20:26
--  

你说的是这种情况?你这种情况开平在同一根k上。


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

 

并且//平空

下面这个语句在有开空的同时肯定平,h>0    kzsATR恒为0啊
 if h>kzsATR then BEGIN
  SELLSHORT(1,entervol,market);
 
  end


--  作者:2017gogogoo
--  发布时间:2017/7/24 10:51:33
--  
以下是引用wenarm在2017/7/24 10:20:26的发言:

你说的是这种情况?你这种情况开平在同一根k上。


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

 

并且//平空

下面这个语句在有开空的同时肯定平,h>0    kzsATR恒为0啊
 if h>kzsATR then BEGIN
  SELLSHORT(1,entervol,market);
 
  end

谢谢你费心帮我运行代码,我刚接触金字塔,主观交易的老手,但是是程序化的菜鸟,请帮忙耐心解答。

kzsATR的设计思路是记录开仓那一刻突破价-ATR的值(以作空为例),开空以后kzsATR就已经被赋值的,所以不恒为0.

//开空
 if type(1)<>3 and l<ll and o>=ll then BEGIN
  BUYSHORT(1,20%,market);
  kzsATR:=ll+ATR;
  end

 

整个代码是会开平出现在同一根K线上,这种情况没有办法回测的,这个我很清楚,但我感觉下单应该不会出现问题,所以这个模型是单纯用来下单用的,回测我是改动之后另外进行的。但今天运行的结果是出现连续开空的情况,而且到了止损位没有平仓,所以我现在很乱了,不知道问题出在哪里?


--  作者:2017gogogoo
--  发布时间:2017/7/24 10:58:13
--  

其实我的思路很简单,以做空为例,运行在5分钟K线上,突破200根K线最低价市价追空,有三个平仓条件,

①反向突破(信号价+ATR)市价平仓;

②5根K线(包括入场K线)后最新价<开仓价市价平仓;

③收盘价站上m20市价平仓。

 

做多反过来就可以了,就这么简单,您觉得我应该怎么改?万分感谢!!!!!!!!!!!!!

[此贴子已经被作者于2017/7/24 10:58:56编辑过]

--  作者:2017gogogoo
--  发布时间:2017/7/24 11:06:30
--  

上面写错了

 

②5根K线(包括入场K线)后最新价>开仓价市价平仓;


--  作者:2017gogogoo
--  发布时间:2017/7/24 13:40:09
--  

请帮忙解答下,谢谢谢谢!!


--  作者:pyd
--  发布时间:2017/7/24 13:53:22
--  

1,突破前200根k先最低价写法是:l<ref(llv(l,200),1)

2,过滤连续开多开空信号 在开仓条件里限制holding=0 才开仓。

3,不止损可以输出条件看下是不是没有满足止损条件

调试技巧:http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246

 


--  作者:2017gogogoo
--  发布时间:2017/7/24 14:15:27
--  
以下是引用pyd在2017/7/24 13:53:22的发言:

1,突破前200根k先最低价写法是:l<ref(llv(l,200),1)

2,过滤连续开多开空信号 在开仓条件里限制holding=0 才开仓。

3,不止损可以输出条件看下是不是没有满足止损条件

调试技巧:http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246

 

你没有回答我的问题,我图表运行了多个品种,用holding函数会不会出现干扰?