保证金率没有写到代码里,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对不上吗?
我的意思是代码里没写设置保证金率。
保证金比率也是有的,都输出了
这不是您的持仓保证金吗?