全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
策略修改
2022-01-05 23:26

问题1;两条均线不显示

问题2;MACD快线和0轴也不显示

问题3;没有交易信号

//只做多双均线,MA1金叉MA3 同时满足MACD快线上穿0轴
//固定止盈,开仓价格盈利20个点 止盈点位是可变参数
//固定止损,开仓价格亏损20个点 止损点位是可变参数
//开仓手数是可变参数
Params
    Numeric Lots(1);
    Numeric TakeProfitSet(20);// 止赢设置
    Numeric StopLossSet(20);// 止损设置
    Numeric FastLength(12);//MACD周期设置
    Numeric SlowLength(26);//MACD周期设置
    Numeric MACDLength(9);//MACD周期设置
Vars
    Numeric MA1;
    Numeric MA3;
    Numeric AvgMACD;
    Numeric MACDValue;
    Series<Numeric> MACDDiff;
    Series<Numeric> my_EntryPrice;
    Series<Bool> B;
    Series<Bool> S;
    Series<Bool> M(false,2);//MACD中的序列布尔型变量
    Series<Bool> N(false,2);//MACD中的序列布尔型变量
Events
    OnBar(ArrayRef<Integer> indexs)
    {
            MA1 = AverageFC(Close,5);
            MA3 = AverageFC(Close,20);
            PlotNumeric("MA1",MA1);
            PlotNumeric("MA3",MA3);
            B = CrossOver(MA1,MA3);   
            S = CrossUnder(MA1,MA3);
            
       Range[0:DataSourceSize() - 1]
    
            MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;//dif快线
            AvgMACD = XAverage(MACDDiff,MACDLength);//dea慢线
            MACDValue = MACDDiff - AvgMACD;//柱体, >0 红柱,<0 绿柱
            PlotNumeric("MACDDiff",MACDDiff);
            PlotNumeric("zero",0);
            M = CrossOver(MACDDiff,0);
            N = CrossUnder(MACDDiff,0);
            //Commentary("M="+IIFString(M,"True","False"));//什么意思不知道?
            //Commentary("N="+IIFString(N,"True","False"));//什么意思不知道?

            if(B) PlotBool("金叉",true);
            if(MarketPosition<>1 and B[1] And M[1])//在空仓的情况下,MA1和MA3金叉,dif快线向上过0轴,向前回溯1根K线
            {
                buy(Lots,OPEN);
                my_EntryPrice = Open;
            }
            if(MarketPosition==1 and S[1])////向前回溯1根K线
            {
                sell(Lots,OPEN);
            }
            //////止损代码
            If(MarketPosition==1 And  low-my_EntryPrice<-StopLossSet)//持有多单,止损条件满足,亏损20
            {
                Sell(Lots,Min(Open,EntryPrice-StopLossSet));
            }
            //////止盈代码
            If(MarketPosition==1 And high-my_EntryPrice>TakeProfitSet)//持有多单,止盈条件满足,盈利20
            {
                Sell(Lots,Max(Open,my_EntryPrice+TakeProfitSet));
            }
     }

kyover

策略问题看置顶的投稿贴

2022-01-06 13:22
xdqh10180603
@kyover

现在是主图和幅图不分,能解决一下吗?

2022-01-09 20:31
tblaocai
@xdqh10180603

其实之前的社区问题,我们研发同事已经回答过类似问题,链接:http://www.tbquant.net/forum/562.html?cid=all

白天也给了您搜索Plot相关文档的方法,不管怎么说踏踏实实地学习和练习还是必须的。

为了给大家一个示例,我参考前面那个帖子和帮助文档,写了个主图布林和子图MACD的例子,供大家参考。实话说,之前也看过那个回帖,但一直没有动手去写,到今天要写的时候,我同样是写不出来,花了3个小时,一边学习一边看帮助,还反复琢磨了好久才达到我的目标。这个学习进度也给各位用户上帝参考下。

//------------------------------------------------------------------------
// 简称: Ex_BollAndMacd
// 名称: 示例--主图附图同时显示指标
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------

Params
    Numeric Length(20);            //布林周期        
    Numeric Offset(2);            //标准差倍数 
    Numeric FastLength(12);        //MACD参数1
    Numeric SlowLength(26);        //MACD参数2
    Numeric MACDLength(9);        //MACD参数3
Vars
    Plot plt1;                    //主图plt1
    Plot plt2;                    //主图plt2
    Array<Numeric> xData;        //x轴数据集
    Array<Numeric> yData;        //y轴数据集

    Series<Numeric> MdLine;        //布林中轨
    Numeric Band;

    Series<Numeric> MACDDiff;     //MACDDiff
    Numeric AvgMACD;            //MACDDEA
    Numeric MACDValue;            //MACD

Events
    OnInit()
    {
        plt2.figure(0);
        plt2.setOption("plt2","x-format","time");
    }
    OnBar(ArrayRef<Integer> indexs)
    {
        MdLine = AverageFC(Close,Length);
        Band = StandardDev(Close,Length,2);
        xData[0] = Date+Time; 
        
        yData[0] = MdLine;
        plt1.setOption("plt1","color",Magenta);
        plt1.line("MdLine",xData,yData);
        
        yData[0] = MdLine + Offset * Band;
        plt1.setOption("plt1","color",Yellow);
        plt1.line("UpLine",xData,yData);
        
        yData[0] = MdLine - Offset * Band;
        plt1.setOption("plt1","color",Cyan);
        plt1.line("DnLine",xData,yData);
        
        yData[0] = 0;
        plt2.line("零线",xData,yData);
            
        MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;    
        yData[0] = MACDDiff;
        plt2.line("MACDDiff",xData,yData);
       
        AvgMACD = XAverage(MACDDiff,MACDLength);
        yData[0] = AvgMACD;
        plt2.line("MACDDEA",xData,yData);
        
        MACDValue = MACDDiff - AvgMACD;
        yData[0] = MACDValue;
        If(yData[0]>=0) 
        {      
            plt2.setOption("MACD","color",Red);
        }
        Else
        {
            plt2.setOption("MACD","color",Green);  
        }
        plt2.barv("MACD",xData,yData); 
    }
 

2022-01-09 21:33
dongfenghuayu

针对于你的问题,解答如下

问题1;两条均线不显示

图中主图已经显示出来

问题2;MACD快线和0轴也不显示

图中副图已显示出来

你看看是否是你想要的结果

更多后续编程辅助服务,欢迎扫码加入企业微信

2022-01-06 15:17
xdqh10180603
@dongfenghuayu

哪里有问题你能帮我说出来吗? 我画了一个笑脸也没有显示,也没有交易信号呀  你这个图片上。

2022-01-06 22:59
xdqh10180603
@xdqh10180603

你主图和副图是怎么拆分的?

2022-01-07 12:08
您未登录,请先 登录注册 后发表评论
顶部