- 精华
- 0
- 在线时间
- 61 小时
- UID
- 193025
- 积分
- 8
- 帖子
- 3
- 阅读权限
- 10
- 注册时间
- 2014-8-28
- 最后登录
- 2015-2-21
- 精华
- 0
- UID
- 193025
- 积分
- 8
- 帖子
- 3
- 主题
- 3
- 阅读权限
- 10
- 注册时间
- 2014-8-28
- 最后登录
- 2015-2-21
|
参考了论坛中的多人的代码,经过了自己的一些优化。供大家参考。
//------------------------------------------------------------------------
// 简称: AA_DualThrust
// 名称: DualThrust
// 类别: 公式应用
// 类型: 用户应用
// 输出:YAQ
//------------------------------------------------------------------------
Params
Numeric KUp(0.50); //上轨系数
Numeric KDown(0.50); //下轨系数
Numeric DayUp(1); //上轨观察天数
Numeric DayDown(1); //下轨观察天数
Numeric Lots(1); //合约手数
Numeric Offset(0); //委托偏移跳数
Vars
Numeric RangeUp(0); //上轨幅度
Numeric RangeDown(0); //下轨幅度
//Numeric BuyTrig(0);
//Numeric SellTrig(0);
Numeric HH;
Numeric LL;
Numeric HC;
Numeric LC;
Numeric i_Offset; //委托偏移价格
Numeric BuyPosition; //买入价格
Numeric SellPosition; //卖出价格
Numeric i; //记次容器
Begin
//--- 判断图表中是否有足够天数的数据 Begin ---
If(BarStatus == 0)
{
SetGlobalVar(0,0); //第一个全局变量记录当前BAR的DAY值
SetGlobalVar(1,0); //第二个全局变量记录从第一根BAR到当前BAR经历过的天数
}
If(Day()<>GetGlobalVar(0)) //如果当前BAR的DAY值不等于前一根BAR的DAY值,则表明又增加一天
{
SetGlobalVar(0,Day()); //记录下当前BAR的DAY值
SetGlobalVar(1,GetGlobalVar(1)+1);// 将经历过的天数加1并保存
}
Commentary(text(GetGlobalVar(1))); // 测试语句,可删除
If(GetGlobalVar(1) < 1 + Max(DayUp,DayDown)) Return; // 如果全部数据天数不够,则返回
//致此,图表数据至少跨越两天
//--- 判断图表中是否有足够天数的数据 End -----
i_offset = Offset*MinMove*PriceScale; //根据委托偏移跳数取委托偏移价格
//--- 取上轨幅度 Begin ---
HH = HighD(1);
HC = CloseD(1);
LL = LowD(1);
LC = HC;//CloseD(1);
For i = 2 to DayUp
{
HH = Max(HH,HighD(i));
HC = Max(HC,CloseD(i));
LL = Min(LL,LowD(i));
LC = Min(LC,CloseD(i));
}
RangeUp = KUp * Max(HH-LC,HC-LL);
//--- 取上轨幅度 End ---
//--- 取下轨幅度 Begin ---
HH = HighD(1);
HC = CloseD(1);
LL = LowD(1);
LC = HC;//CloseD(1);
For i = 2 to DayDown
{
HH = Max(HH,HighD(i));
HC = Max(HC,CloseD(i));
LL = Min(LL,LowD(i));
LC = Min(LC,CloseD(i));
}
RangeDown = KDown * Max(HH-LC,HC-LL);
//--- 取下轨幅度 End ---
BuyPosition = OpenD(0) + RangeUp;
SellPosition = OpenD(0) - RangeDown;
PlotNumeric("BuyPosition",BuyPosition);
PlotNumeric("SellPosition",SellPosition);
If(MarketPosition == 0)
{
If(High >= BuyPosition)
{
Buy(lots,Max(Open,BuyPosition) + i_offset);
Return;
}
If(Low <= SellPosition)
{
SellShort(lots,Min(Open,SellPosition) - i_offset);
Return;
}
}
If(MarketPosition == -1)
{
If(High >= BuyPosition)
{
Buy(lots,Max(Open,BuyPosition) + i_offset);
Return;
}
}
If(MarketPosition == 1)
{
If(Low <= SellPosition)
{
SellShort(lots,Min(Open,SellPosition) - i_offset);
Return;
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2015-01-13 00:29:44
// 版权所有 yaq2012
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ |
|