以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [分享]反复开仓、K线走完后才发信号的解决心得  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=162)

--  作者:bhwhui
--  发布时间:2009/11/11 2:54:01
--  [分享]反复开仓、K线走完后才发信号的解决心得

承管理员厚爱,一直享受正版用户待遇图片点击可在新窗口打开查看,得以测试最新版金字塔软件的各种特色功能,现将一些程序化交易心得分享,让后来者少走一些弯路。当然,这也是不断叨唠管理员的结果,呵呵呵

 

问题提出:

以日k线为例子,比如我选择两条MA(close)系统,5日线和20日线,5日上叉20日买入,5日下叉20日卖出。
那么,在系统设计,产生信号的时候,信号点选择以收盘价为信号,还是以盘中ma5和ma20交叉点的价格为信号? 盘中信号会敏感一点,但是如果价格没有在收盘时确认,实际上是一个虚信号。
在测试时,选择close还是盘整交叉点位都是没有问题的,因为它是唯一的。

但是在实战中,有两种做法,
1. 钉死收盘价。好处是假信号少了,但是不敏感,如果出现大阴或大阳,造成损失。适合长线操作。
2. 使用盘中的价格来做。 好处是比较敏感,价格一旦触及,就可以操作。坏处是价格可能折返,造成假信号,还有一个坏处是价格在信号附近连续波动,那么会无法适从。

 

其他的解决方案:

1:如果有更细致的数据,比如说5分钟数据,那么可以用5分钟的收盘价来判断;

2:不必等收盤確認,盤中信號出現后,在K柱高低點放掛單,等其通道突破

3:可以附加一个判断条件:看你上一级的均线是否同信号方向一致。 一致的话,胜算会高些

4:一定要等收盘价确认已经交叉后才能采取行动,如果有大阴大阳那就等回撤

 

待续。。。

[此贴子已经被作者于2009-11-11 2:54:49编辑过]

--  作者:bhwhui
--  发布时间:2009/11/11 3:06:38
--  

注意:金字塔软件所说的“在同一周期内不会反复开平仓”是指:“不重复开仓指的是你公式所用周期的时间,在同一K线上金字塔只做一次开仓或者平仓动作,如果你是在30MIN周期上,那么30MIN时间内,只做一次开仓信号,如果你预警周期设的1秒这样很短周期,也不会再次重复开仓”

 

注意细节是:金字塔自动交易,不是在K线最后一刻才发交易指令的,而是根据预警间隔周期不同一直在做交易判断。

呵呵呵,和我理解的反复开平仓不是同一个意思。


好了,问题搞清楚了,怎么解决?我就想在最后一刻才发信号。

 

大家首先想到用时间来控制,ok,没问题,实际可以做得到,代码如下:注意看论坛上Time,CurrentTime 的区别

 

input:mark(1,1,2),zq(1,0,19),sec(1,1,10);  //市场1:上海,2其他,工作周期,提前秒数

time_ok:=0;
l4:INTPART(CurrentTIME/100)+1;
r2:Currenttime-INTPART(CurrentTIME/100)*100;

//当前Ctime:STRTONUM(currentTIME);
//当前Ctime:currentTIME;
//当前time:TIME;

ok1:=(mark=1 and (l4>0900 and l4<=1015 or l4>1030 and l4<=1130 or l4>1330 and l4<=1410 or l4>1420 and l4<=1500));
ok2:=(mark=2 and (l4>0900 and l4<=1015 or l4>1030 and l4<=1130 or l4>1330 and l4<=1500));

if (60-r2)<=sec and (ok1 or ok2) then
begin
 
 //1min

 //5min

 //15min上海市场
 //15min其他市场
 //30min
 //60min
 //日线
end;

时间:time_ok;

 

 

经测试,还行,不够稳定。如果59秒的时候计算机很忙,很容易错过某次信号,造成灾难性后果

[此贴子已经被作者于2009-11-11 3:21:42编辑过]

--  作者:bhwhui
--  发布时间:2009/11/11 3:12:01
--  

有没有简单的方法?有,呵呵,看下面的例子:双均线交易.

 

input:man1(12),man2(26);

ma1:ma(close,man1),colorred;
ma2:ma(close,man2),colorgreen;

 

ts:=iif(ma1>ma2,1,iif(ma1<ma2,-1,0));   //注意

 

ts_1:=ref(ts,1);
ts_2:=ref(ts,2);

 

{平多}
sell(holding>0 and (ts<0 and ts_1>0),0,thisclose);   //测试时,需要跳变
Tsell(Tholding>0 and (ts_1<0 and ts_2>0),0,lmt,c); //实战时,冒头就行,注意取值
{平空}
sellshort(holding<0 and (ts>0 and ts_1<0),0,thisclose);
Tsellshort(Tholding<0 and (ts_1>0 and ts_2<0),0,lmt,c);
{开多}
buy(vol>=3000 and holding=0 and ts>0 and ts_1<0 ,intpart(asset*0.4/close),thisclose);
Tbuy(vol>=5000 and Tholding=0 and ts_1>0 and ts_2<0,intpart(Tasset*0.1/close),lmt,c);
{开空}
buyshort(vol>=3000 and holding=0 and ts<0 and ts_1>0,intpart(asset*0.4/close),thisclose);
Tbuyshort(vol>=5000 and Tholding=0 and ts_1<0 and ts_2>0,intpart(Tasset*0.1/close),lmt,c);

 

资产_control:asset,COLORCYAN,noaxis;
//持仓:holding,noaxis;

 

问题解决了,如果采用其他解决方案,代码比较长,不例举了,有兴趣,大家一起探讨。

 

本文意在回馈论坛,因为从版主,管理员那学到很多东西,打扰了很长时间,听说在以后1.94版,这个问题会得到完满的解决,让我们拭目以待。。。。

[此贴子已经被作者于2009-11-11 3:15:08编辑过]

--  作者:bhwhui
--  发布时间:2009/11/11 3:19:40
--  
有没有更简单的?更通用的?有,利用T函数和非T函数的区别来控制,把这个话题留给后来者。。。
--  作者:dzfp2010
--  发布时间:2010/3/27 22:27:05
--  

期待楼主下面的帖子,不过,你提出的问题,并没有从根本上得到解决啊。。。

 

我建议“金字塔”增加一个函数:LTime(N),参数N表示毫秒,整个函数表示:在当前周期下,如果N秒后K线将走完,则返回1,否则返回0;

[此贴子已经被作者于2010-3-27 22:38:43编辑过]

--  作者:圆周工作室
--  发布时间:2010/3/31 21:25:05
--  
以下是引用dzfp2010在2010-3-27 22:27:05的发言:

期待楼主下面的帖子,不过,你提出的问题,并没有从根本上得到解决啊。。。

 

我建议“金字塔”增加一个函数:LTime(N),参数N表示毫秒,整个函数表示:在当前周期下,如果N秒后K线将走完,则返回1,否则返回0;

[此贴子已经被作者于2010-3-27 22:38:43编辑过]

你自己计算一下K线是否准备走完就得了

 

一个当前时间到下跟K线起始点的时间差就得了


--  作者:程序化交易者
--  发布时间:2010/5/16 11:13:31
--  怎样能做到指令价开仓
请教老师!怎样能做到指令价开仓?比如CROSS(MA(C,5),MA(C,10)):的交叉点开仓。谢谢!
--  作者:hxbhz
--  发布时间:2010/7/29 11:46:34
--  
学习了,这个问题也困扰我好久了