设为首页收藏本站

 找回密码
 注册
查看: 20098|回复: 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: 2

精华
0
UID
150616
积分
58
帖子
40
主题
3
阅读权限
30
注册时间
2013-7-9
最后登录
2021-8-26
28#
发表于 2019-1-31 15:32:06 |只看该作者
不错不错

使用道具 举报

Rank: 1

精华
0
UID
269619
积分
24
帖子
23
主题
0
阅读权限
10
注册时间
2018-9-5
最后登录
2018-11-1
27#
发表于 2018-10-16 12:38:54 |只看该作者
mark

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
12849
积分
230
帖子
109
主题
13
阅读权限
40
注册时间
2010-6-23
最后登录
2024-2-2
26#
发表于 2014-2-26 22:06:35 |只看该作者
写完整没有?

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
74235
积分
233
帖子
79
主题
29
阅读权限
40
注册时间
2011-10-25
最后登录
2019-3-15
25#
发表于 2014-2-26 16:17:02 |只看该作者
拜读楼主大作,很有收获。上面提到过滤盘整的第二个方法,具体如何理解?

使用道具 举报

Rank: 2

精华
0
UID
179663
积分
59
帖子
35
主题
7
阅读权限
30
注册时间
2014-1-22
最后登录
2020-1-2
24#
发表于 2014-2-25 13:39:09 |只看该作者
QQ,599196908,等你的回复

使用道具 举报

Rank: 1

精华
0
UID
306
积分
17
帖子
5
主题
0
阅读权限
10
注册时间
2007-9-7
最后登录
2019-4-5
23#
发表于 2013-8-26 08:46:04 |只看该作者
好帖,论坛需要兄这样的技术类人才!

使用道具 举报

Rank: 1

精华
0
UID
117273
积分
43
帖子
20
主题
5
阅读权限
10
注册时间
2013-3-23
最后登录
2022-12-22
22#
发表于 2013-8-25 12:01:40 |只看该作者
:):):):):)有点高深,我还是得多看看啊

使用道具 举报

Rank: 2

精华
0
UID
117262
积分
54
帖子
28
主题
7
阅读权限
30
注册时间
2013-5-21
最后登录
2015-10-21
21#
发表于 2013-8-21 17:43:48 |只看该作者
写的好 需要有这样理论的指导

使用道具 举报

Rank: 2

精华
0
UID
5564
积分
76
帖子
34
主题
8
阅读权限
30
注册时间
2009-9-29
最后登录
2017-10-30
20#
发表于 2013-8-21 11:48:10 |只看该作者
关注中....

使用道具 举报

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

bottom

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

GMT+8, 2024-5-2 23:00

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部