开拓者期货期权程序化系统交易论坛

标题: 发个套利系统 [打印本页]

作者: ST振翔    时间: 2012-10-7 20:11:00     标题: 发个套利系统

本帖最后由 ST振翔 于 2012-10-7 20:11 编辑

第一次发帖,前几天洗澡的时候想出来的一个套利系统,测试效果还不错。
原理:价差值小于或大于规定期限内的最低或最高值时,进场进行套利交易。

PTA和RU15分钟指数数据测试结果
[attach]10343[/attach]

代码:
Params
        Numeric Length1(35);
        Numeric Length2(75);
Vars
        NumericSeries Spread;
        NumericSeries High1;  
        NumericSeries High2;
        NumericSeries Low1;
        NumericSeries Low2;
        Numeric Signlogo(0);       
        Numeric Lots(1);

       
Begin
    If(Data0.Close[1]!=InvalidNumeric&&Data1.Close[1]!=InvalidNumeric)
    {
        Spread=Data0.Close[1]-Data1.Close[1]; // 定义价差                                               
    }
      High1=Highest(Spread[1],Length1);
          High2=Highest(Spread[1],Length2);
          Low1=Lowest(Spread[1],Length1);  
          Low2=Lowest(Spread[1],Length2);  
        PlotNumeric("Spread",Spread);
        PlotNumeric("High1",High1);
        PlotNumeric("Low1",Low1);


       
       
        If(Spread[1]<Low1[1] && Spread>Low1)
        {
          Data1.Buy(Lots,Open);
          Data0.SellShort(Lots,Open);
          Signlogo = 1;
        }
    If(Spread[1]>High1[1] && Spread<High1)       
        {
          Data0.Buy(Lots,Open);
          Data1.SellShort(Lots,Open);
          Signlogo = -1;
        }
       
        If(Signlogo == 1 && Spread>High2 )
        {
          Data1.SellShort(0,Open);
          Data0.BuyToCover(0,Open);
        }
        If(Signlogo == -1 && Spread<Low2)
        {
          Data0.SellShort(0,Open);
          Data1.BuyToCover(0,Open);
        }
          
End
作者: myangsoft    时间: 2012-10-8 09:33:54

沙发,不错 谢谢分享
作者: tigerpan    时间: 2012-10-9 00:26:52

你对spread加上滤波器,高通,会发现回撤更小,资金曲线更漂亮。不过实际操作中滑点和手续费能吃掉所有利润吧。还有非主力合约,能成交吗?万一瘸了一条腿就麻烦了。
作者: ST振翔    时间: 2012-10-9 19:02:45

tigerpan 发表于 2012-10-9 00:26
你对spread加上滤波器,高通,会发现回撤更小,资金曲线更漂亮。不过实际操作中滑点和手续费能吃掉所有利润 ...

谢谢指教。
滤波器?高通?怎么加啊?
作者: 迎风尿十丈    时间: 2012-10-9 19:10:09

套利不懂
作者: tigerpan    时间: 2012-10-9 22:36:00

ST振翔 发表于 2012-10-9 19:02
谢谢指教。
滤波器?高通?怎么加啊?

指教谈不上,大家讨论:)
我是用matlab做的,在matlab里面,把spread当做输入,加filter模块,然后滤掉低频的信号,得到的结果更可靠。如果要实际使用,可以把matlab里面写好的代码发布成c,然后再调用。不过不知道tb能不能调用dll。而且这样做很可能会过渡优化,需要谨慎
作者: ST振翔    时间: 2012-10-9 23:22:19

tigerpan 发表于 2012-10-9 22:36
指教谈不上,大家讨论:)
我是用matlab做的,在matlab里面,把spread当做输入,加filter模块,然后滤掉 ...

TB不如MT4,调用不了DLL。今晚改代码的时候,还出了问题,前几天写的公式全部消失了。
matlab也没接触过,你说的FILTER模块的这种滤波功能原理是什么?不知在TB里面能否实现呢。
作者: feijian0000    时间: 2012-10-16 12:53:45

楼主代码有误,你是做震荡策略吧?进场方向正好相反。
作者: feijian0000    时间: 2012-10-16 13:02:23

测试的时间范围?手续费的设置?滑点的设置?
作者: feijian0000    时间: 2012-10-16 13:05:43

楼主能否说一下进场的原理啊!你的代码是正确的,但是我不太理解你出场方式。你的进场方式趋势类的,出场方式感觉很奇怪?楼主能否解释一下?
作者: ST振翔    时间: 2012-10-17 21:52:37

feijian0000 发表于 2012-10-16 13:05
楼主能否说一下进场的原理啊!你的代码是正确的,但是我不太理解你出场方式。你的进场方式趋势类的,出场方 ...

是震荡策略。
出场好像是有点问题,没给HIGH2和LOW2的线画出来,画出来一看还是有问题的,还要改改。那天只顾着测试看成绩了,没顾着再琢磨代码。
我一般用的测试BAR数不是10000就是20000个,15分钟的,手续费设的是15块钱一手,RU和PTA,滑点是3个点。记不得了,因为系统的交易频率不高,感觉好像影响不大。
作者: ST振翔    时间: 2012-10-17 21:59:13

再发一个套利策略,原理是用布林线,测试效果也不错。

Params
        Numeric Length(30);
        Numeric n(1.5);
Vars
        NumericSeries Spread;
        NumericSeries SpreadAvg;  
        NumericSeries SpreadSdv;      
        Numeric Lots(1);

        
Begin
    If(Data0.Close[1]!=InvalidNumeric&&Data1.Close[1]!=InvalidNumeric)
    {
        Spread=Data0.Close[1]-Data1.Close[1]; // 定义价差                                                
    }
      SpreadAvg=AverageFC(Spread,Length);
          SpreadSdv=StandardDev(Spread, Length,1);
          PlotNumeric("Spread",Spread);
          PlotNumeric("High",SpreadAvg+n*SpreadSdv);
          PlotNumeric("Low",SpreadAvg-n*SpreadSdv);
          
          If(Spread[1]<SpreadAvg[1]-n*SpreadSdv[1])
           {
          Data1.Buy(Lots,Open);
          Data0.SellShort(Lots,Open);
        }
          If(Spread[1]>SpreadAvg[1]+n*SpreadSdv[1])
        {
          Data0.Buy(Lots,Open);
          Data1.SellShort(Lots,Open);
        }

         
End
作者: MUSI87    时间: 2012-10-18 11:55:01

支持一下···套利要研究的东西太多了··正在摸索中
作者: JPMorgan    时间: 2012-10-19 08:49:06

交易过于频繁,回撤过大,实盘很难坚持
作者: feijian0000    时间: 2012-10-23 13:29:37

ST振翔 发表于 2012-10-17 21:59
再发一个套利策略,原理是用布林线,测试效果也不错。

Params

哥们,你方向又开反了。既然是布林线震荡测试,到达上轨应该做空价差。就是data0.sellshort()  与data1.buy ,你的进场方向正好相反啊。


留个QQ联系吧  我的1342403409
作者: sorakiraa    时间: 2012-10-23 13:50:37

JPMorgan 发表于 2012-10-19 08:49
交易过于频繁,回撤过大,实盘很难坚持

这只是个Raw系统,止损止盈,出场条件都没加
作者: ST振翔    时间: 2012-10-24 23:12:23

feijian0000 发表于 2012-10-23 13:29
哥们,你方向又开反了。既然是布林线震荡测试,到达上轨应该做空价差。就是data0.sellshort()  与data1.b ...

加你QQ了,多多指教。
作者: ST振翔    时间: 2012-10-24 23:17:49

sorakiraa 发表于 2012-10-23 13:50
这只是个Raw系统,止损止盈,出场条件都没加

套利交易我觉得没必要设止损止盈,大不了爆仓,爆仓就是止损。出场条件:手头紧了,急着要花钱了,就出场。
作者: 雨中鱼    时间: 2012-11-6 11:52:32

为啥你的第一个套利策略放到TB上出来的数据全是零求解,新手!
作者: ST振翔    时间: 2012-11-8 19:45:17

雨中鱼 发表于 2012-11-6 11:52
为啥你的第一个套利策略放到TB上出来的数据全是零求解,新手!

你用了几个商品?
作者: 我爱酱油/睡    时间: 2012-11-9 11:01:55

楼主的进场点有问题啊 感觉是价差突破之后跟谁价差突破的方向建仓,不科学啊
作者: rookies    时间: 2012-11-10 07:46:17

跨期套利还是跨品种?
作者: 菲儿飞520    时间: 2012-12-9 21:33:07

套利……
作者: shanzi168    时间: 2012-12-21 20:24:36

非常感谢!!!!!!!!!!!!!!!!!!!!!
作者: ggyyff    时间: 2012-12-28 16:39:44

feijian0000 发表于 2012-10-23 13:29
哥们,你方向又开反了。既然是布林线震荡测试,到达上轨应该做空价差。就是data0.sellshort()  与data1.b ...

首先感谢能提供套利的思路和代码

我和15楼有同感  从教科书式的的套利来看 是不是开反了??
作者: 胡老师看盘    时间: 2013-7-22 16:52:00

请教楼主如何把这个公式加载到两个品种之上 进行历史数据回测

作者: 胡老师看盘    时间: 2013-7-22 16:52:14

请教楼主如何把这个公式加载到两个品种之上 进行历史数据回测

作者: 胡老师看盘    时间: 2013-7-22 16:54:18

请教楼主如何把这个公式加载到两个品种之上 进行历史数据回测

作者: 胡老师看盘    时间: 2013-7-22 17:00:21

请教楼主如何把这个公式加载到两个品种之上 进行历史数据回测

作者: ST振翔    时间: 2013-7-23 13:25:32

胡老师看盘 发表于 2013-7-22 17:00
请教楼主如何把这个公式加载到两个品种之上 进行历史数据回测

插入两个商品后再插入公式即可。
作者: vividboy    时间: 2013-7-24 14:55:27

感谢楼主分享思路和代码。有个问题咨询一下:

选择PTA和RU两个品种套利有什么依据吗?

作者: ST振翔    时间: 2013-7-24 15:59:34

vividboy 发表于 2013-7-24 14:55
感谢楼主分享思路和代码。有个问题咨询一下:

选择PTA和RU两个品种套利有什么依据吗?

没啥依据,感觉都是工业品,相关性高。
作者: xinli93    时间: 2013-7-24 22:11:41


作者: johnnycheung    时间: 2013-7-25 21:31:59

有源码学习,能不断提供交易思维
作者: HDLF2008    时间: 2013-9-6 10:59:49

好贴顶一下
作者: corefrontal    时间: 2013-11-11 23:15:36

你好,请问具体合约在超级图标里面怎么设置啊?求解!
作者: ST振翔    时间: 2013-11-12 08:41:26

corefrontal 发表于 2013-11-11 23:15
你好,请问具体合约在超级图标里面怎么设置啊?求解!

先进入一个商品的页面,然后点“插入”,选“插入商品”,选择第二个商品。然后点右键,选“商品设置”进行时间/手续费等设置。
作者: corefrontal    时间: 2013-11-12 09:58:11

ST振翔 发表于 2013-11-12 08:41
先进入一个商品的页面,然后点“插入”,选“插入商品”,选择第二个商品。然后点右键,选“商品设置”进 ...

好的,谢谢你!还有一个问题,就是如何就两个合约价差的绝对值?
作者: ST振翔    时间: 2013-11-12 11:20:57

corefrontal 发表于 2013-11-12 09:58
好的,谢谢你!还有一个问题,就是如何就两个合约价差的绝对值?

求绝对值用abs函数。比如合约1的值为DATA0.CLOSE,合约2的值为DATA1.CLOSE,则两个合约价差的绝对值为:abs(DATA0.CLOSE-DATA1.CLOSE)
作者: dudu_lucky    时间: 2014-5-31 13:08:35

mark
作者: win5ms    时间: 2016-12-22 15:44:23

跨品种?
作者: htqh81191795    时间: 2017-4-18 14:57:44

很好的学习思路,
作者: zz87896575    时间: 2017-5-26 16:09:01

挖个坟,我测试了一下这个是13年的策略,后面几年基本都不赚钱了,这样的策略有意义吗?




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2