求助,我想求出过去100根bar内收盘价相同的价格和次数,请问应该怎么写??

我想求出过去100根bar内收盘价相同的价格和次数,请问应该怎么写??比如收盘价依次是 1 3 5 5 8 5 3得出的结果是,收盘价3两次,收盘价5三次。

老师的意思是我学会了上面这段代码,就可以理解我想要表达的策略应该怎样编写了吗??

------------------map2count ------------------即所求

//------------------------------------------------------------------------// 简称: TEST_20240809220654// 名称: 测试// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------/* 怎么表达 ?10根K线中最高价前5的5根K线 ?他们最高价平均值 --- 先定位N(10根K线最高价的位置),N= Nthcon(H,10,1);然后H1 = MA(h,5); h5 =h1[n+1],试试看*/Params //此处添加参数 Integer NN(10);Vars //此处添加变量 Integer i; Series<Numeric> PP; //Array<Numeric> WW; //Array<Numeric> VV; Numeric JJMA; Series<Numeric> H1; Array<Numeric> arr; Array<Numeric> arrH; Array<Numeric> arrL; Map<String, Integer> map2count;Defs //此处添加公式函数 // 计算 jma 均线 \'Jurik Moving Average\' Numeric c_jma2(Numeric prices, Integer N) { //import numpy as np // //def calculate_jma(prices, n): //v = np.zeros(len(prices)) //w = np.zeros(len(prices)) //jma = np.zeros(len(prices)) //w[0] = 1 //v[0] = prices[0] //for i in range(1, len(prices)): //w[i] = 0.5 * w[i - 1] + np.sqrt(0.25 * w[i - 1] ** 2 + 2) //v[i] = (prices[i] - v[i - 1]) * w[i] + v[i - 1] //if i >= n: //jma[i] = np.sum(v[i - n + 1:i + 1]) / np.sum(w[i - n + 1:i + 1]) //return jma Integer i; Numeric jmav; Array<Numeric> WW; Array<Numeric> VV; jmav = 0; //w[0] = 1 WW[0] = 1; //v[0] = prices[0] VV[0] = prices; //for i in range(1, len(prices)): For i=1 To N-1 { Integer j; j = i-1; //w[i] = 0.5 * w[i - 1] + np.sqrt(0.25 * w[i - 1] ** 2 + 2) WW[i] = 0.5 * WW[j] + Sqrt(0.25 * Sqr(WW[j]) + 2); //v[i] = (prices[i] - v[i - 1]) * w[i] + v[i - 1] VV[i] = (VV[i] - VV[j]) * WW[i] + VV[j]; //if i >= n: //if (i >= N) //{ ////jma[i] = np.sum(v[i - n + 1:i + 1]) / np.sum(w[i - n + 1:i + 1]) //} } jmav = SummationArray(VV) / SummationArray(WW); //return jma Return jmav; } Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { PrintClear(); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Numeric N = NthHigher(H, 10, 1); H1 = MA(H, 5); Numeric H5 = H1[N+1]; For i=0 to (NN*2)-1 { arrH[i] = H[i]; arrL[i] = L[i]; arr[i] = C[i]; } //Commentary(\"C: \" + TextArray(arr)); //Commentary(TextArray(arrH)); //Commentary(TextArray(arrL)); ArraySort(arrH, False);//数组降序排序 ArraySort(arrL, True);//数组降序排序 //Commentary(\"降序排序结果:\" + TextArray(arrH)); //Commentary(\"降序排序结果:\" + TextArray(arrL)); Numeric sumvH = 0; Numeric sumvL = 0; For i=0 to NN-1 { sumvH = sumvH + arrH[i]; sumvL = sumvL + arrL[i]; } sumvH = sumvH / NN; sumvL = sumvL / NN; //Commentary(TextArray(arrH)); //Commentary(TextArray(arrL)); //PlotNumeric(\"sumvH\", sumvH); //PlotNumeric(\"sumvL\", sumvL); If(BarStatus == 2) { For i=0 To GetArraySize(arr)-1 { If(!MapContain(map2count, Text(arr[i]))) { map2count[Text(arr[i])] = 1; } Else { map2count[Text(arr[i])] = map2count[Text(arr[i])] + 1; } } Commentary(TextMap(map2count)); Print(TextMap(map2count)); } //JJMA = c_jma(C, NN); //PlotAuto(\"JJMA\", JJMA); //PlotAuto(\"CC\", C); //Commentary(\"JMA: \" + Text(JJMA)); }//------------------------------------------------------------------------// 编译版本 2024/08/09 220713// 版权所有 yyyz_tb// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------

回复:我真无语,在帮助文档里搜了半天都找不到MAP的用法。。。

其实用到了 map信息内容{{3266:1},{3288:1},{3291:1},{3292:1},{3297:1},{3298:1},{3299:1},{3300:1},{3302:2},{3304:1},{3305:1},{3307:3},{3310:1},{3311:1},{3312:2},{3316:1},{3319:1},{3320:1},{3322:1},{3328:1},{3332:1},{3334:1},{3335:2},{3336:3},{3337:2},{3338:2},{3339:3},{3340:3},{3342:1},{3343:2},{3344:2},{3345:2},{3346:2},{3347:2},{3350:2},{3351:2},{3352:1},{3353:2},{3354:1},{3355:1},{3356:1},{3357:1},{3358:1},{3359:4},{3360:3},{3361:3},{3362:1},{3363:1},{3365:2},{3366:2},{3367:1},{3368:2},{3369:3},{3370:2},{3372:1},{3373:3},{3374:4},{3375:5},{3376:1},{3377:4},{3378:4},{3379:1},{3380:3},{3383:2},{3384:3},{3385:2},{3386:1},{3387:1},{3388:2},{3389:1},{3390:2},{3391:5},{3392:3},{3393:1},{3395:2},{3396:2},{3397:2},{3398:1},{3399:1},{3401:2},{3402:2},{3403:1},{3406:1},{3408:1},{3410:3},{3411:1},{3412:1},{3414:1},{3415:1},{3417:1},{3418:1},{3424:1},{3429:2},{3430:1},{3446:1},{3457:2},{3458:2},{3459:2},{3460:1},{3461:2},{3464:1},{3466:2},{3472:1},{3477:1},{3478:2},{3479:2},{3480:1},{3481:1},{3483:2},{3486:1},{3487:2},{3488:4},{3489:2},{3493:2},{3499:1}}

把它们放入数组,然后每一个数组的值进行计数