金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 571|回复: 2

策略转换问题

[复制链接]

23

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2023-11-7
曾用名:
发表于 2024-5-14 21:21 | 显示全部楼层 |阅读模式
//------------------------------------------------------------------------
// 简称:AloneMA_V5
// 名称:AloneMA_V5
// 类别: 交易指令
// 类型: 用户应用
//------------------------------------------------------------------------
Params        
        //参数定义
        Integer N(60);   //设置均线周期
        Integer TradeLock(1);  //是否加载交易,1-是,0-否;
        Integer OpenVol(1);          //开仓手数;
        Integer ISound(1);   //语音提醒开关,1-开启,0为关闭;
        Integer MAXVOL(30000);//加仓最大额度;V3版新增;
        Integer MaxRisk(1000); //最大单笔亏损额度,V4版新增;
       
        //V5设定推荐参数值,以便适用于10W资金做多品种组合,品种推荐一手保证金小于1万,持仓量前十品种组合回测。
       
GlobalVars       

        //全局变量定义
        NumericSeries MA1;
        NumericSeries MAH;
        NumericSeries MAL;
        NumericSeries KType;       
        NumericArray DMADATEC;
        NumericArray DMADATEH;
        NumericArray DMADATEL;
        Numeric RangRisk;
        Numeric CoverPrice;
        Numeric StartVOL;
       
Vars               
        //局部变量定义       
        BoolSeries Buylock(False);
        BoolSeries Selllock(False);       
        Numeric ProfitPer;
        Numeric MoveCoverPrice;
        Numeric HHV;
        Numeric LLV;
        Numeric AddVol;
Begin               
        //策略执行区
       
        // V2版新增,取日线的5日均线做过滤条件,5日均线以上不做空,5日均线以下不做多。
        DMADATEC = HisData(Enum_Data_Close,Enum_Period_Day,1);
        Numeric DMA = iMA(DMADATEC,5);
        PlotNumeric("DMA",DMA,Blue);
       
        //V3版新增,取前三天 日K线的最高和最低点;
        DMADATEH = HisData(Enum_Data_High,Enum_Period_Day,1);
        DMADATEL = HisData(Enum_Data_Low,Enum_Period_Day,1);
        Numeric DMAH = iHHV(DMADATEH,3,1);
        Numeric DMAL = iLLV(DMADATEL,3,1);
       
        //V3版新增,按最大持仓资金自动计算加仓手数;
        StartVOL = IntPart(MAxVOL/(SeatMargin*close*ContractUnit));
       
        //定义前期的高低点,做移动止损;
        HHV = HighestFC(High[1],20);
        LLV = LowestFC(Low[1],20);
       
        //V5推荐15分钟周期,此处前期高低点参数由30调整为20;
       
        //定义,绘制管道线
        MA1 = AverageFC(C,N);
        MAH = AverageFC(H,N);
        MAL = AverageFC(L,N);
        PlotNumeric("MA",MA1);
        PlotNumeric("UP",MAH);
        PlotNumeric("DN",MAL);

        //定义K线颜色和类型,管道线以上为红色,以下为绿色,穿插为黄色。       
        If(l>MAH)
        {       
            ColorBar(Red);
                KType=1;
        }
        else If(h<MAL)
        {
            ColorBar(green);
                KType=2;               
        }
        Else{
                ColorBar(yellow);
                KType=3;       
        }
       
        //定义开仓条件       
        Buylock = (KType[1]==1 && KType[2]==1 && KType[3]<>1);        //开多单条件;
        Selllock = (KType[1]==2 && KType[2]==2 && KType[3]<>2);  //开空单条件;
       
        //V5剔除掉 前两根K线的高低判断;
       
        //若加载交易,目前空仓,符合开多条件则开多单,符合开空条件则开空单;开仓时前三个K线高低点设置为一号止损位。
       
        If(TradeLock ==1)
        {
                If(MarketPosition == 0)
                {
                        If(Buylock && Open>DMA )   
                        {
                                Buy(OpenVol,Open);       
                                RangRisk=Abs(Open-Low[3]);
                                CoverPrice = Open - RangRisk;
                                if(ISound == 1)
                                        {
                                        Alert(SymbolName+"多单开仓");
                                        }       
                                               
                        }
                        If(Selllock && open<DMA)
                        {
                       
                                SellShort(OpenVol,Open);
                                RangRisk=Abs(Open-High[3]);
                                CoverPrice = Open + RangRisk;
                                if(ISound == 1)
                                        {
                                        Alert(SymbolName+"空单开仓");
                                        }                                       
                        }
                }       



                If(MarketPosition ==1 )  // 如果目前是多头持仓
                        {       
                                      //V4版本新增计算当前多单最大浮盈收益率,最大收益率超过10%,按最大浮盈收益率减掉10%,做跟踪止损;
                                ProfitPer = IntPart(((HighestSinceLastEntry -LastEntryPrice)/(LastEntryPrice*SeatMargin))*100);  //计算当前的收益率  跟最近一次开仓的最高价为相比
                                If(ProfitPer >=10)                                                                              //如果利润大于10%
                                        {
                                        CoverPrice = LastEntryPrice + IntPart((LastEntryPrice*SeatMargin * (Max(IntPart(ProfitPer/5)-2,0)*5/100)));  //计算收益率回调10%的价位
                                        }
                        //按单笔亏损上限,计算加仓手数,不超过单品种持仓上限
                                AddVol=IntPart(MaxRisk / ((Max(DMAH,HHV)-Max(Max(MA1,LLV),CoverPrice)) *BigPointValue*ContractUnit));  
                                //根据单笔最大亏损计算加仓手数 最大亏损/一手亏损  (开仓位—止损位)*合约乘数*一跳的价值  
                                StartVOL = Min(AddVol,StartVOL);
                       
                                If(CurrentEntries==1 && h>Max(DMAH,HHV) && StartVOL >0  )
                                //  如果已经建过仓位 ,而且 当前最高价过了前高,V3版本的加仓最大手数 ,当前利润<5% , 谨慎加仓,如果开仓后利润快速达到5%,则不再开仓
                                // V5去掉利润超过5%不加仓的过滤条件
                                        {                         
                                                Buy(StartVOL,Max(DMAH,Open));                         //按照 3天的最高价  和开盘价取最大值开开仓
                                                if(ISound == 1)
                                                        {
                                                        Alert(SymbolName+"多单加仓");
                                                        }                                               
                                        }
                                MoveCoverPrice = Max(Max(MA1,LLV),CoverPrice);          //移动平仓位  取N移动平均线,30根K线最低值 ,和收益回调10%价位      取最大值
                                If(L<MoveCoverPrice && BarsSinceLastEntry>=1 && HighestSinceLastEntry<>High )            //价格小于移动平仓位   而且  已经开过仓   //V5 修复一个BUG,避免K线急拉,实际交易中被平仓。
                                        {
                                        Sell(0,Max(MoveCoverPrice,Low));                  //按照移动平仓位  和当前K线最低价  取最大值平仓
                                        if(ISound == 1)
                                        {
                                        Alert(SymbolName+"多单平仓");
                                        }               
                                       
                                        }
                        }
                If(MarketPosition ==-1 )               
                        {       
                        //计算当前空单最大浮盈收益率,,最大收益率超过10%,按最大浮盈收益率减掉10%,做跟踪止损;
                                ProfitPer = IntPart(((LastEntryPrice-LowestSinceLastEntry)/(LastEntryPrice*SeatMargin))*100);      
                                If(ProfitPer >=10)
                                        {
                                        CoverPrice = LastEntryPrice - IntPart((LastEntryPrice*SeatMargin * (Max(IntPart(ProfitPer/5)-2,0)*5/100)));
                                        }               
                        //按单笔亏损上限,计算加仓手数,不超过单品种持仓上限
                                AddVol=IntPart(MaxRisk / ((Min(Min(MA1,HHV),CoverPrice)-(Min(DMAL,LLV))) *BigPointValue*ContractUnit));
                                StartVOL = Min(AddVol,StartVOL);       
                               
                                If( CurrentEntries==1 && L<Min(DMAL,LLV) && StartVOL >0 )
                                        {
                                           SellShort(StartVOL,Min(DMAL,Open));
                                          if(ISound == 1)
                                                {
                                                Alert(SymbolName+"空单加仓");
                                                }                                               
                                        }                               
                                MoveCoverPrice = Min(Min(MA1,HHV),CoverPrice);                                       
                                If(H>MoveCoverPrice && BarsSinceLastEntry>=1 && LowestSinceLastEntry<>Low )   //V5 修复一个BUG,避免K线急拉,实际交易中被平仓。
                                        {
                                        BuyToCover(0,Min(MoveCoverPrice,High));       
                                        if(ISound == 1)
                                        {
                                        Alert(SymbolName+"空单平仓");
                                        }               
                                        }
                        }                       
}
End




补充内容 (2024-5-14 21:22):
能否帮忙转换下
回复

使用道具 举报

31

主题

7758

帖子

7768

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-5-15 08:47 | 显示全部楼层
这个不好转换,建议中文描述下策略需求
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2024-7-24
曾用名:
发表于 2024-10-18 09:40 | 显示全部楼层
这不是交易之家的盘立方中的小周期波段王指标么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-23 13:56 , Processed in 0.212262 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表