股票学习网

如何学炒股,入门炒股,股票入门,股票怎么玩,学习炒股网,股票技术,股票知识学习 - - 股票知识网!

td指标源码大全(std指标)

2023-06-29 18:39分类:股指期货 阅读:

小 T 导读:虽然 TDengine 已经提供了非常多的常用计算函数,但是在具体实践中,企业的开发团队往往会因为自己特殊的业务需求,需要特有的计算函数,这时候,支持自定义函数功能就特别重要了。本文将介绍 TDengine 3.0 支持的 UDF 机制。

在使用 TDengine 这款时序数据库(Time Series Database, TSDB)的时候,我们经常会用到各种内置函数,通过在数据库中完成很多计算,可以大大简化数据库应用层的开发工作。

TDengine 提供了大量的内置函数,可以分为几个大类:

  • 单行函数:单行函数为查询结果中的每一行返回一个结果行
  • 数学函数:如 ABS、SIN、COS、LOG、POW 等
  • 字符串函数:如 CHAR_LENGTH、CONCAT、LOWER、SUBSTR、UPPER 等
  • 转换函数:如 CAST、TO_JSON、TO_UNIXTIMESTAMP 等
  • 时间和日期函数:NOW、TIMEDIFF、TIMEZONE、TODAY 等
  • 聚合函数:聚合函数为查询结果集的每一个分组返回单个结果行
  • 如 AVG、COUNT、STDDEV、SUM 等
  • 选择函数
  • 时序数据特有函数
  • 系统信息函数

虽然 TDengine 已经提供了这么多常用的计算函数,但是在具体实践中,企业的开发团队往往会因为自己特殊的业务需求,需要特有的计算函数,这时候,支持自定义函数功能就特别重要了。

本文将具体介绍如何在 TDengine 中定义并使用自定义函数。

利用 UDF(User Defined Function) 功能,TDengine 可以插入用户编写的处理代码并在查询中使用它们,这样就能很方便地解决特殊应用场景中的使用需求。 UDF 通常以数据表中的一列数据做为输入,同时支持以嵌套子查询的结果作为输入。

TDengine 支持通过 C/C++ 语言来定义 UDF。TDengine 3.0 优化了相关机制,所以本文描述的特性适用于 3.0 及以上版本。

基本概念

用户可以通过 UDF 实现两类函数:标量函数和聚合函数。标量函数对每行数据输出一个值,如求绝对值 abs,正弦函数 sin,字符串拼接函数 concat 等。聚合函数对多行数据进行输出一个值,如求平均数 avg,最大值 max 等。

实现 UDF 时,需要实现规定的接口函数

  • 标量函数需要实现标量接口函数 scalarfn
  • 聚合函数需要实现聚合接口函数 aggfn_start、aggfn、aggfn_finish
  • 如果需要初始化,实现 udf_init;如果需要清理工作,实现 udf_destroy

接口函数的名称是 UDF 名称,或者是 UDF 名称和特定后缀(_start, _finish, _init, _destroy)的连接。列表中的scalarfn、aggfn、udf需要替换成udf函数名。

标量接口函数

int32_t scalarfn(SUdfDataBlock* inputDataBlock, SUdfColumn *resultColumn)

其中 scalarFn 是函数名的占位符。这个函数对数据块进行标量计算,通过设置resultColumn结构体中的变量设置值。

参数的具体含义是:

  • inputDataBlock: 输入的数据块
  • resultColumn: 输出列

聚合接口函数

int32_t aggfn_start(SUdfInterBuf *interBuf)

int32_t aggfn(SUdfDataBlock* inputBlock, SUdfInterBuf *interBuf, SUdfInterBuf *newInterBuf)

int32_t aggfn_finish(SUdfInterBuf* interBuf, SUdfInterBuf *result)

其中 aggfn 是函数名的占位符。首先调用aggfn_start生成结果buffer,然后相关的数据会被分为多个行数据块,对每个数据块调用 aggfn 用数据块更新中间结果,最后再调用 aggfn_finish 从中间结果产生最终结果,最终结果只能含 0 或 1 条结果数据。

参数的具体含义是:

  • interBuf:中间结果 buffer。
  • inputBlock:输入的数据块。
  • newInterBuf:新的中间结果buffer。
  • result:最终结果。

UDF 初始化和销毁

int32_t udf_init()

int32_t udf_destroy()

其中 udf 是函数名的占位符。udf_init 完成初始化工作。 udf_destroy 完成清理工作。如果没有初始化工作,无需定义udf_init函数。

如果没有清理工作,无需定义udf_destroy函数。 篇幅所限,相关数据结构的定义可以参考 UDF 文档。

编译 UDF

用户定义函数的 C 语言源代码无法直接被 TDengine 系统所使用,而是需要先编译为 动态链接库,之后才能载入 TDengine 系统。

假设我们编写了自定义函数,保存在 add_one.c 文件中,在 Linux 上可以这样编译:

gcc -g -O0 -fPIC -shared add_one.c -o add_one.so

创建 UDF

用户可以通过 SQL 指令在系统中加载客户端所在主机上的 UDF 函数库。一旦创建成功,则当前 TDengine 集群的所有用户都可以在 SQL 指令中使用这些函数。UDF 存储在系统的 MNode 节点上,因此即使重启 TDengine 系统,已经创建的 UDF 也仍然可用。

在创建 UDF 时,需要区分标量函数和聚合函数。

  • 创建标量函数

CREATE FUNCTION function_name AS library_path OUTPUTTYPE output_type;

例如,如下语句可以把 libbitand.so 创建为系统中可用的 UDF:

CREATE FUNCTION bit_and AS "/home/taos/udf_example/libbitand.so" OUTPUTTYPE INT;

  • 创建聚合函数:

CREATE AGGREGATE FUNCTION function_name AS library_path OUTPUTTYPE output_type [ BUFSIZE buffer_size ];

例如,如下语句可以把 libl2norm.so 创建为系统中可用的 UDF:

CREATE AGGREGATE FUNCTION l2norm AS "/home/taos/udf_example/libl2norm.so" OUTPUTTYPE DOUBLE bufsize 8;

如果不再需要,可以通过 DROP 指令删除所创建的 UDF。

DROP FUNCTION function_name;

使用 UDF

在 SQL 指令中,可以直接以在系统中创建 UDF 时赋予的函数名来调用用户定义函数。例如:

SELECT X(c1,c2) FROM table/stable;

表示对名为 c1、c2 的数据列调用名为 X 的用户定义函数。SQL 指令中用户定义函数可以配合 WHERE 等查询特性来使用。

欢迎下载试用 TDengine 3.0,并尝试编写一个自定义函数。

欢迎添加小T的VX:tdengine,加入物联网技术讨论群,第一时间了解 TDengine 官方信息,与关注前沿技术的同学们共同探讨新技术、新玩法。

小 T 导读:想用 Flink 对接 TDengine?保姆级教程来了。

前言

TDengine 是由涛思数据开发并开源的一款高性能、分布式、支持 SQL 的时序数据库(Time-Series Database)。

除了核心的时序数据库功能外,TDengine 还提供缓存、数据订阅、流式计算等大数据平台所需要的系列功能。但是很多小伙伴出于架构的考虑,还是需要将数据导出到 Apache Flink、Apache Spark 等平台进行计算分析。

为了帮助大家对接,我们特别推出了保姆级课程,包学包会。

技术实现

2、代码实现

完整源码:
https://github.com/liuyq-617/TD-Flink

代码逻辑:

1) 自定义类 SourceFromTDengine

用途:数据源连接,数据读取

package com.taosdata.flink; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.functions.source.RichSourceFunction; import com.taosdata.model.Sensor; import java.sql.*; import java.util.Properties; public class SourceFromTDengine extends RichSourceFunction<Sensor> { Statement statement; private Connection connection; private String property; public SourceFromTDengine(){ super(); } @Override public void open(Configuration parameters) throws Exception { super.open(parameters); String driver = "com.taosdata.jdbc.rs.RestfulDriver"; String host = "u05"; String username = "root"; String password = "taosdata"; String prop = System.getProperty("java.library.path"); Logger LOG = LoggerFactory.getLogger(SourceFromTDengine.class); LOG.info("java.library.path:{}", prop); System.out.println(prop); Class.forName( driver ); Properties properties = new Properties(); connection = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/tt" + "?user=root&password=taosdata" , properties); statement = connection.createStatement(); } @Override public void close() throws Exception { super.close(); if (connection != null) { connection.close(); } if (statement != null) { statement.close(); } } @Override public void run(SourceContext<Sensor> sourceContext) throws Exception { try { String sql = "select * from tt.meters"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { Sensor sensor = new Sensor( resultSet.getLong(1), resultSet.getInt( "vol" ), resultSet.getFloat( "current" ), resultSet.getString( "location" ).trim()); sourceContext.collect( sensor ); } } catch (Exception e) { e.printStackTrace(); } } @Override public void cancel() { } }

2) 自定义类 SinkToTDengine

用途:数据源连接,数据写入

SinkToTDengine

package com.taosdata.flink; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import com.taosdata.model.Sensor; import java.sql.*; import java.util.Properties; public class SinkToTDengine extends RichSinkFunction<Sensor> { Statement statement; private Connection connection; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); String driver = "com.taosdata.jdbc.rs.RestfulDriver"; String host = "TAOS-FQDN"; String username = "root"; String password = "taosdata"; String prop = System.getProperty("java.library.path"); System.out.println(prop); Class.forName( driver ); Properties properties = new Properties(); connection = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/tt" + "?user=root&password=taosdata" , properties); statement = connection.createStatement(); } @Override public void close() throws Exception { super.close(); if (connection != null) { connection.close(); } if (statement != null) { statement.close(); } } @Override public void invoke(Sensor sensor, Context context) throws Exception { try { String sql = String.format("insert into sinktest.%s using sinktest.meters tags('%s') values(%d,%d,%f)", sensor.getLocation(), sensor.getLocation(), sensor.getTs(), sensor.getVal(), sensor.getCurrent() ); statement.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); } } }

3) 自定义类 Sensor

用途:定义数据结构,用来接受数据

package com.taosdata.model; public class Sensor { public long ts; public int val; public float current; public String location; public Sensor() { } public Sensor(long ts, int val, float current, String location) { this.ts = ts; this.val = val; this.current = current; this.location = location; } public long getTs() { return ts; } public void setTs(long ts) { this.ts = ts; } public int getVal() { return val; } public void setVal(int val) { this.val = val; } public float getCurrent() { return current; } public void setCurrent(float current) { this.current = current; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } @Override public String toString() { return "Sensor{" + "ts=" + ts + ", val=" + val + ", current=" + current + ", location='" + location + '\'' + '}'; } }

4) 主程序类 ReadFromTDengine

用途:调用 Flink 进行读取和写入数据

package com.taosdata; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.streaming.api.datastream.DataStream; import com.taosdata.model.Sensor; import org.slf4j.LoggerFactory; import org.slf4j.Logger; public class ReadFromTDengine { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<Sensor> SensorList = env.addSource( new com.taosdata.flink.SourceFromTDengine() ); SensorList.print(); SensorList.addSink( new com.taosdata.flink.SinkToTDengine() ); env.execute(); } }

3、简单测试 RESTful 接口

1) 环境准备:

a) Flink 安装&启动:

  • wget https://dlcdn.apache.org/flink/flink-1.14.3/flink-1.14.3-bin-scala_2.12.tgz
  • tar zxf flink-1.14.3-bin-scala_2.12.tgz -C /usr/local
  • /usr/local/flink-1.14.3/bin/start-cluster.sh

b) TDengine Database 环境准备:

  • 创建原始数据: create database tt;create table `meters` (`ts` TIMESTAMP,`vol` INT,`current` FLOAT) TAGS (`location` BINARY(20));insert into beijing using meters tags(‘beijing’) values(now,220,30.2);
  • 创建目标数据库表: create database sinktest;create table `meters` (`ts` TIMESTAMP,`vol` INT,`current` FLOAT) TAGS (`location` BINARY(20));

2) 打包编译:

源码位置:
https://github.com/liuyq-617/TD-Flink

mvn clean package

3) 程序启动:

flink run target/test-flink-1.0-SNAPSHOT-dist.jar

  • 读取数据 vi log/flink-root-taskexecutor-0-xxxxx.out 查看到数据打印:Sensor{ts=1645166073101, val=220, current=5.7, location=’beijing’}
  • 写入数据 show sinktest.tables; 已经创建了beijing 子表select * from sinktest.beijing; 可以查询到刚插入的数据

4、使用 JNI 方式

举一反三的小伙伴此时已经猜到,只要把 JDBC URL 修改一下就可以了。

但是 Flink 每次分派作业时都在使用一个新的 ClassLoader,而我们在计算节点上就会得到“Native library already loaded in another classloader”错误。

为了避免此问题,可以将 JDBC 的 jar 包放到 Flink 的 lib 目录下,不去调用 dist 包就可以了。

  • cp taos-jdbcdriver-2.0.37-dist.jar /usr/local/flink-1.14.3/lib
  • flink run target/test-flink-1.0-SNAPSHOT.jar

5、小结

通过在项目中引入 SourceFromTDengine 和 SinkToTDengine 两个类,即可完成在 Flink 中对 TDengine 的读写操作。后面我们会有文章介绍 Spark 和 TDengine 的对接。

注:文中使用的是 JDBC 的 RESTful 接口,这样就不用在 Flink 的节点安装 TDengine,JNI 方式需要在 Flink 节点安装 TDengine Database 的客户端。


点击了解更多 TDengine Database 的具体细节。

布林轨道在看趋势反转、趋势延续、多头上涨、空头下跌时有非常重要的应用。
与传统的布林轨道相比,多周期理论里布林轨道的设置有一些不同:

1、多周期理论的布林线组合有三组,传统的只有一组;

2、多周期理论里标准差一般采用0.6~1之间,是窄轨道,而传统的采用1.8~2.5,轨道比较宽一些。

3、多周期理论里三组布林中轨分别是EMA18、EMA54与EMA162,是三倍关系。

布林轨道指标源码如下:
EMA18:=EMA(C,18);
EMA54:=EMA(C,54);
EMA162:=EMA(C,162);
UB1:EMA(EMA18+0.8*STD(CLOSE,18),2),COLORGREEN;
LB1:EMA(EMA18-0.8*STD(CLOSE,18),2),COLORGREEN;
UB2:EMA(EMA54+0.75*STD(CLOSE,54),2),COLORCYAN,LINETHICK2;
LB2:EMA(EMA54-0.75*STD(CLOSE,54),2),COLORCYAN,LINETHICK2;
UB3:EMA(EMA162+0.7*STD(CLOSE,162),2),COLORMAGENTA,LINETHICK2;
UB3:EMA(EMA162-0.7*STD(CLOSE,162),2),COLORMAGENTA,LINETHICK2;

布林指标可以做为副图指标单独使用,但在多周期理论里布林指标是结合均线用在主图里。

布林轨道指标可以引申出另外一个指标:布林轨道差,这个指标对上涨段与下跌段的显示非常明确,但在多周期理论里这个指标不是必要的,有兴趣的可以自己查查。

华尔街股神巴菲特的投资观念/攻略

巴菲特理财攻略一:尽量避免风险,保住本金

在巴菲特的投资名言中,最著名的无疑是这一条:“成功的秘诀有三条:第一,尽量避免风险,保住本金;第二,尽量避免风险,保住本金;第三,坚决牢记第一、第二条。”为了保证资金安全,巴菲特总是在市场最亢奋、投资人最贪婪的时刻保持清醒的头脑而激流勇退。1968年5月,当美国股市一片狂热的时候,巴菲特却认为已再也找不到有投资价值的股票了,他由此卖出了几乎所有的股票并解散了公司。结果在1969年6月,股市大跌渐渐演变成了股灾,到1970年5月,每种股票都比上年初下降了50%甚至更多。

巴菲特的稳健投资,绝不干“没有把握的事情”的策略使巴菲特逃避过一次次股灾,也使得机会来临时资本迅速增值。但很多投资者却在不清楚风险或自已没有足够的风险控制能力下贸然投资,又或者由于过于贪婪的缘故而失去了风险控制意识。麦塔软件认为在做任何投资之前,我们都应把风险因素放在第一位,并考虑一旦出现风险时我们的承受能力有多强,如此才能立于不败之地。

巴菲特理财攻略二:作一个长期投资者,而不是短期投资者或投机者

巴菲特的成功最主要的因素是他是一个长期投资者,而不是短期投资者或投机者。巴菲特从不追逐市场的短期利益,不因为一个企业的股票在短期内会大涨就去跟进,他会竭力避免被市场高估价值的企业。一旦决定投资,他基本上会长期持有。所以,即使他错过了上个世纪90年代末的网络热潮,但他也避免了网络泡沫破裂给无数投资者带来的巨额损失。

巴菲特有句名言:“投资者必须在设想他一生中的决策卡片仅能打20个孔的前提下行动。每当他作出一个新的投资决策时,他一生中能做的决策就少了一个。”在一个相对短的时期内,巴菲特也许并不是最出色的,但没有谁能像巴菲特一样长期比市场平均表现好。在巴菲特的赢利记录中可发现,他的资产总是呈现平稳增长而甚少出现暴涨的情况。1968年巴菲特创下了58.9%年收益聦嵞最高纪录,也是在这一年,巴菲特感到极为不安而解散公司隐退了。

巴菲特理财攻略三:把所有鸡蛋放在同一个篮子里,然后小心地看好

究竞应把鸡蛋集中放在一个篮子内还是分散放在多个篮子内,这种争论从来就没停止过也不会停止。这不过是两种不同的投资策略。从成本的角度来看,集中看管一个篮子总比看管多个篮子要容易,成本更低。但问题的关键是能否看管住唯一的一个篮子。巴菲特之所以有信心,是因为在作出投资决策前,他总是花上数个月、一年甚至几年的时间去考虑投资的合理性,他会长时间地翻看和跟踪投资对象的财务报表和有关资料。对于一些复杂的难以弄明白的公司他总是避而远之。只有在透彻了解所有细节后巴菲特才作出投资决定。

麦塔认为:成功的因素关键在于在投资前必须有详细周密的分析。对比之下,很多投资者喜欢道听途说的小道消息或只是凭感觉进行投资,完全没有进行独立的分析,没有赢利的可靠依据,这样投资难免不会招致失败。

BOLL(布林线)

BOLL指标,即布林指标,又叫布林线指标。BOLL指标是一种非常简单实用的技术分析指标,是研判市场中长期运动趋势的一种重要技术分析工具。BOLL指标由三条线组成,即上轨线、中轨线、下轨线。BOLL指标通过这三条线之间的关系再结合其他指标成为研判大盘趋势的有效工具。如下图:

布林线的主要功能:

1.布林线可以指示支撑和压力位置;

2.布林线可以显示超买、超卖;

3.布林线可以指示趋势;

4.布林线具备通道功能。

BOLL的几种形态

1、上下轨同时向上

这种情况,股价一般游走在中轨和上轨之间,为上涨行情。

2、上下轨接近走平

这种情况,股价一般在中轨上下震荡,多为盘整行情。

3、上下轨同时向下

这种情况,股价一般游走在中轨和下轨之间,为下跌行情。

4、上轨向上,下轨向下,呈开口形态

这种情况一般属于股价向上拉升或者急跌阶段,此时阻力线和支撑线打开,称为“开口”。

5、上轨向下,下轨向上,呈收口形态

这种情况表示上下轨分别对空头和多头形成了压力,因此此类型一般为方向选择性走势,适宜轻仓操作。

如何利用BOLL指标捕捉主升浪

1、 股价横盘震荡或缓慢上行,BOLL呈现平行窄轨,股价运行在BOLL中轨和上轨之间,某日突然跌破中轨,但是却在下轨获得支撑,震荡了数天之后,上攻突破了中轨并且触到上轨附近,遇到了压力回踩中轨企稳,这时向上突破上轨并将发生大行情得概率非常大,这时经典的挖坑启动形态:

2、 股价横盘震荡或缓慢上行,BOLL呈现平行窄轨,股价运行在BOLL中轨和上轨之间,某天突然加速,突破了上轨 ,BOLL的袋口(上下轨)也呈现打开的态势,这时发生行情的概率较大。这时经典的加速上涨形态:

3、 之前就经过一波大涨,BOLL袋口也呈现打开状态,当OBLL收口时,股价从中轨下方穿越上来,这时候可能会发生新的行情。这时经典的逐浪上攻形态:

4、 对于上面说的这三种刚进入加速后的股票,尖顶回落中轨,通常都是买入机会,之后至少会有一次上攻,上攻的力度较强,能够再次攻击山鬼,就构成上升通道,回落中轨都可以再次买;力度弱,构成了背离,这时候就要出局了。这是在上升通道做强势股的方法:

BOLL+KDJ的“双剑合璧”战法

战法原理:

股价已经过较长时间的调整,MACD指标的DIF线与DEA线开始在O轴以下黏合。此现象的出现,大多是主力在压箱顶吸筹所造成的。这种双线合一的黏合时间越长,表明主力的吸筹就越充分。一旦DIF线脱离DEA向上运行,则表明主力已经吸足筹码开始启动行情,此时为最佳买入点。

三个条件:

1、第一根阳线涨幅大于8%;

2、回调收盘价格高于第一根阳线起涨位置;

3、出现第二根大于8%的阳线。

这是标准的启动模形,如果出现在底部,就是行情刚刚开始,如果出现在腰部,那么就是上升中继。

如上图,短线东方雨虹(002271)在底部收出一根涨幅8%的大阳线,次日回调的。

KDJ和BOLL指标都是大家常用的指标,经过越声投研的长时间摸索和总结,发现有很多的指标配合起来使用,对预测趋势和把握买卖点的精准,都将大大提高。越声投研今天就和大家讲一讲KDJ和BOLL指标的配合使用方法,希望对大家有所帮助,早日实现稳定盈利。

大家都知道KDJ是超买超卖的一个指标,而布林线是一个支撑压力类指标,这两种指标结合在一起的好处是,可以让KDJ的指标的信号更为精准,同时,由于价格日K线指标体系中的布林线指标,往往反映的是价格的中期运行趋势,因此利用这两个指标来判定价格到底是短期波动,还是中期波动具有一定作用,尤其适用于判断价格到底是短期见顶(底),还是进入了中期上涨(下跌),具有比较好的研判效果。

布林线中的上轨有压力作用,中轨和下轨有支撑(压力)作用,因此当价格下跌到布林线中轨或者下档时,可以不理会KDJ指标所发出的信号而采取操作。如果KDJ走到了低位,那么应视作短线趋势与中期趋势互相验证的结果,而采取更为正确的操作策略。

但是越声投研要提醒大家要注意的是,当价格下跌到布林线下轨时,即使受到支撑而出现回稳,KDJ指标也同步上升,可趋势转向的信号已经发出,所以至多只能抢一次反弹。而当KDJ指标走上80高位时,采取卖出行动就较为稳妥,因为当股价跌破布林线中轨后将引发布林线开口变窄,此时要修复指标至少需要进行较长时间的盘整,所以说无论从防范下跌风险,还是从考虑持有的机会成本来看,都不宜继续持有。

最后,总结一下综合运用KDJ指标和布林线指标的原则:即以布林线为主,对价格走势进行中线判断,以KDJ指标为辅,对价格进行短期走势的判断,KDJ指标发出的买卖信号需要用布林线来验证配合,如果二者均发出同一指令,则买卖准确率较高。

BOLL线选股操作

源码如下:

{VAR444:=C;

操作:=MA(VAR444,4);

生命线:HHV(操作,13),LINETHICK2,COLORYELLOW;收盘破此线短逃}

愚公:=IF(1>10,HIGH*1.03,DRAWNULL),POINTDOT,LINETHICK9,COLORYELLOW;

买线:=EMA(C,5);

卖线:=EMA(SLOPE(C,20)*10+C,35);

DRAWICON(CROSS(买线,卖线),LOW*0.98,7);

DRAWICON(CROSS(卖线,买线),HIGH*1.02,8);

STICKLINE(买线>=卖线,LOW,HIGH,0,0),COLORLIRED;

STICKLINE(买线>=卖线,CLOSE,OPEN,3,2),COLORLIRED;

STICKLINE(买线<卖线,LOW,HIGH,0,0),COLORCYAN;

STICKLINE(买线<卖线,CLOSE,OPEN,3,2),COLORCYAN;

STICKLINE(OPEN>CLOSE,CLOSE,OPEN,2.5,0),COLORCYAN;

MA7:EMA(CLOSE,7),COLORFFFFFF,LINETHICK2;

选股公式如下:BOLL选股公式(通用)

MA7:=EMA(CLOSE,7);

MID:=MA(CLOSE,20);

CROSS(MA7,MID);

想了解更多目前A股阶段的操作技巧及完整公式代码,或有任何疑惑,可关注公众号越声投研(yslcwh),第一时间获取最重要的投资情报和独创的股票技术分析方法,干货源源不断!

股市投资蜕变的4大阶段

一、初识,它占据了我的整颗心。

说得不过分,如同初恋一般,我初接触了股票,爱上它,开始变得如痴如醉。刚爱上一个事物的时候,是一个人的美好时光。这个时候,对知识如饥似渴,疯狂的学习。每个人心底都是有求知欲的,并且会很享受这个过程。

二、遭遇瓶颈,却并不言弃。

用多年的时间,才可能摸清这个市场的脉搏,积累交易技术、理念、资金管理,以及大量的实盘经验。这个阶段,我发现我的交易再也很难有突破,业绩时好时坏,有时候会经历一些单子的闪崩。我会让自己不断反省,有时候也会因为抓住一个大波浪而高兴。这些漫长的时光里,我多次会以为自己经验已经相当丰富,交易系统成熟完善。

三、交易者的宿命里免不崩溃和抉择。

坚持了很多年,我以为自己要开始飞了。看起来万事俱备只欠东风。经验,技术,知识,阅历,前面那么多年的修炼,让我觉得大干一场的时候终于到了!于是开始调集大批量的资金,人生在此一战!交易的诱惑和人性的贪婪,不是以线性倍数在放大,而是以指数级别在放大!大资金的闪失,往往只出现在3%的概率里。我知道要很小心去操作,告诫自己纪律和仓位都要严格控制。可是,一次致命的贪婪,就让前面所有的努力付之东流。没有领略人生极致的苦,我也没有能力去控制深处的欲念。

四、心的重生,难以再对交易存在任何情绪。

人生三重境界,看山是山,看山不是山,看山还是山。做完十多年交易,历经无数市场磨难,最终我开始重回轻松赚钱的轨道,无外乎这么几点:轻仓,顺势,学会休息。山还是那年我刚入股票市场的山,人却是顿悟后的人,方法还是那些最淳朴的方法。你不把股票交易太当回事,这就对了。我的欲望已经在无欲中提升到一个新的高度,精神的升华推动了自律,灵魂的洗礼涤荡了欲望。成功的交易,我是领悟了,顺势交易乃第一要素,做好资金管理乃核心

(以上内容仅供参考,不构成操作建议。如自行操作,注意仓位控制和风险自负。)

声明:本内容由公众号越声投研(yslcwh)提供,不代表投资快报认可其投资观点。

https://www.suoduoma.com

上一篇:一字出货(一字出货法k线图)

下一篇:个人投资理财入门(个人投资理财产品)

相关推荐

返回顶部