皮皮网

【必抓涨停源码】【fcfs代码源码】【object mapper源码】pivot源码

2024-11-19 01:43:50 来源:强力启动指标源码

1.STL 源码剖析:sort
2.RectTransform的anchoredPosition
3.期货软件TB系统源代码解读系列36-R-Breaker系统

pivot源码

STL 源码剖析:sort

       我大抵是太闲了。

       更好的阅读体验。

       sort 作为最常用的 STL 之一,大多数人对于其了解仅限于快速排序。

       听说其内部实现还包括插入排序和堆排序,于是必抓涨停源码很好奇,决定通过源代码一探究竟。

       个人习惯使用 DEV-C++,不知道其他的编译器会不会有所不同,现阶段也不是很关心。

       这个文章并不是析完之后的总结,而是边剖边写。不免有个人的猜测。而且由于本人英语极其差劲,大抵会犯一些憨憨错误。

       源码部分sort

       首先,在 Dev 中输入以下代码:

       然后按住 ctrl,鼠标左键sort,就可以跳转到头文件 stl_algo.h,fcfs代码源码并可以看到这个:

       注释、模板和函数参数不再解释,我们需要关注的是函数体。

       但是,中间那一段没看懂……

       点进去,是一堆看不懂的#define。

       查了一下,感觉这东西不是我这个菜鸡能掌握的。

       有兴趣的 戳这里。

       那么接下来,就应该去到函数__sort 来一探究竟了。

       __sort

       通过同样的方法,继续在stl_algo.h 里找到 __sort 的源代码。

       同样,只看函数体部分。

       一般来说,sort(a,a+n) 是对于区间 [公式] 进行排序,所以排序的object mapper源码前提是 __first != __last。

       如果能排序,那么通过两种方式:

       一部分一部分的看。

       __introsort_loop

       最上边注释的翻译:这是排序例程的帮助程序函数。

       在传参时,除了首尾迭代器和排序方式,还传了一个std::__lg(__last - __first) * 2,对应 __depth_limit。

       while 表示,当区间长度太小时,不进行排序。

       _S_threshold 是一个由 enum 定义的数,好像是叫枚举类型。

       当__depth_limit 为 [公式] 时,也就是迭代次数较多时,不使用 __introsort_loop,而是使用 __partial_sort(部分排序)。

       然后通过__unguarded_partition_pivot,得到一个奇怪的车主互助源码位置(这个函数的翻译是无防护分区枢轴)。

       然后递归处理这个奇怪的位置到末位置,再更新末位置,继续循环。

       鉴于本人比较好奇无防护分区枢轴是什么,于是先看的__unguarded_partition_pivot。

       __unguarded_partition_pivot

       首先,找到了中间点。

       然后__move_median_to_first(把中间的数移到第一位)。

       最后返回__unguarded_partition。

       __move_median_to_first

       这里的中间数,并不是数列的中间数,而是三个迭代器的中间值。

       这三个迭代器分别指向:第二个数,中间的数,最后一个数。

       至于为什么取中间的数,暂时还不是很清楚。

       `__unguarded_partition`

       传参传来的水星直播源码序列第二位到最后。

       看着看着,我好像悟了。

       这里应该就是实现快速排序的部分。

       上边的__move_median_to_first 是为了防止特殊数据卡 [公式] 。经过移动的话,第一个位置就不会是最小值,放在左半序列的数也就不会为 [公式] 。

       这样的话,__unguarded_partition 就是快排的主体。

       那么,接下来该去看部分排序了。

       __partial_sort

       这里浅显的理解为堆排序,至于具体实现,在stl_heap.h 里,不属于我们的讨论范围。

       (绝对不是因为我懒。)

       这样的话,__introsort_loop 就结束了。下一步就要回到 __sort。

       __final_insertion_sort

       其中某常量为enum { _S_threshold = };。

       其中实现的函数有两个:

       __insertion_sort

       其中的__comp 依然按照默认排序方式 < 来理解。

       _GLIBCXX_MOVE_BACKWARD3

       进入到_GLIBCXX_MOVE_BACKWARD3,是一个神奇的 #define:

       其上就是move_backward:

       上边的注释翻译为:

       __unguarded_linear_insert

       翻译为“无防护线性插入”,应该是指直接插入吧。

       当__last 的值比前边元素的值小的时候,就一直进行交换,最后把 __last 放到对应的位置。

       __unguarded_insertion_sort

       就是直接对区间的每个元素进行插入。

       总结

       到这里,sort 的源代码就剖完了(除了堆的那部分)。

       虽然没怎么看懂,但也理解了,sort 的源码是在快排的基础上,通过堆排序和插入排序来维护时间复杂度的稳定,不至于退化为 [公式] 。

       鬼知道我写这么多是为了干嘛……

RectTransform的anchoredPosition

       理解 RectTransform 的 anchoredPosition

       锚定位置 anchoredPosition 的定义有两层含义。当 anchoredMin 等于 anchorMax 时,锚点即为坐标系的四分之一点。此时,anchoredPosition 就是 Pivot 点相对于锚点的坐标。

       当 anchorMin 和 anchorMax 不相等时,锚点位置形成矩形(或线段)。锚点在这种情况下根据隐藏点计算隐藏位置(隐藏点不显示 Gizmos 提示)。此时,anchoredPosition 是 Pivot 点相对于此隐藏点的坐标,代表被锚定在以该点为原点的坐标系下。

       综合理解,anchoredPosition 是 Pivot 点在特殊坐标系下的位置,该坐标系由锚点确定。锚点的确定取决于 anchoredMin 和 anchorMax 的值。

       关于 offsetMin、offsetMax、sizeDelta 和 anchoredPosition 之间的关系,在官方源代码中可以找到 offsetMin 的计算方法。已知 anchoredPosition 等于 offsetMin 加上 sizeDelta 的向量乘以 Pivot。

       在 anchorMin 和 anchorMax 不相等的情况下,可以推导出这个过程。根据定义,anchoredPosition 等同于深蓝色箭头的向量。记 A 的左下角为 A_min,B 的左下角为 B_min。箭头起点记为 A_pivot,箭头终点记为 B_pivot。由于 A 的这个点是根据 B 的 Pivot 计算得出,可以知道用于计算 Pivot 点的 Pivot 比例保持一致。

期货软件TB系统源代码解读系列-R-Breaker系统

       R-Breaker系统是一种基于昨日价格的交易参考工具,它简化了Pivot Points,仅去除了一个枢轴点,交易策略基础是突破上界做多,下界做空。若做多后回撤至次上界,认为是假突破,应反手操作。以下是系统的核心代码和部分解释:

       参数设置:如notbef(9.)代表时间需大于0.,Notaft(.)表示时间需小于0.,其余参数如f1、f2、f3、reverse、rangemin和xdiv等用于计算关键价位。

       变量声明:包括数值序列变量如ssetup、bsetup等,用于存储计算结果,以及布尔型变量rfilter,用于过滤操作。

       代码执行逻辑:根据日期变化,计算当日开盘价的倍数作为参考区间。在特定时间范围内,如9点到2点分,根据市场波动判断是否突破区间进行买卖操作,同时考虑持仓状态和个人设置的条件。

       警告:作者并未实际在实盘或超级图表上测试过此系统,认为在使用前需要根据个人市场分析和策略调整优化。

       总的来说,R-Breaker系统是一个动态计算买卖点的工具,需要交易者根据市场状况灵活运用,并可能需要结合其他指标或个人判断进行调整。