ta-lib 里的蜡烛图形态函数源码
ta-lib 里的蜡烛图形态函数源码
以CDL2CROWS为例, 看一看c语言的源码:
有关的源码文件包括
- d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_CDL2CROWS.c
- d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_utility.h
- d:\Documents\Pictures\ta-lib\c\src\ta_common\ta_global.c
- d:\Documents\Pictures\ta-lib\c\src\ta_common\ta_global.h
i = startIdx;/* Proceed with the calculation for the requested range.* Must have:* - first candle: long white candle* - second candle: black real body* - gap between the first and the second candle's real bodies* - third candle: black candle that opens within the second real body and closes within the first real body* The meaning of "long" is specified with TA_SetCandleSettings* outInteger is negative (-1 to -100): two crows is always bearish; * the user should consider that two crows is significant when it appears in an uptrend, while this function * does not consider the trend*/outIdx = 0;do{if( TA_CANDLECOLOR(i-2) == 1 && // 1st: whiteTA_REALBODY(i-2) > TA_CANDLEAVERAGE( BodyLong, BodyLongPeriodTotal, i-2 ) && // longTA_CANDLECOLOR(i-1) == -1 && // 2nd: blackTA_REALBODYGAPUP(i-1,i-2) && // gapping upTA_CANDLECOLOR(i) == -1 && // 3rd: blackinOpen[i] < inOpen[i-1] && inOpen[i] > inClose[i-1] && // opening within 2nd rbinClose[i] > inOpen[i-2] && inClose[i] < inClose[i-2] // closing within 1st rb)outInteger[outIdx++] = -100;elseoutInteger[outIdx++] = 0;/* add the current range and subtract the first range: this is done after the pattern recognition * when avgPeriod is not 0, that means "compare with the previous candles" (it excludes the current candle)*/BodyLongPeriodTotal += TA_CANDLERANGE( BodyLong, i-2 ) - TA_CANDLERANGE( BodyLong, BodyLongTrailingIdx );i++; BodyLongTrailingIdx++;} while( i <= endIdx );TA_RetCode TA_RestoreCandleDefaultSettings( TA_CandleSettingType settingType )
{const TA_CandleSetting TA_CandleDefaultSettings[] = {/* real body is long when it's longer than the average of the 10 previous candles' real body */{ TA_BodyLong, TA_RangeType_RealBody, 10, 1.0 },/* real body is very long when it's longer than 3 times the average of the 10 previous candles' real body */{ TA_BodyVeryLong, TA_RangeType_RealBody, 10, 3.0 },/* real body is short when it's shorter than the average of the 10 previous candles' real bodies */{ TA_BodyShort, TA_RangeType_RealBody, 10, 1.0 },/* real body is like doji's body when it's shorter than 10% the average of the 10 previous candles' high-low range */{ TA_BodyDoji, TA_RangeType_HighLow, 10, 0.1 },/* shadow is long when it's longer than the real body */{ TA_ShadowLong, TA_RangeType_RealBody, 0, 1.0 },/* shadow is very long when it's longer than 2 times the real body */{ TA_ShadowVeryLong, TA_RangeType_RealBody, 0, 2.0 },/* shadow is short when it's shorter than half the average of the 10 previous candles' sum of shadows */{ TA_ShadowShort, TA_RangeType_Shadows, 10, 1.0 },/* shadow is very short when it's shorter than 10% the average of the 10 previous candles' high-low range */{ TA_ShadowVeryShort, TA_RangeType_HighLow, 10, 0.1 },/* when measuring distance between parts of candles or width of gaps *//* "near" means "<= 20% of the average of the 5 previous candles' high-low range" */{ TA_Near, TA_RangeType_HighLow, 5, 0.2 },/* when measuring distance between parts of candles or width of gaps *//* "far" means ">= 60% of the average of the 5 previous candles' high-low range" */{ TA_Far, TA_RangeType_HighLow, 5, 0.6 },/* when measuring distance between parts of candles or width of gaps *//* "equal" means "<= 5% of the average of the 5 previous candles' high-low range" */{ TA_Equal, TA_RangeType_HighLow, 5, 0.05 }};/* Candlestick macros (used by candlestick functions, where the parameters are always called inClose, inOpen, etc.* Don't use i++ or func(i) with these macros !*/#define TA_REALBODY(IDX) ( std_fabs( inClose[IDX] - inOpen[IDX] ) )
#define TA_UPPERSHADOW(IDX) ( inHigh[IDX] - ( inClose[IDX] >= inOpen[IDX] ? inClose[IDX] : inOpen[IDX] ) )
#define TA_LOWERSHADOW(IDX) ( ( inClose[IDX] >= inOpen[IDX] ? inOpen[IDX] : inClose[IDX] ) - inLow[IDX] )
#define TA_HIGHLOWRANGE(IDX) ( inHigh[IDX] - inLow[IDX] )
#define TA_CANDLECOLOR(IDX) ( inClose[IDX] >= inOpen[IDX] ? 1 : -1 )#if defined( _MANAGED )#define TA_CANDLERANGETYPE(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->rangeType)#define TA_CANDLEAVGPERIOD(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->avgPeriod)#define TA_CANDLEFACTOR(SET) (Globals->candleSettings[(int)CandleSettingType::SET]->factor)
#elif defined( _JAVA )#define TA_CANDLERANGETYPE(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].rangeType)#define TA_CANDLEAVGPERIOD(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].avgPeriod)#define TA_CANDLEFACTOR(SET) (this.candleSettings[CandleSettingType.SET.ordinal()].factor)
#else#define TA_CANDLERANGETYPE(SET) (TA_Globals->candleSettings[TA_##SET].rangeType)#define TA_CANDLEAVGPERIOD(SET) (TA_Globals->candleSettings[TA_##SET].avgPeriod)#define TA_CANDLEFACTOR(SET) (TA_Globals->candleSettings[TA_##SET].factor)
#endif#define TA_CANDLERANGE(SET,IDX) \( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_RealBody,RealBody) ? TA_REALBODY(IDX) : \( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_HighLow,HighLow) ? TA_HIGHLOWRANGE(IDX) : \( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_Shadows,Shadows) ? TA_UPPERSHADOW(IDX) + TA_LOWERSHADOW(IDX) : \0 ) ) )
#define TA_CANDLEAVERAGE(SET,SUM,IDX) \( TA_CANDLEFACTOR(SET) \* ( TA_CANDLEAVGPERIOD(SET) != 0.0? SUM / TA_CANDLEAVGPERIOD(SET) : TA_CANDLERANGE(SET,IDX) ) \/ ( TA_CANDLERANGETYPE(SET) == ENUM_VALUE(RangeType,TA_RangeType_Shadows,Shadows) ? 2.0 : 1.0 ) \)
#define TA_REALBODYGAPUP(IDX2,IDX1) ( min(inOpen[IDX2],inClose[IDX2]) > max(inOpen[IDX1],inClose[IDX1]) )
#define TA_REALBODYGAPDOWN(IDX2,IDX1) ( max(inOpen[IDX2],inClose[IDX2]) < min(inOpen[IDX1],inClose[IDX1]) )
#define TA_CANDLEGAPUP(IDX2,IDX1) ( inLow[IDX2] > inHigh[IDX1] )
#define TA_CANDLEGAPDOWN(IDX2,IDX1) ( inHigh[IDX2] < inLow[IDX1] )
转载于:https://www.cnblogs.com/duan-qs/p/11461012.html
ta-lib 里的蜡烛图形态函数源码相关推荐
- Java 蜡烛图_ta-lib 里的蜡烛图形态函数源码
ta-lib 里的蜡烛图形态函数源码 以CDL2CROWS为例, 看一看c语言的源码: 有关的源码文件包括 d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_ ...
- C++ Opengl图形颜色源码
C++ Opengl图形颜色源码 项目开发环境: 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1,三方库:OpenGL. 项目功能: 创建一个有颜色的图 ...
- Python量化投资——mplfinance最佳实践:动态交互式高级K线图(蜡烛图)【源码+详解】
用mplfinance实现全功能动态交互式K线图 手把手用`python`+mplfinance实现高级K线图 ` mplfinance`的基本K线图 目标 实现自定义风格和颜色 图表尺寸调整.相关信 ...
- Python量化投资——mplfinance实现全功能动态交互式K线图(蜡烛图)【源码+详解】
用python实现全功能动态交互式K线图 手把手用`python`一步步实现动态交互式K线图 ` mplfinance`的基本K线图 目标 实现自定义风格和颜色 图表尺寸调整.相关信息的显示 添加完整 ...
- MDSF:发布图形编辑器源码OpenGraphicEditor
OpenExpressApp(开源信息系统开发平台之OpenExpressApp框架.pdf)的建模,打算是基于GOPPRR模型来做的,为了支持更灵活的画图,所以采用了直接使用GEF.这是使用GEF做 ...
- vue大括号里接受一个函数_vue源码探究(第四弹)
vue源码探究(第四弹) 结束了上一part的数据代理,这一部分主要讲讲vue的模板解析,感觉这个有点难理解,而且内容有点多,hhh. 模板解析 废话不多说,先从简单的入手. 按照之前的套路,先举一个 ...
- js文件里获取路由 vue_【源码拾遗】从vue-router看前端路由的两种实现
本文由浅入深观摩vue-router源码是如何通过hash与History interface两种方式实现前端路由,介绍了相关原理,并对比了两种方式的优缺点与注意事项.最后分析了如何实现可以直接从文件 ...
- 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析
square/okhttpgithub.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...
- 分享一个在内存里搜索QQ号码的源码,源自看雪论坛
源码出于看雪论坛.源址已佚.先谢过 看结果 耗时47微秒 #include <windows.h> #include <tlhelp32.h> #include ...
最新文章
- php安装gb,php安装程序的原理
- SpringMVC(二八) 重定向
- 元素失去焦点(隐藏软键盘)
- 架构设计的目标与衡量
- Redis集群:哨兵(Sentinel)
- 机器学习(4.文本数据的特征抽取(第二种TfidfVectorizer(TF-IDF)))
- 简易 Vue 构建--篇四
- python写一个表白程序_用Python个女神做一个表白神器
- Immutable 操作在 React 中的实践
- Python代码测试 - unitest\doctest\nose\pytest
- 楼主,不知道为什么这么流行
- C#使用LitJson解析JSON
- WEB视频自适应(下)
- 阿里云ECS服务器退订
- burp暴力破解 ——合天网安实验室学习笔记
- 代码质量保证体系(上)
- c语言实现123456789变为147258369的方式是输出
- ECMAScript语法+关键字和保留字
- android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符
- python3 时区 时间戳 指定输入时间为东八区时间、北京时间