//------------------------------------------------------------------------
// 简称: ZS_12_2
// 名称: 数组测试_交易统计
// 类别: 公式应用
// 类型: 用户应用
// 输出: 学习理解数组应用,建立交易统计表格
//------------------------------------------------------------------------
Params
Integer Lots(1);//交易手数
Vars
Global Numeric ReadDateTime;//准备就绪的日期时间
Global Array<Numeric> TradeRecord;//分次交易记录
Global Array<Array<Numeric>> TradeStats;//交易统计
Defs//此处添加公式函数
Integer Df_LogFile(StringRef str)//日志函数 /将字符串str附加到日志文件
{
IF (StrategyMode==1)
FileAppend("D:\\11策略测试\\"+FormulaName()+"\\"+Symbol()+"\\"+TEXT(ReadDateTime)+".txt","["+Text(SystemDateTime())+"] "+ str+"/"+StrategyModeName);
Return 0;
}
Events//此处实现事件函数
OnReady()
{
ReadDateTime=SystemDateTime;
}
OnBar(ArrayRef<Integer> indexs)
{
Range[0:0]
{
IF (CurrentBar()==0)
{
SetArraySize(TradeRecord,4,0);//设置一维数组(每次交易记录)
//建仓时间/建仓成本/平仓时间/平仓价格
SetArraySize(TradeStats,1,10,0);//设置二维数组(交易统计)
//0建仓时间/1建仓成本/2平仓时间/3平仓价格/4平仓利润/5盈利总额/6亏损总额/7盈利次数/8亏损次数/9累计盈亏总额
}
IF (CurrentBar()<10) Return;
If (MarketPosition<1 AND O>C[1])
{
Buy(Lots, OPEN,Enum_Signal_NotSend);
TradeRecord[0]=DATE+TIME;//建仓时间
TradeRecord[1]=Round( EntryPrice,2);//建仓成本
}
IF (MarketPosition==1 And BarsSinceEntry>0 AND O<C[1])
{
Sell(Lots, Open,Enum_Signal_NotSend);
TradeRecord[2]=DATE+TIME;//平仓时间
TradeRecord[3]=ROUND(EXITPrice,2);//平仓价格
ArrayPushBack(TradeStats,TradeRecord);//将交易记录追加至交易统计表格0-3列
}
IF (BarStatus()==2)//最后1根BAR
{
Integer Size = GetArraySize(TradeStats);//数组行数=累计交易次数
Df_LogFile("累计交易次数"+Text(Size));
Integer I=0;//行
For I=0 To Size-1//计算追加统计表格的4-9列
{
Numeric RealizedProfit=(TradeStats[I][3]-TradeStats[I][1])*Lots *contractUnit;//平仓利润=点数*倍数
ArrayInsert(TradeStats, I, 4, RealizedProfit);//平仓利润
IF (RealizedProfit>0)
{
ArrayInsert(TradeStats, I, 5, TradeStats[I-1][5]+RealizedProfit);//盈利总额
ArrayInsert(TradeStats, I, 7, TradeStats[I-1][7]+1);//盈利次数
ArrayInsert(TradeStats, I, 6, TradeStats[I-1][6]);//亏损总额
ArrayInsert(TradeStats, I, 8, TradeStats[I-1][8]);//亏损次数
}
//4平仓利润/5盈利总额/6亏损总额/7盈利次数/8亏损次数/9累计盈亏总额
Else IF (RealizedProfit<0)
{
ArrayInsert(TradeStats, I, 6, TradeStats[I-1][6]+RealizedProfit);//亏损总额
ArrayInsert(TradeStats, I, 8, TradeStats[I-1][8]+1);//亏损次数
ArrayInsert(TradeStats, I, 5, TradeStats[I-1][5]);//盈利总额
ArrayInsert(TradeStats, I, 7, TradeStats[I-1][7]);//盈利次数
}
ArrayInsert(TradeStats, I, 9, TradeStats[I-1][9]+RealizedProfit);//累计盈亏总额
//0建仓时间/1建仓成本/2平仓时间/3平仓价格/4平仓利润/5盈利总额/6亏损总额/7盈利次数/8亏损次数/9累计盈亏总额
Df_LogFile("序号"+TEXT(I)+"/建仓时间"+TEXT(TradeStats[I][0],6)+"/建仓成本"+TEXT(TradeStats[I][1],2)+"/平仓时间"+TEXT(TradeStats[I][2],6)+"/平仓价格"+TEXT(TradeStats[I][3],2)+"/平仓利润"+TEXT(TradeStats[I][4],2)+"/盈利总额"+TEXT(TradeStats[I][5],2)+"/亏损总额"+TEXT(TradeStats[I][6],2)+"/盈利次数"+TEXT(TradeStats[I][7],0)+"/亏损次数"+TEXT(TradeStats[I][8],0)+"/累计盈亏总额"+TEXT(TradeStats[I][9],2));
}
}//最后1根BAR
}//Range[0]
}//ONBAR上述代码,学习理解数组应用,建立交易统计表格。应用在AU888后,日志表格如下, 问题是“/6亏损总额/7盈利次数/8亏损次数”三列数据错误,我不知错误原因,请大神指导


