全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
哪位大佬帮忙改写成TB格式的。感谢感谢,一共有2个这样的
2023-10-23 19:38

import numpy as np

def average_curvature(curve, length):
    \"\"\"
    计算给定曲线的平均曲率

    参数:
    curve: 一个包含x和y坐标的列表或numpy数组,表示曲线上的点
    length: 曲线的长度

    返回:
    平均曲率
    \"\"\"
    # 将曲线分成多个小段,并计算每一段的曲率半径
    num_segments = 100
    segment_length = length / num_segments
    curvature_list = []
    for i in range(num_segments):
        start_point = curve[i]
        end_point = curve[i+1]
        mid_point = (start_point + end_point) / 2
        dx = end_point[0] - start_point[0]
        dy = end_point[1] - start_point[1]
        曲率半径 = (dx**2 + dy**2)**1.5 / np.abs(dx*dy)
        curvature_list.append(曲率半径)

    # 计算平均曲率
    average_curvature = sum(curvature_list) / len(curvature_list)
    return average_curvature

Amita2012

改成TB用户函数,非公式,按上面Python代码转换,供参考

Params

//此处添加参数

Series<Numeric> curve;//价格序列变量

Integer length;//计算曲率的长度

Vars

//此处添加变量

Array<Numeric> curvature_list;

Numeric start_point;

Numeric end_point;

Numeric dx;

Numeric dy;

Numeric radius;

Numeric average_curvature;

Begin

   //此处添加代码正文

   Integer i;

   For i = 0 to length -1

   {

    start_point = curve[i];

       end_point = curve[i+1];

       dx = end_point - start_point;

       dy = 1;

       radius = (dx^2 + dy^2)^1.5 / Abs(dx*dy);

       

       curvature_list[GetArraySize(curvature_list)] = radius;

}

   //计算平均曲率

   average_curvature = SummationArray(curvature_list)/GetArraySize(curvature_list);

   Return average_curvature;

   

End

2023-10-23 22:16
zhong_4619xd
@Amita2012

老师辛苦了。非常感觉你的帮助

另外一个也能请您出手看看吗:我准备用这两个函数来算一条曲线是不是滑溜。穷举出一个阀值后,做流畅的行情。

import numpy as np

def flexure(curve):

   \"\"\"

   计算给定曲线的折数


   参数:

   curve: 一个包含x和y坐标的列表或numpy数组,表示曲线上的点


   返回:

   折数

   \"\"\"

   # 初始化折数为0

   flexure_count = 0


   # 遍历曲线上的每一段,计算折数

   for i in range(len(curve)-1):

       start_point = curve[i]

       end_point = curve[i+1]

       dx = end_point[0] - start_point[0]

       dy = end_point[1] - start_point[1]

       if np.abs(dx) < 1e-6 or np.abs(dy) < 1e-6:

           continue

       if dx * dy > 0:

           flexure_count += 0.5

       else:

           flexure_count += 1


   return flexure_count

2023-10-24 19:56
Amita2012

仅供参考:

Params

//此处添加参数

Series<Numeric> curve;//价格均线

Vars

//此处添加变量

Numeric flexure_count;

Numeric start_point;

Numeric end_point;

Numeric dx;

Numeric dy;

Integer i;

Begin

   //此处添加代码正文

   flexure_count = 0;

   for i = 0 to CurrentBar

   {

       start_point = curve[i];

       end_point = curve[i+1];

       dx = end_point - start_point;

       dy = 1;

       if(Abs(dx)<0.000001 or Abs(dy)<0.000001){

        Continue;

       }

       

       if(dx*dy>0){

           flexure_count = flexure_count + 0.5;

       }Else{

           flexure_count = flexure_count + 1;

       }

   }

   

   return flexure_count;


End

2023-10-24 23:02
zhong_4619xd
@Amita2012

老师辛苦了。感谢大师

2023-10-25 22:36
您未登录,请先 登录注册 后发表评论
顶部