﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-alantop's blog -随笔分类-量化趋势交易</title><link>http://www.cppblog.com/alantop/category/21351.html</link><description>量化趋势交易</description><language>zh-cn</language><lastBuildDate>Sat, 20 Jul 2019 10:45:50 GMT</lastBuildDate><pubDate>Sat, 20 Jul 2019 10:45:50 GMT</pubDate><ttl>60</ttl><item><title>tb跨周期函数</title><link>http://www.cppblog.com/alantop/archive/2019/07/19/216571.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 19 Jul 2019 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2019/07/19/216571.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/216571.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2019/07/19/216571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/216571.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/216571.html</trackback:ping><description><![CDATA[<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;简称:&nbsp;k_Bar<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;名称:&nbsp;跨周期函数--基础BAR数据<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;类别:&nbsp;用户函数<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;类型:&nbsp;用户函数<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;输出:&nbsp;数值型<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br /><br />Params&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TimeFrame(</span><span style="color: #000000; ">1440</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期：按月线=4周（40320)，周线=7天(10080)，日线=24小时（1440）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;其他日内的周期等于相应的分钟数，如：1小时=60，&nbsp;30分钟=30。。。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;1分钟图表，支持不规则分钟数，如3分钟、8分钟、14分钟等</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;BarsBack(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期BAR偏移：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;1--表示当前周期下的当前BAR对应目标周期的前一根BAR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;0--表示当前周期下的当前BAR对应目标周期的当前BAR截止到目前为止的BAR数据值</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />Vars<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前K线实际交易日期（主要解决夜盘问题）</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeHour;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前K线实际交易时间（小时）</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeMinute;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前K线实际交易时间（分钟）</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Index;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前BAR在TimeFrame时间周期下的索引值</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;SessionStartHour;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前K线实际的交易日的第一节交易的起始时间（小时）</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;barCnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;读取目标周期上一根BAR的数据在当前周期下需要回溯的BAR数</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_CurBar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;当前BAR在目标周期下对应的CurrentBar</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;barCntSum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;临时变量，返回目标周期数据需要回溯的BAR数</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Open;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的开盘价</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_High;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的最高价</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Low;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的最低价</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Close;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的收盘价</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Vol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的成交量</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_OpenInt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;目标时间周期的持仓量</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;condition(</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;判断在目标时间是否属于不同根BAR</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />Begin<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeDate&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;TrueDate(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;取实际交易日期<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;根据TimeFrame分别处理</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;If(TimeFrame&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">40320</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;月线</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(YearFromDateTime(TradeDate)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1970</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">12</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;MonthFromDateTime(TradeDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else&nbsp;If(TimeFrame&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10080</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;周线</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;IntPart(DateDiff(</span><span style="color: #000000; ">19700105</span><span style="color: #000000; ">,TradeDate)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">7</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else&nbsp;If(TimeFrame&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1440</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;日线</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;DateDiff(</span><span style="color: #000000; ">19700105</span><span style="color: #000000; ">,TradeDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeHour&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;HourFromDateTime(Time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeMinute&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MinuteFromDateTime(Time);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;取当前品种，第一节交易的开始小时数</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionStartHour&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;IntPart(GetSessionStartTime(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;解决4小时图的时间划分比较特殊问题</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(TimeFrame&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">240</span><span style="color: #000000; ">)&nbsp;SessionStartHour&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;IIF(SessionStartHour&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">21</span><span style="color: #000000; ">,</span><span style="color: #000000; ">20</span><span style="color: #000000; ">,</span><span style="color: #000000; ">8</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;按当前BAR对应时间，除以TimeFrame的分钟数，得到的商为索引值，索引值相同的在大周期上属于同一根BAR</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;DateDiff(</span><span style="color: #000000; ">19700105</span><span style="color: #000000; ">,TradeDate)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(IntPart(</span><span style="color: #000000; ">1439</span><span style="color: #000000; ">/</span><span style="color: #000000; ">TimeFrame)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;IntPart((IIF(TradeHour&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;SessionStartHour,&nbsp;TradeHour&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;SessionStartHour,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeHour&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">24</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;SessionStartHour)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">60</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;TradeMinute)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">TimeFrame);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;索引值不同的，则说明属于不同BAR</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;condition&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Index&nbsp;</span><span style="color: #000000; ">&lt;&gt;</span><span style="color: #000000; ">&nbsp;Index[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If(CurrentBar</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果是第一根Bar,&nbsp;Ht_CurBar=0</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_CurBar&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Open&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Open;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;High;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Close&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Close;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Vol;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_OpenInt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;OpenInt;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(Condition)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果在目标周期下，属于另一根K线，则Ht_CurBar加1</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_CurBar&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Ht_CurBar[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Open&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Open;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;High;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Vol;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果在目标周期下，属于同一根K线，则Ht_CurBar不变，但最高价和最低价要记录价格的变化，成交量要累加</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;barCnt[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Max(Ht_High[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],High);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Min(Ht_Low[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],Low);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Ht_Vol[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;Vol;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;收盘价和持仓量总是取最新值</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Close&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Close;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_OpenInt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;OpenInt;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;FileAppend("c:\\qqqq.txt","DT="+Text(Date+Time)+"&nbsp;Index="+Text(Index)+"&nbsp;CurrentBar="+Text(CurrentBar)+"&nbsp;barCnt="+text(barCnt)+"&nbsp;Ht_CurBar="+text(Ht_CurBar)+"&nbsp;Ht_Open="+text(Ht_Open)+"&nbsp;Ht_High="+text(Ht_High)<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;+"&nbsp;Ht_Low="+Text(Ht_Low)+"&nbsp;Ht_Close="+Text(Ht_Close)+"&nbsp;Ht_Vol="+Text(Ht_Vol)+"&nbsp;Ht_OpenInt="+Text(Ht_OpenInt));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;前面在当前周期的每根BAR，记录了它对应的目标时间周期的开高低收等数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;接下来把每根BAR对应的数据返回给调用本函数的公式（通过全局变量）</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;barCnt&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;If(BarsBack&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果BarsBack为0，则当前BAR记录的是当前BAR所对应目标周期的当前BAR截止到目前为止的BAR数据值</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果BarsBack为1，则当前BAR记录的是当前BAR所对应目标周期的前一根BAR的数据值</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;barCnt&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;将目标时间周期下的BAR数据写入全局变量返回调用公式</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_curbar</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_CurBar);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_open</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_Open[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_high</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_High[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_low</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_Low[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_close</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_Close[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_vol</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_Vol[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ht_openInt</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Ht_OpenInt[barCntSum]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;将读取大周期数据的回溯BAR数作为函数的返回值返回</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;barCnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />End<br /><br /><br />&nbsp;<br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;<br />Params&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TimeFrame(1440);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期：按月线=4周（40320)，周线=7天(10080)，日线=24小时（1440）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;其他日内的周期等于相应的分钟数，如：1小时=60，&nbsp;30分钟=30。。。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1分钟图表，支持不规则分钟数，如3分钟、8分钟、14分钟等<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;BarsBack(0);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期BAR偏移：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1--表示当前周期下的当前BAR对应目标周期的前一根BAR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0--表示当前周期下的当前BAR对应目标周期的当前BAR截止到目前为止的BAR数据值<br /><br />Vars<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前K线实际交易日期（主要解决夜盘问题）<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeHour;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前K线实际交易时间（小时）<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;TradeMinute;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前K线实际交易时间（分钟）<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Index;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前BAR在TimeFrame时间周期下的索引值<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;SessionStartHour;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前K线实际的交易日的第一节交易的起始时间（小时）<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;barCnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;读取目标周期上一根BAR的数据在当前周期下需要回溯的BAR数<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_CurBar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;当前BAR在目标周期下对应的CurrentBar<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;barCntSum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;临时变量，返回目标周期数据需要回溯的BAR数<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Open;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的开盘价<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_High;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的最高价<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Low;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的最低价<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Close;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的收盘价<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_Vol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的成交量<br />&nbsp;&nbsp;&nbsp;&nbsp;NumericSeries&nbsp;Ht_OpenInt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;目标时间周期的持仓量<br />&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;condition(false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;判断在目标时间是否属于不同根BAR<br />&nbsp;&nbsp;&nbsp;&nbsp;Numeric&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />Begin<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeDate&nbsp;=&nbsp;TrueDate(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;取实际交易日期<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;根据TimeFrame分别处理<br />&nbsp;&nbsp;&nbsp;&nbsp;If(TimeFrame&nbsp;==&nbsp;40320)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;月线<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;=&nbsp;(YearFromDateTime(TradeDate)&nbsp;-&nbsp;1970)&nbsp;*&nbsp;12&nbsp;+&nbsp;MonthFromDateTime(TradeDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else&nbsp;If(TimeFrame&nbsp;==&nbsp;10080)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;周线<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;=&nbsp;IntPart(DateDiff(19700105,TradeDate)/7);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else&nbsp;If(TimeFrame&nbsp;==&nbsp;1440)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;日线<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;=&nbsp;DateDiff(19700105,TradeDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeHour&nbsp;=&nbsp;HourFromDateTime(Time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TradeMinute&nbsp;=&nbsp;MinuteFromDateTime(Time);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;取当前品种，第一节交易的开始小时数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionStartHour&nbsp;=&nbsp;IntPart(GetSessionStartTime(0)*100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;按当前BAR对应时间，除以TimeFrame的分钟数，得到的商为索引值，索引值相同的在大周期上属于同一根BAR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;=&nbsp;DateDiff(19700105,TradeDate)&nbsp;*&nbsp;(IntPart(1440/TimeFrame)+1)&nbsp;+&nbsp;IntPart((IIF(TradeHour&nbsp;&gt;=&nbsp;SessionStartHour,&nbsp;TradeHour&nbsp;-&nbsp;SessionStartHour,TradeHour&nbsp;+&nbsp;24&nbsp;-&nbsp;SessionStartHour)&nbsp;*&nbsp;60&nbsp;+&nbsp;TradeMinute)/TimeFrame);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;索引值不同的，则说明属于不同BAR<br />&nbsp;&nbsp;&nbsp;&nbsp;condition&nbsp;=&nbsp;Index&nbsp;&lt;&gt;&nbsp;Index[1];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If(CurrentBar==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果是第一根Bar,&nbsp;Ht_CurBar=0<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_CurBar&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Open&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Close&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_OpenInt&nbsp;=&nbsp;InvalidNumeric;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(Condition)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果在目标周期下，属于另一根K线，则Ht_CurBar加1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(Ht_CurBar[1]&nbsp;==&nbsp;InvalidNumeric)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_CurBar&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_CurBar&nbsp;=&nbsp;Ht_CurBar[1]&nbsp;+&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Open&nbsp;=&nbsp;Open;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;=&nbsp;High;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;=&nbsp;Low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;=&nbsp;Vol;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果在目标周期下，属于同一根K线，则Ht_CurBar不变，但最高价和最低价要记录价格的变化，成交量要累加<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(Ht_CurBar[1]&nbsp;&lt;&gt;&nbsp;InvalidNumeric)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCnt&nbsp;=&nbsp;barCnt[1]&nbsp;+&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_High&nbsp;=&nbsp;Max(Ht_High[1],High);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Low&nbsp;=&nbsp;Min(Ht_Low[1],Low);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Vol&nbsp;=&nbsp;Ht_Vol[1]&nbsp;+&nbsp;Vol;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;收盘价和持仓量总是取最新值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If(Ht_CurBar&nbsp;&lt;&gt;&nbsp;InvalidNumeric)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_Close&nbsp;=&nbsp;Close;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ht_OpenInt&nbsp;=&nbsp;OpenInt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Commentary("barCnt&nbsp;=&nbsp;"+Text(barCnt));<br />&nbsp;&nbsp;&nbsp;&nbsp;//Commentary("Ht_CurBar="+text(Ht_CurBar));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//FileAppend("c:\\qqqq.txt","DT="+Text(Date+Time)+"&nbsp;Index="+Text(Index)+"&nbsp;CurrentBar="+Text(CurrentBar)+"&nbsp;barCnt="+text(barCnt)+"&nbsp;Ht_CurBar="+text(Ht_CurBar)+"&nbsp;Ht_Open="+text(Ht_Open)+"&nbsp;Ht_High="+text(Ht_High)<br />&nbsp;&nbsp;&nbsp;&nbsp;//+"&nbsp;Ht_Low="+Text(Ht_Low)+"&nbsp;Ht_Close="+Text(Ht_Close)+"&nbsp;Ht_Vol="+Text(Ht_Vol)+"&nbsp;Ht_OpenInt="+Text(Ht_OpenInt));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;前面在当前周期的每根BAR，记录了它对应的目标时间周期的开高低收等数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;接下来把每根BAR对应的数据返回给调用本函数的公式（通过全局变量）<br />&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;=&nbsp;barCnt&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;If(BarsBack&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果BarsBack为0，则当前BAR记录的是当前BAR所对应目标周期的当前BAR截止到目前为止的BAR数据值<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果BarsBack为1，则当前BAR记录的是当前BAR所对应目标周期的前一根BAR的数据值<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;barCntSum&nbsp;=&nbsp;barCnt&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;将目标时间周期下的BAR数据写入全局变量返回调用公式<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_curbar",Ht_CurBar);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_open",Ht_Open[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_high",Ht_High[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_low",Ht_Low[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_close",Ht_Close[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_vol",Ht_Vol[barCntSum]);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetGlobalVar2("Ht_openInt",Ht_OpenInt[barCntSum]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;将读取大周期数据的回溯BAR数作为函数的返回值返回<br />&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;barCnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />End&nbsp;<br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /><br /></span></div></div><img src ="http://www.cppblog.com/alantop/aggbug/216571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2019-07-19 22:26 <a href="http://www.cppblog.com/alantop/archive/2019/07/19/216571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文华双均线策略</title><link>http://www.cppblog.com/alantop/archive/2018/12/25/216138.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 25 Dec 2018 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2018/12/25/216138.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/216138.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2018/12/25/216138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/216138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/216138.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2018/12/25/216138.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/216138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2018-12-25 17:12 <a href="http://www.cppblog.com/alantop/archive/2018/12/25/216138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>