我想求出过去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}}
把它们放入数组,然后每一个数组的值进行计数