设为首页收藏本站

 找回密码
 注册
查看: 20062|回复: 27
打印 上一主题 下一主题

日内交易模型的形成+代码 [复制链接]

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
跳转到指定楼层
1#
发表于 2013-8-4 18:32:29 |只看该作者 |倒序浏览
看了很多人写的模型,也看了很多人发的模型,在此给予一个总结,在我看来,大多数人研究的是日内模型,对股指研究的偏多,由此我把日内模型的框架总结一下,并将一些容易用到的代码发表出来
1.日内我建议就是做突破,别把一些没用的弄进去,过多的是给这个程序带来负面的影响,看了很多发策略的,把日内分成趋势和震荡,而且对这两个下了定义,就像恒温器一样,但不能用于实盘交易
2.日内别用技术指标来做进出场,技术指标我建议就是辅助,举个简单的例子,很多人喜欢MACD,RSI,KDJ,均线,但用他们来写进出场,你们盈利了吗?很多人都认为背离很好,超卖超买很实用,说实话,在中国这个不成熟的期货的市场,你用的指标天天都在背离,结果相信也亏损了不少,本人在国外发现外国人用的最多的就是突破,就那么简单
3,编程的要求,如果想做程序化,我建议真的要好好学学编程,原因就是很多人有好的策略,但对编程不是很了解,结果做出的策略和实际相差很远

以上是都是废话,来实际的吧!

我拿举例来说明日内框架的形成,也拿突破,就拿短线狙击手里面的突破举例乔治。安杰尔提到日内的几个阻力点,在此把他们给发出来,做多突破
做多。上涨值,买进高值,今天的高点,轴点突破值,做空相反
代码
mtHi = High;
mtLo = Low;
mtCl = Close;


//上涨值:=(REF(H,1)-REF(L,2)+REF(H,2)-REF(L,3)+REF(H,3)-REF(L,4))/3+REF(L,1);
UpperValue = (mtHi[1]-mtLo[2]+mtHi[2]-mtLo[3]+mtHi[3]-mtLo[4])/3+mtLo[1];

//下跌值:=REF(H,1)-(REF(H,2)-REF(L,1)+REF(H,3)-REF(L,2)+REF(H,4)-REF(L,3))/3;

DownValue = mtHi[1]-(mtHi[2]-mtLo[1]+mtHi[3]-mtLo[2]+mtHi[4]-mtLo[3])/3;

//买进高值:=(REF(H,1)-REF(H,4))/3+REF(H,1);
BuyHiValue = (mtHi[1]-mtHi[4])/3+mtHi[1];
//买进低值:=REF(L,1)-(REF(L,4)-REF(L,1))/3;
SellLoValue = mtLo[1]-(mtLo[4]-mtLo[1])/3;

//昨日高点:=REF(H,1);
TodayHi = mtHi[1];
//昨日低点:=REF(L,1);
Todaylo = mtLo[1];
//轴点突破买进值:=(REF(H,1)+REF(L,1)+REF(C,1))*2/3-REF(L,1);
BreakBuyValue = (mtHi[1]+mtLo[1]+mtCl[1])*2/3-mtLo[1];

//轴点突破卖出值:=(REF(H,1)+REF(L,1)+REF(C,1))*2/3-REF(H,1);
BreakSellValue = (mtHi[1]+mtLo[1]+mtCl[1])*2/3-mtHi[1];

//平均买值:=(上涨值+买进高值+今日高点+轴点突破买进值)/4;
AvgBuyValue = (UpperValue+BuyHiValue+TodayHi+BreakBuyValue)/4;

//平均卖值:=(下跌值+买进低值+昨日低点+轴点突破卖出值)/4;
AvgSellValue = (DownValue+SellLoValue+Todaylo+BreakSellValue)/4;


//上突破a:MAX(上涨值,买进高值,今日高点,轴点突破买进值,平均买值);
UpperBreak = IntPart(Max(UpperValue,Max(BuyHiValue,Max(TodayHi,Max(BreakBuyValue,AvgBuyValue))))/MinPoint)*MinPoint;

//下突破d:MIN(下跌值,买进低值,昨日低点,轴点突破卖出值,平均卖值);

DownBreak = IntPart(Min(DownValue,Min(SellLoValue,Min(Todaylo,Min(BreakSellValue,AvgSellValue))))/MinPoint)*MinPoint;

//止损上位b:MIN(上涨值,买进高值,今日高点,轴点突破买进值,平均买值);

UpperStop = IntPart(Min(UpperValue,Min(BuyHiValue,Min(TodayHi,Min(BreakBuyValue,AvgBuyValue))))/MinPoint)*MinPoint;


//止损下位c:MAX(下跌值,买进低值,昨日低点,轴点突破卖出值,平均卖值);
DownStop = IntPart(Max(DownValue,Max(SellLoValue,Max(Todaylo,Max(BreakSellValue,AvgSellValue))))/MinPoint)*MinPoint;


BuyPoint =DownStop+UpperBreak-DownBreak;//买点

PlotNumeric("BuyPoint",BuyPoint);
SellPoint =UpperStop-(UpperBreak-DownBreak);//卖点

以上就算出来一个买点和卖点,我们就可以按照这两个点进场,声明以上都是举例,原因我相信就算发出完整代码对你们也没有好处,策略一定要自己写出来

还是进入正题,以上有了两个点买点和卖点,那么就要对开仓的指令选择图标信息一般是BUY这些指令,便于我们测试,对于以上还是要严格的说一下,有很多人将这些没分清,并将A函数混合进来结果单日内就满仓,
marketposition 对应图标信号,BUY,SELL,SELLSHORT,BUYTOCOVER
a_sendorder对应a_totalposition,a_buyposition,a_sellposition,所以要将上面的分开,不然就是很多人说的不停的发单,这里给大家提醒一下。
继续正题,开仓过后我们要做什么,我们想要的是对信号的确认,这里就可以用刚刚说的那些技术指标,是我一般不会用同周期,拿均线来说,我愿意拿大周期来过滤,这里可以采用数据切分,数据库一些方法,TB的数据库使用太过繁琐,我建议大家就使用数据切分吧!
做任何一个策略都是希望拿到趋势,什么低买高卖的我没看见几个真正赚到钱的,更别说当日冲销的,我敢肯定他在欺骗你


过滤盘整的一些方法,1.大周期过滤,
2。高低点过滤,比如高点 m, 低点,N那么我们可以用(m-(m+n)/2)(m+n)/2,对做多下个定义,让这个值小于某个值,以免太多信号
3.价格过滤,我可以要求今天的开盘价大于N个周期的收盘价,或者昨日的收盘价大于前N个周期的收盘价,我在此要求上做多
4,区间过滤,很多时候,日内今日涨幅过大,第2天的波动就很小,那么可以对区间下一个定义,不然今天不做交易,那么我们可以把这个概念定义小一点,定义到单根K线上,当N根K线都小于这个值时,我们应该进场,而不是观望,原因是盘整过后就是大趋势

Params
    Numeric MinRange(0.2);
Vars
    NumericSeries DayOpen;
    Numeric preDayHigh;
    Numeric preDayLow;   
    NumericSeries preDayRange;
Begin
    preDayHigh = HighD(1);
    preDayLow = LowD(1);
    If(Date!=Date[1])
    {
        DayOpen = Open;
        preDayRange = preDayHigh - preDayLow;
        If(preDayRange < Open*MinRange*0.01)
             preDayRange = Open*MinRange*0.01;
    }Else
    {
        DayOpen = DayOpen[1];
        preDayRange = preDayRange[1];
    }
这里就发一个别人写的简单区间,那么N根K线,这里自己定义序列变量,然后达到几根K线过后,我们就进场

以上4中是举例,还有很多,不依依介绍

上面说完,我认为要对单根K线的处理,一根K线不能连续的出现信号,在我理念里面一根K线就一个信号最好,包括反手我都不建议,只会让你滑点变大,当然你真的想反手,我建议延迟几个TICK比较好,TB交易指南里面有例子,如果不是这样,我们在平仓的时候加入 if(MarketPosition == 1 and BarsSinceEntry>=1){}
由于是突破,对再进场是必要的,这样才能拿到大趋势

Params

      参数

       
Vars
   
       
        BoolSeries         bLongTrailingStoped(False);
        BoolSeries         bShortTrailingStoped(False);
        NumericSeries HigherAfterEntry;
        NumericSeries LowerAfterEntry;
   
        Numeric myEntryPrice;
        Numeric myExitPrice;
       


       
       
Begin



       
   
          If(做多条件 and bLongTrailingStoped==False and MarketPosition ==0)
          {
                        做多点
                        BUY(0,myEntryPrice)
                        bShortTrailingStoped = False;
          }


          If(做空条件 and bShortTrailingStoped == False and MarketPosition ==0)
          {
                      做空点
                      SellShort(1,myEntryPrice);
                        bLongTrailingStoped=False;                         
          }
       
         
         
          if(MarketPosition == 1 and BarsSinceEntry>=1)
          {
       
                        做多平仓点
                         Sell(0,myExitPrice);   
                        bLongTrailingStoped=True;
                        }
                 

               
                       
          }
          if(MarketPosition == -1 and BarsSinceEntry>=1)
          {
          

          做空平仓点
          BuyToCover(0,myExitPrice);   
          bShortTrailingStoped=True;          
          }
          
          
          
         }

//再进场          
          If(BarsSinceEntry == 1)
   {
          HigherAfterEntry = EntryPrice;
          LowerAfterEntry = HigherAfterEntry;
   }Else If(BarsSinceEntry > 1)
   {
        HigherAfterEntry = Max(HigherAfterEntry[1],High[1]);
        LowerAfterEntry = Min(LowerAfterEntry[1],Low[1]);
  }
   Commentary("HigherAfterEntry="+Text(HigherAfterEntry));
   Commentary("LowerAfterEntry="+Text(LowerAfterEntry));
   
   If(BarStatus > 0)
   {
        bLongTrailingStoped = bLongTrailingStoped[1];
        bShortTrailingStoped = bShortTrailingStoped[1];
  }
   Commentary("bLongTrailingStoped="+IIFString(bLongTrailingStoped,"True","False"));
   Commentary("bShortTrailingStoped="+IIFString(bShortTrailingStoped,"True","False"));
If(bLongTrailingStoped == True && MarketPosition==0 && High > HigherAfterEntry)
{
        再次做多点,前高
        Buy(1,myEntryPrice);
        bLongTrailingStoped = False;
}
If(bShortTrailingStoped == True && MarketPosition==0 && Low < LowerAfterEntry)
{
        再次做空点,前低
        SellShort(1,myEntryPrice);
        bShortTrailingStoped= False;
}

          
          
    }
       
       
       
End


还有其他的下次再说,本人也没学TB多久,不好的希望大家提意见
已有 3 人评分威望 收起 理由
luckybirdt + 2 赞一个!学习了
gosu + 2 赞一个!
lmxy202 + 4 很给力!

总评分: 威望 + 8   查看全部评分

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
2#
发表于 2013-8-4 20:20:35 |只看该作者
由于是日内,可能出现开盘就要进场的原因,我们希望刚开盘时,不要被拒
begin
   if(barstaus==2 && time==0.0900 &&currenttime<0.090005)return;
   if(barstaus==2 && currenttime<0.090005)return;
这是早上,上面的时间是商品,股指把上面那个开盘的时间修改一下,
begin
  if(barstaus ==2 && currenttime>=0.132955 && currenttime<0.133005)return;
这是下午,再次对上面两个时间函数说一下,
time,是指交易的时间,即当前的时间,currenttime是电脑操作系统的时间,如果搞混了,是会出问题的,如果你的电脑比交易所的时间慢,会导致你的交易部成功,所以还是小心

有人可能喜欢使用集合竞价,用此方法过滤,大家可以去看看指南里面的,里面有两种写法

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
3#
发表于 2013-8-4 20:34:19 |只看该作者
以上有了进场,和再进场,我们对细节要求一下,这最主要是防止回测更准一点拿海龟举例, If(High > DonchianHi && TurtleUnits >= 1)
        {
            // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = min(high,DonchianHi + MinPoint);
            myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                        preEntryPrice = myEntryPrice;
            Buy(TurtleUnits,myEntryPrice);
                        SendOrderThisBar = True;
                        PreBreakoutFailure = False;
        }
我们看看这一句min(high,DonchianHi + MinPoint);,如果某根K线的最高点是1000,我们的突破点是900,那么加上两个滑点902<1000,这时候没问题,原因取最小的,那如果最高点是901,突破还是900,那么我们取的是901,而不是902,所以这里对回测不是很准,有人说用下根K线的开盘价,同理,开盘价一样可能比我们的突破价小,同样不是很准确,那如果该成max(high,DonchianHi + MinPoint);我们取最大的价,假如我们的突破价还是900,最高价901,滑点两个902,取902,那么这笔我们就交易不会成功,但是如果最高点是910,这同理取最大价,回测的价格就是以910这个价格,滑点就是10个而不是两个,原因是历史的高低点是不变的,就算用了开盘价也不一定准,真实交易部会刚好就那个价位交易,回测的时候我们就用高手续费来代替滑点,比如股指我们可以调成5%%,其他的依次类推,如果还是有不错的效果,策略就差不多



这是海龟的买进,

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
4#
发表于 2013-8-4 20:43:58 |只看该作者
有了进场,对出场是很难的,TB指南里面有固定止损和跟踪止损,止盈,按照一般的止损,可以使用初始止损,这里就是固定的,即开盘后就下止损单,然后超过保本就采用保本止损,最后采用跟踪止损止盈,但我没用这种方法,我的原则只有止损,没有止盈,只有这样才能让利润最大化,简单的就是百分比,确定一个区间,让后让其自动止损,当然这比较简单,我们可以用通道平均线,或者形态止损,我采用了一个出击日形态,然后用到了8日成交量放大,并且要求这根K线的区间值是前8根K线的1.8倍我出场

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
73474
积分
1249
帖子
695
主题
30
阅读权限
60
注册时间
2011-10-22
最后登录
2015-11-6
5#
发表于 2013-8-4 21:15:49 |只看该作者
贺天 发表于 2013-8-4 20:43
有了进场,对出场是很难的,TB指南里面有固定止损和跟踪止损,止盈,按照一般的止损,可以使用初始止损,这 ...

TB公式中,本段出场源码怎么样编写?请楼主多多指教,谢谢

使用道具 举报

Rank: 4

精华
0
UID
114391
积分
294
帖子
89
主题
6
阅读权限
50
注册时间
2012-12-25
最后登录
2015-7-22
6#
发表于 2013-8-4 21:36:57 |只看该作者
//买进高值:=(REF(H,1)-REF(H,4))/3+REF(H,1);
BuyHiValue = (mtHi[1]-mtHi[4])/3+mtHi[1];
//买进低值:=REF(L,1)-(REF(L,4)-REF(L,1))/3;
SellLoValue = mtLo[1]-(mtLo[4]-mtLo[1])/3;


楼主,这段没看懂

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
7#
发表于 2013-8-4 23:19:01 |只看该作者
不好意思,我编程的同时在编文华财经和金字塔,所以代码看起来有点乱了

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
8#
发表于 2013-8-4 23:19:40 |只看该作者
//买进高值:=(REF(H,1)-REF(H,4))/3+REF(H,1);
BuyHiValue = (mtHi[1]-mtHi[4])/3+mtHi[1];
//买进低值:=REF(L,1)-(REF(L,4)-REF(L,1))/3;
SellLoValue = mtLo[1]-(mtLo[4]-mtLo[1])/3;
//后面是文华财经的

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
9#
发表于 2013-8-4 23:24:43 |只看该作者
天崖 发表于 2013-8-4 21:15
TB公式中,本段出场源码怎么样编写?请楼主多多指教,谢谢

代码下周星期6继续讲,明天开盘了

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
120991
积分
224
帖子
109
主题
3
阅读权限
40
注册时间
2013-7-5
最后登录
2014-3-13
10#
发表于 2013-8-4 23:25:27 |只看该作者
wolaifa 发表于 2013-8-4 21:36
//买进高值:=(REF(H,1)-REF(H,4))/3+REF(H,1);
BuyHiValue = (mtHi[1]-mtHi[4])/3+mtHi[1];
//买进低值:=RE ...

上面//后面是文华财经的

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-19 23:51

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部