只开仓不平仓是怎么回事
2022-03-16 11:23

 

//------------------------------------------------------------------------
// 简称: ls_3
// 名称: ls2022213
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
    Numeric nEntries(3);                    // 最大建仓次数
    Numeric RiskRatio(1);                    // % Risk Per N ( 0 - 100)
    Numeric ATRLength(20);                    // 平均波动周期 ATR Length
    Numeric boLength(20);                    // 短周期 BreakOut Length
    Numeric fsLength(55);                    // 长周期 FailSafe Length
    Numeric teLength(10);                    // 离市周期 Trailing Exit Length
        
Vars
    Numeric MinPoint;                        // 最小变动单位
    Series<Numeric> AvgTR;                    // ATR
    Numeric N;                                // N 值
     Numeric TotalEquity;                    // 按最新收盘价计算出的总资产
    Numeric TurtleUnits;                    // 交易单位
    Series<Numeric> DonchianHi;                // 唐奇安通道上轨,延后1个Bar
    Series<Numeric> DonchianLo;                // 唐奇安通道下轨,延后1个Bar
    Series<Numeric> fsDonchianHi;            // 唐奇安通道上轨,延后1个Bar,长周期
    Series<Numeric> fsDonchianLo;            // 唐奇安通道下轨,延后1个Bar,长周期
    Numeric ExitHighestPrice;                // 离市时判断需要的N周期最高价
    Numeric ExitLowestPrice;                // 离市时判断需要的N周期最低价
    Numeric myEntryPrice;                    // 开仓价格
    Numeric myExitPrice;                    // 平仓价格
    Bool SendOrderThisBar(False);            // 当前Bar有过交易
    Series<Numeric> preEntryPrice(0);        // 前一次开仓的价格
    Array<Array<String>> rvalue;
    Numeric ls;
    Series<Numeric> ls1 ;       //第一次开仓价格
    Series<Numeric> N1 ;       //第一次开仓价格N值
    Series<Numeric> ls2 ;
    Series<Numeric> ls3 ;
    Series<Numeric> DonchianLo1;
    
   
Events

    OnInit()
    {
        
       SubscribeBar(symbol,"1D",BeginDateTime);    
        
    }

    OnBar(ArrayRef<Integer> indexs)
    {
        
        If(BarStatus == 0)
        {
            preEntryPrice = InvalidNumeric;
            
        }
        Range[1:1]
        {
            AvgTR = XAverage(TrueRange,ATRLength);
            N = AvgTR[1];
            
            DonchianHi = HighestFC(High[1],boLength);
            DonchianLo = LowestFC(Low[1],boLength);
           
           ExitLowestPrice = LowestFC(Low[1],teLength);
           ExitHighestPrice = HighestFC(High[1],teLength);
           PlotNumeric("Hi20",DonchianHi);
           PlotNumeric("Li10",ExitLowestPrice);
           PlotNumeric("Li20",DonchianLo);
           PlotNumeric("Hi10",ExitHighestPrice);
        } 
        MinPoint = MinMove*PriceScale;
        
        TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
        TurtleUnits = (TotalEquity*RiskRatio/100) /(DATA1.N * ContractUnit()*BigPointValue());
        TurtleUnits = IntPart(TurtleUnits); // 对小数取整
        DonchianHi = HighestFC(High[1],boLength);
        DonchianLo = LowestFC(Low[1],boLength);
        
        ExitLowestPrice = LowestFC(Low[1],teLength);
        ExitHighestPrice = HighestFC(High[1],teLength);
        PlotNumeric("Hi20",DonchianHi);
        PlotNumeric("Li10",ExitLowestPrice);
        PlotNumeric("Li20",DonchianLo);
        PlotNumeric("Hi10",ExitHighestPrice);
        ReadCSVFile("e://ls.csv", rvalue);
        ls=IIF((rvalue[0][0] == "1" )  ,1,0);
        Commentary("ls="+text(ls));
        Commentary("N="+Text(data1.N));
        Commentary("preEntryPrice="+Text(preEntryPrice));
        Commentary("开仓数="+Text(TurtleUnits));
        Commentary("MinPoint="+Text(MinPoint));
        
        
        
        
        If(MarketPosition == 0 &&ls==1)
        {      
                myEntryPrice = close;
                preEntryPrice = myEntryPrice;
                ls1=myEntryPrice;
                N1=DATA1.N;
                DonchianLo1=min(DonchianLo,data1.low);
                
                //ls3=min(data1.low,data1.DonchianLo[1]);
                Buy(TurtleUnits,myEntryPrice);
                SendOrderThisBar = true;
            
        
        }
        Commentary("ls1="+Text(ls1));
        Commentary("N1="+Text(N1));
        Commentary("DonchianLo1="+Text(DonchianLo1));
        
        
        
        If(MarketPosition == 1) // 有多仓的情况
        {
            
            If(ls==0)
            {
                myExitPrice = close-MinPoint;
                
                Sell(0,myExitPrice);    // 数量用0的情况下将全部平仓
                
            }
            
            Else 
               {                
                 If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
                            
                {
                    If(Open >= preEntryPrice + 0.5*N1&& CurrentEntries < nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                    {
                        myEntryPrice = Open;
                        preEntryPrice = myEntryPrice;
                        Buy(TurtleUnits,myEntryPrice);
                        SendOrderThisBar = True;
                    }
                    while(High >= preEntryPrice + 0.5*N1 && CurrentEntries < nEntries) // 以最高价为标准,判断能进行几次增仓
                    {
                        myEntryPrice = preEntryPrice + 0.5 * N1;
                        preEntryPrice = myEntryPrice;
                        if(False == Buy(TurtleUnits,myEntryPrice))
                        {
                            break;
                        }
                        SendOrderThisBar = True;
                    }
                }
                
                If(close[1]<DonchianLo1)
                {
                    myExitPrice = close[1];
                    myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
                    
                    Sell(0,myExitPrice); // 数量用0的情况下将全部平仓
                    
                }
                Commentary("CurrentEntries = " + Text(CurrentEntries));
             }
           }
        }

    
//------------------------------------------------------------------------
// 编译版本    2022/02/13 101105
// 版权所有    ls_20211210
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

评论区
ls_20211210

没有设置,我在想我这种只能算半自动,不能回溯,是不是这种原因造成的(K线图上当LS=1的时候有开仓信号标识,但当LS=0的时候K线图上没有任何标识)

 

2022-03-16 17:38
顶部