保证金率

保证金率没有写到代码里,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]); }

客服系统以解决,先熟悉熟悉基础知识,保证金是如何计算的

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

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

保证金比率也是有的,都输出了

这不是您的持仓保证金吗?