设为首页收藏本站

 找回密码
 注册
查看: 833|回复: 1

持仓 [复制链接]

Rank: 1

精华
0
UID
269875
积分
3
帖子
2
主题
1
阅读权限
10
注册时间
2018-9-10
最后登录
2020-11-13
发表于 2020-8-7 15:18:15 |显示全部楼层
在15分k线中,持仓量大于前k持仓0.01怎么编写,谢谢

Rank: 1

精华
0
UID
269875
积分
3
帖子
2
主题
1
阅读权限
10
注册时间
2018-9-10
最后登录
2020-11-13
发表于 2020-8-7 15:22:04 |显示全部楼层
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(10);                // 再进场通道突破的周期数
        Numeric ReEntryLots(0);                        // 再进场头寸
       
Vars
        Series<Numeric> FastMA;                        // 快速均线
        Series<Numeric> SlowMA;                        // 慢速均线
        Bool ConCrossOver;                                // 是否金叉(快速均线上穿慢速均线)
        Bool ConCrossUnder;                                // 是否死叉(快速均线下穿慢速均线)
        Numeric HH;                                                // 最近N根BAR的高点
        Numeric LL;                                                // 最近N根BAR的低点
        Series<Numeric> LEntryPrice;        // 开多的突破价
        Series<Numeric> SEntryPrice;        // 开空的突破价
        Series<Numeric> LCount;                        // 均线金叉后记录BAR序号
        Series<Numeric> SCount;                        // 均线死叉后记录BAR序号
        Series<Numeric> TrailStopPrice;        // 跟踪止损的止损价
        Series<Numeric> ReEntryPrice;        // 再进场突破开仓的价格
        Series<Numeric> ReEntryCount;        // 跟踪止损后记录BAR序号
Events
        OnBar(ArrayRef<Integer> indexs)
        {
               
               
                // 计算均线
                FastMA = Average(Close, FastLen);
                SlowMA = Average(Close, SlowLen);
                PlotNumeric("FastMA",FastMA);
                PlotNumeric("SlowMA",SlowMA);
                // 判断均线是否金叉
                ConCrossOver = CrossOver(FastMA,SlowMA);
               
                // 金叉发生时记录最近Chlen根Bar的高点加上ExtraPercentage%作为开多突破价
                HH = Highest(High,ChLen);
                If(ConCrossOver And CurrentBar >= ChLen-1)
                {
                        LEntryPrice = HH * (1 + ExtraPercentage * 0.0001);
                        // 记录BAR序号以控制只在金叉后Chlen根BAR内进场否则放弃本次交易
                        LCount = CurrentBar;
                }
               
                // 开仓
                If(MarketPosition == 0 And CurrentBar > LCount And CurrentBar <= LCount + Chlen And High >= LEntryPrice And Vol > 0)
                {
                        Buy(InitialLots, Max(Open,LEntryPrice));
                        Commentary("初次多");
                       
                        // 修改LCount值以保证每次金叉后只初始进场一次
                        LCount = -999;
                }
                // 判断趋势是否反转
                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内突破有效
                        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 = Highest(High,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 BarsSinceExit > 0 And CurrentBar <= ReEntryCount + ReBars And Vol > 0)
                {
                        If(High >= ReEntryPrice)
                        {
                                Buy(ReEntryLots, Max(Open,ReEntryPrice));
                                Commentary("再次多");
                        }
                }
        }
//------------------------------------------------------------------------
// 编译版本        GS2014.10.25
// 版权所有        TradeBlazer Software 2003-2025
// 更改声明        TradeBlazer Software保留对TradeBlazer平
//                        台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

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

bottom

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

GMT+8, 2024-3-29 22:24

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部