设为首页收藏本站

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

新手请教一个代码问题 [复制链接]

Rank: 1

精华
0
UID
219749
积分
11
帖子
7
主题
4
阅读权限
10
注册时间
2015-9-15
最后登录
2015-11-4
跳转到指定楼层
1#
发表于 2015-9-21 19:15:43 |只看该作者 |倒序浏览
本帖最后由 tzwjjxj 于 2015-9-21 23:53 编辑

一段书上的代码,但是手工敲进去后发生各种问题,本人不是搞程序的,请高手修正,谢谢!
//------------------------------------------------------------------------
// 简称: CL_MovingAverageCrossOver
// 名称: CL_MovingAverageCrossOver
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------
CL_MovingAverageCrossOver_L       //基于均线交叉的通道突破系统多

Params
  Numeric FastLen(9);   //快速均线周期
  Numeric SlowLen(18);  //慢速均线周期
  Numeric ChLen(12);  //通道突破的周期数
  Numeric ExtraPercentage(300);   //通道突破的幅度(万分比) 如300=3%
  
  Numeric TrailBar(8);  //多少根Bar的最低价作为止损价
  Numeric InitialLosts(0);  //初始进场寸头
  Numeric ReBars(15);  //再次进场在出场后多少根Bar内
  Numeric ReEntryChLen(10); //再进场通道突破的周期数
  Numeric ReEntryLots(0);   //再进场头寸
  
  Var
  NumericSeries FastMA;    //快速均线
  NumericSeries SlowMA;   //慢速均线
  
  Bool ConCrossOver;    //是否金叉(快速均线上穿慢速均线)
  Bool ConCrossUnder;   //是否死叉(快速均线下穿慢速均线)
  Numeric HH;           //最近N根Bar的高点
  Numeric LL;           //最近N根Bar的低点
  
  NumericSeries LEntryPrice;  //开多的突破价
  NumericSeries SEntryPrice;  //开空的突破价
  
  NumericSeries LCount;      //均线金叉后记录Bar序号
  NumericSeries SCount;      //均线死叉后记录Bar序列
  
  NumericSeries TrailStopPrice;  //跟踪止损的止损价
  NumericSeries ReEntryPrice;    //再进场突破开仓的价格
  NumericSeries ReEntryCount;    //跟踪止损后记录Bar序号
  
  
  Begin
  
  //集合竞价和小节休息过滤
  
  If (! CallAuctionFilter ()) Return;
  
  //计算均线
  
  FastMA=Average (Close, FastLen);
  SlowMA=Average (Close, SlowLen);
  PlotNumeric ("FastMA", FastMA);
  PlotNumeric ("SlowMA", SlowMA);
  
  //判断均线是否金叉
  
  ConCrossOver=CrossOver (FastMA, SlowMA);
  
  //金叉发生时记录最近Chlen 根Bar的高点加上ExtraPercentage%作为开多突破价
  
  HH=Hightest (Hingt, Chlen);
  If (ConCrossOver And CurrentBar>=ChLen-1)
   {
   LEntryPrice=HH* (1 + ExtraPercentage*0.0001);
   
   //记录Bar序列号以控制只在金叉后Chlen根Bar内进场否则放弃本次交易
   
   Lcont=CurrentBar;
   }
   
   //开仓
   If (marketposition= =0 And CurrentBar > LCount And CurrentBar < = LCount + Chelen And Hight > =LentryPrice And Vol > 0)
    {
        Buy (initialLots, Max (open, LEntryPrice));
        Commentary ("初次多");
       
        //修改LCount 值以保证每次金叉后只初始进场一次
        Lcount=-999;
         }
         
         //判断趋势是否反转
         ConCrossUnder=ConCrossUnder (FastMA, SlowMA);
         
         //死叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开空突破价
         
        //因为空策略分开,做多策略只考虑平仓,空头开仓由做空策略处理
       
        LL=Lowest (Low, Chlen);
        If (ConCrossUnder And CurrentBar >=ChLen-1)
        {
        SEntryPrice=LL* (1-ExtraPercentage*0.0001);
       
        //记录Bar序列号以控制只在死叉后Chlen 根Bar内突破有效
        SCount =CurrentBar;
     }
         
         //反向突破
  If (CurrentBar > SCount And CurrentBar <=SCount + Chlen And Low <=SEntryPrice And Vol >0)
  
  {
  
  //有持仓则平仓
  
  If (Marketposition= =1)
  
   {
   Sell (0, Min (open, SEntryPrice));
   Commentary("多单反向出场");
    }
       
        //反向后原趋势结束
        LCount =-999;
        ReEntryCount=-999;
         }
         
         //跟踪止损出场
         //计算止损位
         
         TrailStopPrice=Lowest (Low [1], TrailBar);
         Commentary ("TrailStopPrice=" + Text (TrailStopPrice));
         
         //计算最近ReEntryChLen根Bar的高点
         HH=Hightest (Hight, ReEntryChLen);
         
         //触发止损
         If (MarketPosition= =1 And BarsSinceEntry > 0 And Vol> 0)
         {
         If (Low < =TrailStopPrice)
         {
         Sell (0, Min (open, TrailStopPrice));
         
         Commentary ("多单跟踪止损出场");
         
         //跟踪止损后记录Bar序号准备再进场
         
         ReEntryCount=CurrentBar;
         //以ReEntryChLen周期高点作为再进场突破价
         
         ReEntryPrice=HH;
          }
           }
          
          
           //出场后再ReBar根Bar内,价格突破再进场突破价进场
          
           If  (MarketPosition= =0 And BarSinceExit > 0 And CurrentBar < =Re-EntryCount + ReBars And Vol >0)
           {
           If (High > =ReEntryPrice)
          
           {
           Buy (ReEntryLots, Max (Open, ReEntryPrice));
           Commentary ("再次多");
            }
                }
                End
               
                CL_MovingAverageCrossOver_S  //基于均线交叉的通道突破系统空
               
                Params
                Numeric FastLen(9);    //快速均线周期数
                Numeric SlowLen(18);   //快速均线周期数
                Numeric Chlen(12);     //通道突破的周期数
                Numeric ExtraPercentage(300);  //通道突破的幅度 (万分比), 如:300=3%
               
                Numeric TrailBar(8);    //多少根Bar的最低价作为跟踪止损价
                Numeric initialLots(0);  //初始进场寸头
                Numeric ReBars(15);      //再进场必须在出场后多少根Bar内
                Numeric ReEntryChLen根Bar的高点(10);  //再进场通道突破的周期数
                Numeric ReEntryLots(0);        //再进场寸头
               
        Vars
       
        NumericSeries FastMA;           //快速均线
        NumericSeries SlowMA;           //慢速均线
        Bool ConCrossOver;              //是否金叉(快速均线上穿慢速均线)
        Bool ConCrossUnder;             //是否死叉 (快速均线下穿慢速均线)
       
        Numeric HH;                      //最近N根Bar的高点
        Numeric LL;                      //最近N根Bar的底点
        NumericSeries LEntryPrice;       //开多的突破价
        NumericSeries SEntryPrice;       //开空的突破价
        NumericSeries LCount;            //均线金叉后记录Bar序列
        NumericSeries SCount;            //均线死叉后记录Bar序列
        NumericSeries TrailStopPrice;    //跟踪止损的止损价
        NumericSeries ReEntryPrice;      //再进场突破开仓的价格
        NumericSeries ReEntryCount;      //跟踪止损后记录Bar序号
       
Begin

//集合竞价和小节休息过滤

If (! CallAuctionFilter ()) Return;

//计算均线
FastMA=Average (Close, FastLen);
SlowMA=Average (Close, SlowLen);
PlotNumeric ("FastMA",FastMA);
PlotNumeric ("SlowMA",SlowMA);

//判断均线是否死叉
ConCrossUnder=CrossUnder (FastMA, SlowMA);

//死叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开空突破价
LL=Lowest (Low, Chlen);
  If (ConCrossUnder And CurrentBar>=ChLen-1)
   {
   SEntryPrice=LL* (1 - ExtraPercentage*0.0001);
   
   //记录Bar序列号以控制只在死叉后Chlen根Bar内进场否则放弃本次交易
   
   SCont=CurrentBar;
   }
   
   //开仓
   If (marketposition= =0 And CurrentBar > SCount And CurrentBar < = SCount + Chelen And Low < =SentryPrice And Vol > 0)
    {
        SellShort (initialLots, Min (Open, SEntryPrice));
        Commentary ("初次空");
       
        //修改SCount 值以保证每次死叉后只初始进场一次
        SCount=-999;
         }
         
         //判断趋势是否反转
         ConCrossOver=ConCrossOver (FastMA, SlowMA);
         
         //金叉发生时记录最近Chlen根Bar的低点减去ExtraPercentage%作为开多突破价
         
        //因为空策略分开,做空策略只考虑平仓,多头开仓由做多策略处理
       
        HH=Highest (High, Chlen);
        If (ConCrossOver And CurrentBar >=ChLen-1)
        {
        LEntryPrice=HH* (1+ExtraPercentage*0.01);
       
        //记录Bar序列号以控制只在金叉后Chlen 根Bar内突破有效
        LCount =CurrentBar;
     }
         
         //反向突破
  If (CurrentBar > LCount And CurrentBar <=LCount + Chlen And Hight >=LEntryPrice And Vol >0)
  
  {
  
  //有持仓则平仓
  
  If (Marketposition= =-1)
  
   {
   BuyToCover (0, Max (open, LEntryPrice));
   Commentary("空单反向出场");
    }
       
        //反向后原趋势结束
        SCount =-999;
        ReEntryCount=-999;
         }
         
         //跟踪止损出场
         //计算止损位
         
         TrailStopPrice=Highest (High [1], TrailBar);
         Commentary ("TrailStopPrice=" + Text (TrailStopPrice));
         
         //计算最近ReEntryChLen根Bar的底点
         
         LL=Lowest (Low, ReEntryChLen);
         
         //触发止损
         If (MarketPosition= =-1 And BarsSinceEntry > 0 And Vol> 0)
         {
         If (High < =TrailStopPrice)
         {
         BuyToCover (0, Max (open, TrailStopPrice));
         
         Commentary ("空单跟踪止损出场");
         
         //跟踪止损后记录Bar序号准备再进场
         
         ReEntryCount=CurrentBar;
         //以ReEntryChLen周期底点作为再进场突破价
         
         ReEntryPrice=LL;
          }
           }
          
          
           //出场后再ReBar根Bar内,价格突破再进场突破价进场
          
           If  (MarketPosition= =0 And BarSinceExit > 0 And CurrentBar < =Re-EntryCount + ReBars And Vol >0)
           {
           If (Low < =ReEntryPrice)
          
           {
           SellShort (ReEntryLots, Min (Open, ReEntryPrice));
           Commentary ("再次空");
            }
                }
                End
               

Rank: 1

精华
0
UID
223903
积分
12
帖子
10
主题
0
阅读权限
10
注册时间
2015-11-26
最后登录
2015-12-22
2#
发表于 2015-11-30 12:24:22 |只看该作者
最好把逻辑附上,这样容易理解。

使用道具 举报

Rank: 1

精华
0
UID
227797
积分
9
帖子
9
主题
0
阅读权限
10
注册时间
2016-2-2
最后登录
2016-8-12
3#
发表于 2016-2-2 17:06:58 |只看该作者
完全看不懂 好高深!!!你们都是选编程毕业的吗

使用道具 举报

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

bottom

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

GMT+8, 2024-5-10 05:05

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部