- 精华
- 0
- 在线时间
- 234 小时
- UID
- 120991
- 积分
- 224
- 帖子
- 109
- 阅读权限
- 40
- 注册时间
- 2013-7-5
- 最后登录
- 2014-3-13
- 精华
- 0
- UID
- 120991
- 积分
- 224
- 帖子
- 109
- 主题
- 3
- 阅读权限
- 40
- 注册时间
- 2013-7-5
- 最后登录
- 2014-3-13
|
看了很多人写的模型,也看了很多人发的模型,在此给予一个总结,在我看来,大多数人研究的是日内模型,对股指研究的偏多,由此我把日内模型的框架总结一下,并将一些容易用到的代码发表出来
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多久,不好的希望大家提意见 |
-
总评分: 威望 + 8
查看全部评分
|