开拓者期货期权程序化系统交易论坛
标题:
一个系统交易的实例:夹板
[打印本页]
作者:
skywalker
时间:
2008-5-24 13:52:23
标题:
一个系统交易的实例:夹板
夹板在实盘中是一个很常见的运用,用于吃住震荡行情。它有个上轨和一个下轨,行情突破上轨就做空;突破下轨就做多,在上下轨之间来回吃。如图:
[attach]683[/attach]
代码如下:
/* *******************************************************************************************
1、行情从UpperLine和LowerLine之间开始进入
2、大于等于UpperLine开空仓,小于等于LowerLine开多仓
3、从开仓点继续偏离StopInterval止损(意味着最多亏StopInterval)
4、止损一次之后不再开仓
5、下午14:55收盘前平仓
6、运用在TICK图上
******************************************************************************************** */
Params
Numeric upperLine(100);
Numeric lowerLine(100);
Numeric StopInterval(150);
Numeric firstLots(4); // 手数(仅为正数)
Numeric today(26); // 日期(5月22日,则填入22)
Vars
Numeric tem;
Numeric needPosition; // 当前需要建立的头寸(正数为多头,负数为空头,零为全部平光)
Numeric needPrice; // 建立头寸时下单的价格
NumericSeries wantStopLong; // 多头止损的位置
NumericSeries wantStopShort; // 空头止损的位置
Begin
if(currentBar == 0)
{
// 初始化序列变量
wantStopLong = -1;
wantStopShort = -1;
}Else
{
wantStopLong = wantStopLong[1];
wantStopShort = wantStopShort[1];
}
if(day != today)
{
// 过滤非指定日期的BAR
return ;
}
// 计算多、空头止损的位置
wantStopLong = lowerLine - stopInterval;
wantStopShort = upperLine + stopInterval;
// 把计算好的值输出来看看(这是调试的重要技巧!!!!!)
Commentary("wantStopLong:"+Text(wantStopLong));
Commentary("wantStopShort:"+Text(wantStopShort));
tem = 0;
if(NumLosTrades == 0) // 当日从来没有止损过,开始准备计算。开平仓的方法都包装在OpenCoverFor2Lines函数中
{
// OpenCoverFor2Lines函数包装了开平仓算法,其用意如下:
// 1、返回值为零表示不做任何头寸操作,非零表示要操作
// 2、返回值为非零时,needPosition写入了当前要建立的头寸大小和方向,needPrice写入了以什么价格去建立该头寸
tem = OpenCoverFor2Lines(MarketPosition(),firstLots,upperLine,lowerLine,wantStopShort,wantStopLong,needPosition,needPrice);
}
Commentary("needPosition:"+Text(needPosition));
Commentary("needPrice:"+Text(needPrice));
if(tem == 0)
{
// 不操作任何东西,返回!
return ;
}
if(MarketPosition == 0)
{
if(needPosition > 0)
{
// 当前无仓,开始建立多头
buy(abs(needPosition),needPrice);
}Else
{
// 当前无仓,开始建立空头
SellShort(abs(needPosition),needPrice);
}
return ;
}
if(MarketPosition > 0)
{
if(needPosition < 0)
{
// 当前多头,要求反转为空头
SellShort(abs(needPosition),needPrice);
}Else
{
// 当前多头,要求平仓
Sell(0,needPrice);
}
return ;
}
if(MarketPosition < 0)
{
if(needPosition > 0)
{
// 当前空头,要求反转为多头
buy(abs(needPosition),needPrice);
}Else
{
// 当前空头,要求平仓
BuyToCover(0,needPrice);
}
}
return 0;
End
复制代码
作者:
skywalker
时间:
2008-5-24 14:02:59
标题:
OpenCoverFor2Lines函数代码
// 返回值: 1:有所动作,0:没有动作
// 返回值为非零时,把当前要建立的头寸大小和方向写入needPosition,把以什么价格去建立该头寸写入needPrice
// 返回值: 1:有所动作,0:没有动作
// 返回值为非零时,把当前要建立的头寸大小和方向写入needPosition,把以什么价格去建立该头寸写入needPrice
Params
Numeric currentPosition(0); // 当前头寸,可正可负
Numeric firstLots(0);
Numeric wantShort(120); // 开空仓位置
Numeric wantLong(8); // 开多仓位置
Numeric wantStopShort(0); // 空头止损的位置
Numeric wantStopLong(0); // 多头止损的位置
// 注意:以下两个都是引用变量!!!!
NumericRef needPosition; // 经过计算后的当前头寸,正数:建立多仓,负数:建立空仓,零:平光所有头寸
NumericRef needPrice; // 建立needPosition时的价格
Vars
Numeric tem;
Begin
// 14:55:00平掉当日所有头寸
if(time >= 0.1455 && currentPosition != 0)
{
needPosition = 0;
needPrice = close ;
return 1;
}
if(currentPosition == 0)
{
// 无仓,准备侍机开仓
if(close <= wantLong)
{
// 多头
needPosition = firstLots;
needPrice = wantLong;
return 1;
}
if(close >= wantShort)
{
// 空头
needPosition = -1 * firstLots;
needPrice = wantShort;
return 1;
}
return 0;
}
if(currentPosition > 0)
{
// 持多仓,准备止损或反转
if(close >= wantShort)
{
// 反转
needPosition = -1 * firstLots;
needPrice = wantShort;
return 1;
}
if(close <= wantStopLong)
{
// 止损
needPosition = 0;
needPrice = wantStopLong;
return 1;
}
return 0;
}
if(currentPosition < 0)
{
// 持空仓,准备止损或反转
if(close <= wantLong)
{
// 反转
needPosition = firstLots;
needPrice = wantLong;
return 1;
}
if(close >= wantStopShort)
{
// 止损
needPosition = 0;
needPrice = wantStopShort;
return 1;
}
return 0;
}
return 0;
End
复制代码
[
本帖最后由 skywalker 于 2008-5-24 14:05 编辑
]
作者:
skywalker
时间:
2008-5-24 14:09:23
标题:
夹板的公式导入文件
夹板的公式导入文件:
[attach]684[/attach]
作者:
skywalker
时间:
2008-5-24 14:18:59
初学者一定要认真体会OpenCoverFor2Lines函数,为什么需要把开平仓算法包装到函数里。夹板是个半自动的系统,因为上下轨都需要作为参数输入。当你要转换成全自动系统的时候,那么上下轨就需要根据行情动态计算出来。把计算出来的值作为参数输入OpenCoverFor2Lines函数即可,如此程序就可以方便地拓展而不需要大改动。甚至你还可以再做一个函数用于动态计算上下轨。
[
本帖最后由 skywalker 于 2008-5-24 15:15 编辑
]
作者:
skywalker
时间:
2008-5-24 14:22:44
if(currentBar == 0)
{
// 初始化序列变量
wantStopLong = -1;
wantStopShort = -1;
}Else
{
wantStopLong = wantStopLong[1];
wantStopShort = wantStopShort[1];
}
复制代码
上一段代码是使用序列变量时的常见用法,非常重要的用法。
[
本帖最后由 skywalker 于 2008-5-24 14:25 编辑
]
作者:
maodong
时间:
2008-5-24 15:01:22
这种结构值得借鉴,好。
作者:
stevenx8
时间:
2008-5-24 19:06:33
得认真学习了
作者:
cqzzbszz
时间:
2008-5-24 22:46:19
谢谢!一定好好学习
作者:
糊涂
时间:
2008-5-24 23:41:58
我觉得这个系统实战意义不大,原因我已经在未来函数中介绍了
作者:
guotie
时间:
2008-5-25 09:38:24
学习一下。。。thx
作者:
kidlee
时间:
2008-5-25 23:49:47
学习一下,难懂哦。。。
作者:
solari
时间:
2008-6-20 17:52:21
好好学习
作者:
b8866
时间:
2008-6-23 10:46:53
标题:
如何用这个夹板?
上下轨道是自己在图形上任意画的吗?任意画上下轨后触及上轨道做空,下跪道做多是这样吗?
作者:
pwqzc
时间:
2008-6-26 08:30:38
看来我要仔细看看了啊
skywall真不错啊
作者:
b8866
时间:
2008-6-28 20:59:20
如何用这个夹板?
上下轨道是自己在图形上任意画的吗?任意画上下轨后触及上轨道做空,下跪道做多是这样吗?为何没人回答呀,如何具体用呀?
作者:
nopain
时间:
2008-6-29 09:33:21
自己写函数来指定上下线,或者直接用参数输入。
作者:
nickchen
时间:
2008-6-30 13:47:43
值得好好学习哦 谢谢
作者:
myangsoft
时间:
2008-9-5 14:09:08
学习学习!谢谢
作者:
lilei19733
时间:
2008-9-7 11:45:19
标题:
请版主好事做到底
版主的夹板实例非常好,值得好好学习。
但是,这个实例的关键好象还是在于确定夹板高低线的值。
不知道楼主有没有好的计算方法,可以确定比较好的高低线值。
十分感谢!
作者:
lilei19733
时间:
2008-11-20 18:31:15
标题:
skywalker版主:关于夹板系统的请教
skywalker 版主,您的夹板系统非常好。但是,对于我这个初学者来说,还有一个问题请教,有什么好的办法来确定高低线,有什么资料可以学习?
非常感谢!!!
作者:
lyd2009
时间:
2009-9-4 11:19:22
为什么载不了文件
作者:
开拓交易者
时间:
2009-9-5 14:52:14
靠,看不懂,经过仔细分析,我认为还是看不懂
作者:
winson_lee
时间:
2009-9-15 16:07:58
关键是你怎么能判断他是盘整行情
作者:
bugreg
时间:
2009-9-15 21:18:05
学习学习,值得借鉴, 正好要写个简单的交易系统, 谢谢啦
作者:
citscwb
时间:
2009-9-20 17:03:31
DING !!!!!!!!!!!!!!!!!
作者:
chengjun1201
时间:
2009-11-30 10:01:17
thank your work
作者:
一根筋88
时间:
2009-11-30 20:22:26
多好的东西也顶不住乱开仓,根本不听控制
作者:
srlzh
时间:
2010-1-9 17:08:46
标题:
谢谢
谢谢!一定好好学习的了
作者:
开心老牛
时间:
2010-2-6 22:14:40
版主的夹板实例非常好,值得好好学习。
作者:
httparmy
时间:
2010-3-11 05:44:25
谢谢,一定好好学习。。
作者:
01011012
时间:
2010-5-11 17:44:28
感觉夹板系统的关键还是对于夹板区间的幅度界定,这个才是整个交易系统的关键吧
作者:
helan
时间:
2010-5-16 12:58:13
学习学习!谢谢...
作者:
xiaocai550
时间:
2010-5-18 16:10:23
思路非常好,结构也很好!
我给它加个动态夹板这个系统岂不是完美了!
[
本帖最后由 xiaocai550 于 2010-5-18 16:12 编辑
]
作者:
seasons9066
时间:
2010-6-10 16:43:33
好贴~~
作者:
shsgl
时间:
2010-7-29 16:13:58
个系统交易的实例:夹板
作者:
speed_fj
时间:
2010-7-29 20:20:04
研究看看
作者:
fengfeng
时间:
2010-8-4 14:28:03
高低线怎么确定啊,是不是自己设定区间?
作者:
linwei198711
时间:
2010-9-9 21:01:53
[img][/img]
作者:
slash
时间:
2010-10-12 19:56:27
学习学习!谢谢...
作者:
skyfis
时间:
2010-10-12 21:38:52
这个系统的上下线需要手动设置.
作者:
hufumi
时间:
2010-10-24 13:23:45
谢了谢谢!一定好好学习
作者:
www1652
时间:
2010-12-17 22:34:13
呵呵,原来还要扣钱和威望
作者:
dmm1983825
时间:
2010-12-20 15:38:08
真是太好了,正在学习中
作者:
dmm1983825
时间:
2010-12-20 15:39:00
feichangxiexie
作者:
hxq316000
时间:
2010-12-24 11:17:42
学习中,只是太吃力了
作者:
drasper
时间:
2010-12-27 10:24:21
学习中,认真消化!
作者:
ycw800
时间:
2011-4-17 21:18:32
回复
30#
srlzh
真好 总金额拿回来,的、‘】
wrgbt
作者:
kingeagle
时间:
2011-4-18 01:42:04
学习了。。
作者:
zhuwjjun
时间:
2011-4-18 09:39:03
正在寻找相关的例子
作者:
cecile8888
时间:
2011-4-18 12:07:40
多谢楼主!学习了!
作者:
hongyangyang2
时间:
2011-4-19 17:46:06
非常感谢
作者:
飞跃
时间:
2011-4-19 19:22:08
谢谢LZ,认真学习研究一下
作者:
myangsoft
时间:
2011-4-21 22:38:14
学习学习 不过老大如果把上下夹板参数计算的方法讲讲就好了
作者:
myangsoft
时间:
2011-5-5 10:50:41
好东西 谢谢分享
作者:
yaojb72
时间:
2011-5-16 15:42:59
实例可以加快学习速度!好东东
作者:
lj911
时间:
2011-5-17 21:23:25
好贴,谢谢楼主无私的分享。好好学习下!
作者:
livepu
时间:
2011-9-26 08:05:05
回复
2#
skywalker
在V4下,提示
NumericRef needPosition; 申明错误
不知道如何处理呢?
作者:
skyfis
时间:
2011-9-29 07:48:34
只能当作一个程序设计的范例来学习,没有包含算法,没有交易策略
作者:
fangyuanning
时间:
2011-10-18 16:12:49
不错的例子,学习下。
作者:
光明之子
时间:
2011-10-22 09:06:57
没人测试过?
作者:
kongwei1107
时间:
2011-11-11 10:20:40
回复
10#
cqzzbszz
请问:
日内短线的公式需要加载在图上,用多少周期的K线呢?
作者:
xian_0_9
时间:
2011-11-11 10:39:33
嗯,好思路啊。能用于实盘吗
作者:
蔡宛宏
时间:
2011-12-16 17:21:41
谢谢楼主的无私分享,支持开源
作者:
分子式
时间:
2012-3-4 13:56:24
谢谢楼主的无私分享,支持开源
蔡宛宏 发表于 2011-12-16 17:21
非常感谢里!!!!
作者:
水流深
时间:
2012-6-9 21:00:30
好好学习
作者:
stewen.net
时间:
2012-7-14 10:53:23
日内夹板交易系统,不错!!!
作者:
yml6363
时间:
2012-7-21 09:36:22
一定好好学习
作者:
倔强
时间:
2012-7-21 09:52:14
学习中。。。
作者:
badkingjy
时间:
2012-7-24 09:46:02
好东西!
作者:
try
时间:
2012-8-15 21:03:21
学习谢谢
作者:
zzf4615155
时间:
2012-8-21 13:23:04
好东西 值得学习
作者:
huisee
时间:
2012-10-6 23:31:49
作者:
巴伊老爷-CYY
时间:
2012-11-22 03:47:28
hao si lu
作者:
yhp2012
时间:
2012-12-21 17:55:02
学习了,写得很精妙,不过编译通过不了,唉,可能是早期版本的,这个比较郁闷。是不是应该解决下?
不然我等新手学习起来很吃力。
return现在的用法跟以前不一样了吧
用户函数的引用参数,返回值用法跟以前也不一样了吧
作者:
月夜微凉
时间:
2012-12-21 23:02:53
谢谢!一定好好学习
作者:
loafertb
时间:
2013-2-16 15:09:14
意义不大,没实战性
作者:
天崖
时间:
2013-2-16 16:19:57
请版主好事做到底
版主的夹板实例非常好,值得好好学习。
但是,这个实例的关键好象还是在于确定夹板高低线的值。
不知道楼主有没有好的计算方法,可以确定比较好的高低线值。
十分感谢
作者:
小吉007
时间:
2013-2-18 12:43:05
这个公式用新版本已经不能编译了,楼主能不能修改一下~~~~~~~~
作者:
石头
时间:
2013-2-19 21:21:29
[attach]14011[/attach]
return 0;这个通不过,什么原因?
作者:
skywalkerlin
时间:
2015-12-22 14:06:39
我看 OpenCover2lines函数里, 和程序主体里, 都有关于多头空头反转的功能?
为什么这么重复安排呢
作者:
cts2015deng
时间:
2016-4-4 14:28:54
TB客服,能帮忙把这个整成在新版本里面可以用的吗,谢谢
作者:
youhundi1
时间:
2016-7-26 15:05:42
编译通不过,“策略函数只能是基本类型”
作者:
likeying
时间:
2016-11-6 07:41:15
看看,学习下
作者:
alley_007
时间:
2016-11-17 18:16:06
个人认为,这可以作为一个通用的交易策略的框架,策略本身,作者没有透露
作者:
yudeyinjixxd
时间:
2017-1-2 15:59:43
你好,版主,我是个TB初学者,我现在需要你发的这个帖子的程序代码,但是我不会整合,可否把您发的三个程序整合起来,变成一个完整的直接使用的新建公式发我一下,万分感谢!
417846491@qq.com
作者:
maobingbing
时间:
2021-7-24 21:55:04
很好
欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/)
Powered by Discuz! X2