保证金率
2023-05-10 09:36

保证金率没有写到代码里,Commentary能获取到,并且计算的持仓保证金还不对。

Params

Numeric N1(1.001,1.001,1.025,0.001);              

Numeric N2(0.999,0.975,0.999,0.001);              

Numeric ATRLength(26);      

Numeric HLength(15);        

Bool IsRollover(true);            

Bool IsRolloverRealPrice(true);  

Bool    IsAutoSwapPosition(true);    

Bool    IsIgnoreSwapSiganlCalc(true);

     

Vars

//此处添加变量

Series<Numeric>HV2;

Series<Numeric>LV2;

Series<Numeric>MA;

Series<Numeric> HighestAfterEntry;

Series<Numeric> LowestAfterEntry;  

   Series<Numeric> MinPoint;          

   Series<Numeric> MyEntryPrice;      

   Series<Numeric> AvgTR;  

   Series<Numeric> Price1;

   Series<Numeric> price2;

   global Array<String> symbols1;

   global Array<String> symbols2;

   global Array<Numeric> multiples;

Numeric avg;

Global Integer timerId;

   Dic<Array<String>> fRollover(\"TB_ROLLOVER_v2\");  

   Series<Numeric> myRollover(1);              

   Numeric Lots(0);                          

   Global Numeric i(0);

   Bool    HYYC(true);


Events

//此处实现事件函数

//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作

OnInit()

{

       SubscribeBar(\"rb888.SHFE\",\"10S\",20230419,0);

SubscribeBar(\"rb000.SHFE\",\"10S\",20230419,0);

//Data1.Hide();

    multiples = 1;

       //与数据源有关

Range[0:DataCount-1]

{

//=========数据源相关设置==============

//AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权


//AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格

         

//AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓

           

//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算


//AddDataFlag(Enum_Data_OnlyDay()); //设置仅日盘

//AddDataFlag(Enum_Data_OnlyNight()); //设置仅夜盘

Data1. AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志

AddDataFlag(Enum_Data_FullPeriod());    //设置完全交易时段分割K线

//AddDataFlag(Enum_Data_ActivePeriod());    //设置有效交易时段分割K线

//AddDataFlag(Enum_Data_Equidistant());    //设置连续时间等距分割K线

//AddDataFlag(Enum_Data_NaturalTime());    //设置自然时间分割K线

//=========交易相关设置==============

CommissionRate tCommissionRate ;

tCommissionRate.ratioType = Enum_Rate_ByFillAmount ;

tCommissionRate.openRatio = 1; //设置开仓手续费为成交金额的1%%

tCommissionRate.closeRatio = 1; //设置平仓手续费为成交金额的1%%

//tCommissionRate.closeTodayRatio = 0; //设置平今手续费为0

SetCommissionRate(tCommissionRate); //设置手续费率

SetSlippage(Enum_Rate_PointPerHand,2); //设置滑点为1跳/手

SetOrderPriceOffset(2); //设置委托价为叫买/卖价偏移2跳

//SetOrderMap2MainSymbol(); //设置委托映射到主力

//SetOrderMap2AppointedSymbol(symbols2, multiples); //设置委托映射到指定合约,symbols是映射合约数组,multiples是映射倍数数组

}

//与数据源无关

//SetBeginBarMaxCount(10); //设置最大起始bar数为10

//SetBackBarMaxCount(10); //设置最大回溯bar数为10

//=========交易相关设置==============

SetInitCapital(2000000); //设置初始资金为2万

//AddTradeFlag(Enum_Trade_Ignore_Buy()); //设置忽略多开

//AddTradeFlag(Enum_Trade_Ignore_Sell()); //设置忽略多平

//AddTradeFlag(Enum_Trade_Ignore_SellShort()); //设置忽略空开

//AddTradeFlag(Enum_Trade_Ignore_Buy2Cover()); //设置忽略空平

}


//在所有的数据源准备完成后调用,应用在数据源的设置等操作

OnReady()

{


}


//在新bar的第一次执行之前调用一次,参数为新bar的图层数组

OnBarOpen(ArrayRef<Integer> indexs)

{


}


//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

   

if(date>20991231)return;

             symbols1[0] = fRollover[1][0];

         symbols2[0] = fRollover[0][0];

Range[0:DataCount-1]

{{

          HV2=Highest(H,HLength);

          LV2=Lowest(L,HLength);          

          AvgTR= AvgTrueRange(ATRLength);          

        }

          HYYC = GetDicTime(fRollover, 0) <> GetDicTime(fRollover, 1) And fRollover[0][1] <> InvalidString And fRollover[0][2] <> InvalidString;                    

          If(BarsSinceEntry == 0)           // 条件满足:开仓 Bar

               {

                   HighestAfterEntry = Close;     // 赋初值为当前最新价格

                   LowestAfterEntry = Close;      // 赋初值为当前最新价格      

                   If(MarketPosition <> 0)         // 有持仓时执行以下代码    

                   {

                   // 开仓 Bar,将开仓价和当时的收盘价的较大值保留到 HighestAfterEntry

                   HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);

                   // 开仓 Bar,将开仓价和当时的收盘价的较小值保留到 LowestAfterEntry

                   LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);  //AvgEntryPrice

                   }    

                }

                 Else // 非开仓 Bar 时进行以下运算      

                   {

                    // 记录下当前 Bar 的最高点,用于下一个 Bar 的跟踪止损判断

                    HighestAfterEntry = Max(HighestAfterEntry,High);

                    // 记录下当前 Bar 的最低点,用于下一个 Bar 的跟踪止损判断

                    LowestAfterEntry = Min(LowestAfterEntry,Low);                    

                    }

                     //PlotNumeric(\"HV2\",HV2);

             //PlotNumeric(\"LV2\",LV2);

             HighestAfterEntry=Highest(H,BarsSinceEntry + 1);

                     LowestAfterEntry=Lowest(L,BarsSinceEntry +1 );

           }

   

         

          {

           SetOrderMap2AppointedSymbol(symbols2, multiples);

           Data1.SetOrderMap2AppointedSymbol(symbols2, multiples);

           If (Data1.MarketPosition == 0 && Data1.C[1]>Data1.LV2[1]*N1 )

            {

              Data0.Buy(0,Open);

          Data1.Buy(0,Open,Enum_Signal_NotSend);          

          Commentary(\"行号= \"+Text(194));            

        }            

       IF(Data1.MarketPosition == 0 &&Data1.C[1]<Data1.HV2[1]*N2 )

            {

              Data0.SellShort(0,Open);

              Data1.SellShort(0,Open,Enum_Signal_NotSend);            

            Commentary(\"行号= \"+Text(200));            

            }              

            If (Data1.MarketPosition ==-1 && Data1.BarsSinceEntry <> 0 && Data1.C[1] > Data1.LowestAfterEntry[1]*N1 )

            {

           Data1.Buy(0,Open,Enum_Signal_NotSend);

           Data0.Buy(0,Open);

                     

           Commentary(\"行号= \"+Text(206));  

           Data1.HighestAfterEntry=Data1.H;

Data1.LowestAfterEntry=Data1.L;

        }

     

        If (Data1.MarketPosition ==1 && Data1.BarsSinceEntry <> 0 && Data1.C[1] < Data1.HighestAfterEntry[1]*N2 )

            {            

            Data1.SellShort(0,Open,Enum_Signal_NotSend);            

            Data0.SellShort(0,Open);

            Commentary(\"行号= \"+Text(220));  

            Data1.HighestAfterEntry=Data1.H;

Data1.LowestAfterEntry=Data1.L;

        }

                                           

      }

         Commentary(\"AvgTR = \"+Text(AvgTR));

             Commentary(\"最小变动量 = \"+Text(MinMove));

             Commentary(\"计数单位 = \"+Text(PriceScale));              

             Commentary(\"每张合约交易单位 = \"+Text(ContractUnit()));

             Commentary(\"整数点的价值 = \"+Text(BigPointValue()));

             Commentary(\"当前主力合约= \"+TextArray(symbols2));

             Commentary(\"最大连续盈利次数= \"+Text(MaxConsecWinners()));

             Commentary(\"最大连续亏损次数= \"+Text(MaxConsecLosers()));

             Commentary(\"最大单次盈利数= \"+Text(LargestWinTrade()));

             Commentary(\"最大单次亏损数= \"+Text(LargestlosTrade()));

                     Commentary(\"保证金比率= \"+Text(MarginRatio));                      

 Commentary(\"可用资金= \"+Text(Portfolio_CurrentCapital));

 Commentary(\"持仓保证金= \"+Text(Portfolio_UsedMargin));

 Commentary(\"持仓状态= \"+Text(MarketPosition));  

     

                     //Data1.PlotNumeric(\"HighestAfterEntry\",Data1.HighestAfterEntry[0]);

                     //Data1.PlotNumeric(\"LowestAfterEntry\",Data1.LowestAfterEntry[0]);

                 

 }

评论区
TBJY2020

就是我看到了输出的保证金率,计算的持仓保证金和百分之13对不上吗?

2023-05-10 09:51
TBJY2020

我的意思是代码里没写设置保证金率。

2023-05-10 09:49
顶部