文档章节

有关任意多条曲线的拟合度算法

后海
 后海
发布于 2015/07/21 16:22
字数 1200
阅读 889
收藏 4

在股市中,经常会遇到趋势的预判。所谓趋势,即相对而言的规律化的模式识别形态。形象来讲,就是个股的一段时间内的曲线分布状况。

那么,问题来了。

我们虽然可以在少量的图像中分辨出差异不是很大的趋势之间的相似度。如果,在进行量化交易的时候,进行程序化的批量匹配过程中,该如何分辨出相似度最高的曲线标的呢?这就需要程序化算法进行匹配。

jiagequ.png

对于曲线而言,无非就是一系列的坐标点的连线。在对相邻坐标点的倾斜角进行递归计算,就可以合计出曲线的倾斜角分布积,就代表了曲线的形态。那么,又如何进行批量的匹配呢?需要进行倾斜角分布积的归一化,常规的线性函数在对于无量纲的区间进行归一处理的无奈。该如何处理呢?其实可以转换思路,对每一组倾斜角进行差额计算,由于 180° < 相邻坐标点倾斜角区间 > 0°,那么进行了倾斜角分布积差以后,就转入了常规的线性函数的归一化处理范围。


package com.mms.tools; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /**  * 趋势线拟合度算法  * ww  */ public class Trend { /* 任意两点间直线的倾斜角算法 */ public static void main(String[] args) throws Exception { //基准坐标系         List<Map<String,Double>> ls = new ArrayList<Map<String,Double>>();         Map<String,Double> m = new HashMap<String,Double>();                  String strs = "";         m = new HashMap<String,Double>();         m.put("x", 1.0);m.put("y", 1.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 2.0);m.put("y", 2.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 3.0);m.put("y", 3.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 4.0);m.put("y", 4.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 5.0);m.put("y", 5.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 6.0);m.put("y", 6.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 7.0);m.put("y", 7.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 8.0);m.put("y", 8.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 9.0);m.put("y", 9.0);         ls.add(m);                  m = new HashMap<String,Double>();         m.put("x", 10.0);m.put("y", 9.0);         ls.add(m);                //坐标系斜率归一化         List<Double> lvs = getLvs(ls);         if(lvs != null && lvs.size() >0){          //匹配坐标系          List<Map<String,Double>> lss = new ArrayList<Map<String,Double>>();          for(int i=0;i<10;i++){          m = new HashMap<String,Double>();                 m.put("x", (double)(i+1));m.put("y",(double)GetIntMathNumber(1,9));                 lss.add(m);          }                   double guis = getGuis(lss,lvs);          //System.out.println("两条坐标系曲线拟合(值越小越拟合): "+guis);         }          } /*  * 根据坐标系计算出相邻坐标的斜率集  */ public static List<Double> getLvs(List<Map<String,Double>> ls){ List<Double> lvs = new ArrayList<Double>();         //排序         if(ls != null && ls.size() >0){          //System.out.println("基准坐标系,斜率集核算");          for(int i=0;i<ls.size();i++){          if(i >0 && i<ls.size()){          lvs.add(getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),0));          //System.out.println(i+" | "+ls.get(i-1).get("y")+" | "+ls.get(i).get("y")+" |基准斜率 "+getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),0));          }          }          //System.out.println("");         } return lvs; } /*  * 根据坐标系计算出相邻坐标的斜率集,相对于基准的权重值(聚合权重)  */ public static double getGuis(List<Map<String,Double>> ls,List<Double> lvs){ double guis = 0;         //排序         if(ls != null && ls.size() >0){          //System.out.println("匹配坐标系,斜率集核算匹配");          for(int i=0;i<ls.size();i++){          if(i >0 && i<ls.size()){          guis += getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),lvs.get(i-1));          //System.out.println(i+" | "+ls.get(i-1).get("y")+" | "+ls.get(i).get("y")+" |基准斜率 "+lvs.get(i-1)+" |匹配归一权重 "+getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),lvs.get(i-1)));          }          }          //System.out.println("");         } return guis; } /*  * 根据任意两点坐标斜率,比较基准,并进行离差归一化权重计算(可计算斜率,也可计算权重)  */ public static double getGuiLv(double x1,double y1,double x2,double y2,double atan){ double i = 0; //任意两点间直线的倾斜角 double x = Math.atan2(x2-x1,y2-y1)*180/Math.PI; if(atan == 0){ i = x; }else{ //线性归一化函数转换(离差) 归一化:(x-min)/(max-min); double y = x-atan;if(y <0){y = -y;} //离差权重         i = (y-0)/(x-0); }         return i; } /*  * 从startNumber到endNumber的随机整数  */       public static int GetIntMathNumber(int startNumber,int endNumber){          return (int)Math.round(Math.random()*(endNumber-startNumber)+startNumber);     }  }


此处给出java的算法代码,如下是进行了图形化结果。

jlrqu.png


© 著作权归作者所有

后海

后海

粉丝 33
博文 48
码字总数 25623
作品 2
闵行
后端工程师
私信 提问
【18-03-24】Matlab 数据分析

[18-03-24] Matlab 数据分析 1° 数据插值 一般地,从各种试验得来的数据总是有一定的数量,而利用插值技术能够从有限的数据中获取系统整体的状态,因此,数据插值在各行各业,特别是信号处理...

千阳Weston
2018/03/25
0
0
Convert BSpline Curve to Arc Spline in OpenCASCADE

Abstract. The paper based on OpenCASCADE algorithms to approximate the NURBS curve to arc spline. The method is most useful in numerical control to drive the cutter along straig......

eryar
2016/11/23
112
0
机器学习系列(二十三)——过拟合和欠拟合问题

过拟合和欠拟合 有了多项式回归的方式,我们就可以对非线性的数据做拟合了,不过,复杂度不够的多项式回归会导致欠拟合问题,而过度地使用多项式回归又会导致过拟合问题。 接下来直观地看一下...

Ice_spring
2019/07/17
0
0
Machine Learning 2 - 非线性回归算法分析

2017-08-02@erixhao 技术极客TechBooster AI 机器学习第二篇 - 非线形回归分析。我们上文深入本质了解了机器学习基础线性回归算法后,本文继续研究非线性回归。 非线性回归在机器学习中并非热...

erixhao
2017/08/07
0
0
Math-Model(一)数学建模算法综述

美赛马上来了,总结一下这些年参赛的算法(我打编程位),数学建模主要模型不单独写,参考数学模型第四版教材即可,只给出编程中一些重要的算法目录,如果有方法漏写,请评论区指出,笔者添加,...

Pulsar-V
2019/01/22
213
0

没有更多内容

加载失败,请刷新页面

加载更多

六、Spring Cloud之配置中心config

前言 前面我们讲了微服务的注册中心、负载均衡、熔断处理、网管服务。接下来我们讲配置中心,为什么要用配置中心呢? 其实我们接触一段时间就可以发现,我们的项目还是非常多的,每个项目都有...

quellanan2
3分钟前
13
0
在Android的EditText视图中允许多行?

如何在Android的EditText视图中允许多行? #1楼 这对我有用 ,实际上这两个属性很重要: inputType和lines 。 此外,您可能需要一个滚动条,下面的代码显示了如何制作一个: <EditText ...

技术盛宴
7分钟前
13
0
分享自己写的JS版日期格式化和解析工具类,绝对好用!

前言 本来想模仿Java里面的SimpleDateFormat()对象的,但是感觉这样用起来不方便,所以还是直接写成单独的方法算了。 原文链接 日期格式化 2.1. 使用说明 formatDate(date, fmt),其中fmt支持...

SuShine
17分钟前
27
0
快递鸟api物流查询接口实现订阅物流轨迹单号查询功能对接调用

背景: 分享一篇关于在电商系统中同步物流轨迹到本地服务器的文章,当前方案使用了快递鸟集成api做为数据来源接口,这个接口是免费使用的,不过提供的功能还是非常强大的,有专门的售后维护团...

程序的小猿
21分钟前
24
0
Day08多态,abstract,接口

1.A:多态的概述:事物存在的多种形态。 B:多态前提:要有继承关系,方法重写和父类引用子类对象。 父类引用子类对象:Animal a = new Cat(); a.eat(); //效果等同于c.eat(); 2.多态中的...

Lao鹰
27分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部