不计算最后一根如何查看k线图数据公式怎么表示

→ [求助]后台交易,是不是在最后一根k线结束前,每出现一个新的行情数据,公式就执行一遍?
&&共有<b style="color:#ff人关注过本帖主题:[求助]后台交易,是不是在最后一根k线结束前,每出现一个新的行情数据,公式就执行一遍?
金字塔―专业程序化交易量化投资平台客户服务部
----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到 您的宝贵建议或者投诉,请发往邮箱:
金字塔―专业程序化交易量化投资平台客户服务部
----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到 您的宝贵建议或者投诉,请发往邮箱:
金字塔―专业程序化交易量化投资平台客户服务部
----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到 您的宝贵建议或者投诉,请发往邮箱:
金字塔―专业程序化交易量化投资平台客户服务部
----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到 您的宝贵建议或者投诉,请发往邮箱:
金字塔―专业程序化交易量化投资平台客户服务部
----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到 您的宝贵建议或者投诉,请发往邮箱:查看: 2553|回复: 0
飞狐、大交易师选股公式编写
飞狐、大交易师选股公式编写1 x# @( ~% ~) t! G( E&&X/ T3 u
一、选股公式:3 a&&q, p* v5 v, T0 I
  显然选股公式,就是用于选出符合条件的股票,由若干中间语句组成,并且其中不含绘图函数。只有一行输出语句,位于最后一条语句,且必须是条件表达式。
  例1:设计一个公式,选出N周期内涨幅大于或等于5%的股票。
  求解:公式代码如下,其中N为参数:/ t4 j1 i2 J1 f/ b& K& |9 v$ X- R- z4 n
" ^' [. ^1 R/ A5 F% Y
&&G) `& {, X, J% T" o, B
--------------------------------------------------------------------------------
收盘价:=$ r& j0 h6 E' E- \
N日前收盘:=ref(close,N);
选股条件:收盘价/N日前收盘&=1.05;--------------------------------------------------------------------------------
  代码解释:公式由我们所熟悉的代码组成,共3行,前2行是中间语句,最后一行是选股的条件,其中最后一行“选股条件:”,也可以不写。
  操作简介:在飞狐中,按F7,弹出如图界面。图中①可以调整参数。②可以选择在什么分析周期下选股。③可以改变选股范围,默认为A股市场。④可以让选出的股票输出到指定的板块,并将该板块设为自动板块。⑤可以指定时段进行选股,默认是对最后一天进行选股。⑥对某些公式,还可以进行成功率测试。5 O* L9 i/ c7 U4 W
  在选股的操作过程中,大家可以发现,利用技术指标也可以进行选股。
  练习1:编制一个选股公式,选出RSI突破80的股票。
  思考1:建立如下选股公式,该公式的意义是什么?实际操作一下,看看有什么问题?为什么?
% T; F# [. f. S' ~: e
--------------------------------------------------------------------------------7 N&&}! h5 I3 I7 N
zsp:=ref(c,1);
spj/zsp&0.95;--------------------------------------------------------------------------------&&G! ^" A0 u* u2 r
# b2 E, v5 b6 z8 c
  思考2:选股操作时,当选择输出到板块时,有个自动板块的选择,起什么作用?4 _9 l, f' @2 J6 a
  思考与操作1:利用例1的选股公式,想选出最近10天,所有2天内涨幅超过5的A股板块股票。
  解疑1:某股友选股时,发现500001符合选股条件,但却选不出来,你能帮他分析一下原因吗?
3 L0 G" c/ \) b- Y
  二、交易系统:' @3 S&&^+ Q: R
  交易系统公式(简称交易公式),用于指示满足特定条件时的买入信号和卖出信号。公式的由若干中间语句,加上指定的最后4行条件表达式代码组成,最后4行分别由“ENTERLONG: ”“EXITLONG: ”、“ENTERSHORT:”、“EXITSHORT:”开始,表示多头买入、多头卖出及空头买入、空头卖出的条件。这4行也可以删去若干行,但至少保留其中的一行,表示只指示其中一种信号。' I+ r' v$ S0 U&&`5 |& b
  例2:我们来看看飞狐交易系统中的“RSI 相对强弱指标交易系统”公式,其中LL、LH是参数:
9 [) l+ V) ]* x! e" S0 h
--------------------------------------------------------------------------------
LC:=REF(CLOSE,1);{LC为中间变量}! V' e3 S7 g$ y9 k* M
RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1)*100;{RSI为中间变量}/ h( O8 d0 r% R" f) @# ~
ENTERLONG:CROSS(RSI,LL);{多头买入条件表达式,RSI上穿LL时发出买入信号}
EXITLONG:CROSS(LH,RSI);{多头卖出条件表达,RSI下穿LH时发出卖出信号}--------------------------------------------------------------------------------$ T&&W$ M( ?& _% k9 U* L
  在新建或编辑修改交易公式时,可以设定介入点的位置,如次周期中价等。设置止损条件,如目标利润止盈、最大损失止损等。
  交易公式的使用:①在K线图中,按Ctrl+F6,可以选择交易公式指示买卖信号。②在选股操作时,也可以选择交易公式进行选股。③在菜单“工具”中,还可以对交易进行“交易系统评价”、“探索最佳参数”操作。在菜单“查看”中,可以“优选交易系统”。* W% D! C# x9 V5 \& A
  此外,按Shift+W,调出公式树,可以通过鼠标把交易公式拖到K线窗口的方法,使用交易公式。试试把选股公式也拖到K线窗口,看看有何变化?说明了什么?/ t+ ~$ a% X3 ]& h) H4 M, h7 V
  当想删除在K线图上显示的各种买卖信号时,可以按Ctrl+Del或工具栏上的相应按钮实现。
3 g' T0 C9 s# c" g
  练习2:设计一个均线交易公式,当收盘价上穿5日均线时,发出多头买入信号,收盘价下穿5日均线时发出多头卖出信号。并观察设置不同的介入点介入时,指示的信号有什么变化。
  练习3:观察飞狐系统内置的各个交易公式,领会各交易公式的意义。, J4 D9 f* c$ r&&U) D$ f% R9 `/ l& N
  三、五彩K线:
  用于表示各种K线模式。比如早晨之星、黄昏之星等。五彩K线,阳线用实心表示,阴线用空心表示。默认的五彩K线均为绿色。当出现指定的K线模式时,默认用红色表示,除非使用了颜色描述符。表达五彩K线由若干中间语句和最多六条独立的条件语句,跟选股公式不同的是,选股公式只能有一个条件表达式语句。4 Y3 u% q' H! Y, `/ G6 U' i
  例1、用五彩K线描述涨幅超过9%的K线,代码如下:
--------------------------------------------------------------------------------
c/ref(c,1)&1.09;--------------------------------------------------------------------------------
&&V6 _8 q3 i$ Q/ @6 ~- M
  例2、用五彩K线描述分维形态的K线,代码如下(借用注册用户社区中,清扬兄的研究成果):
--------------------------------------------------------------------------------. V7 ^/ X0 a& f+ R
N:=2;&&U: {0 s5 j
AA:=REF(H,N)=HHV(H,2*N+1);; g, h0 i' R# a7 g% Y( G
AAA:=FILTER(AA,N);+ h6 B2 y9 M0 `2 i
BB:=BACKSET(AAA,N+1);
CC:FILTER(BB,N),COLORBLUE;
AA2:=REF(L,N)=LLV(L,2*N+1);
AAA2:=FILTER(AA2,N);/ x5 S- S% [8 E% V&&R2 `
BB2:=BACKSET(AAA2,N+1);. Y" Y' k&&T# R& }9 n, j
CC2:FILTER(BB2,N),COLORMAGENTA;--------------------------------------------------------------------------------
一、STKINDI示例代码) y4 B&&s, E8 J. f
函数注释如下:
引用任意证券任意周期的任意指标输出# k&&Z4 f" y9 Y0 k
STKINDI(STKLABEL,INDINAME,INDITYPE,PERIOD)6 h1 e. r: r& B: v/ T9 c&&m
INDITYPE为指标类型,有效值范围为(0-2),依次表示技术指标、条件选股、交易系统公式;
PERIOD为周期类型,有效值范围为(-1-11),依次表示:
当前周期、分笔成交、1分钟、5分钟、15分钟、30分钟、60分钟、日、周、月、年、多日、多分钟2 y' @: r$ H8 v
例如:STKINDI('1A0001','MA.MA1',0,DATAPERIOD);8 B# \- Y& z! ~8 _&&_
* ], X" h- V( n( v( P. G
例1:引用大盘的涨跌家数。
①被引用公式,设被引用的公式名称为“涨跌家数”,其公式代码如下:
A:ADVANCE;
D:DECLINE;
②引用大盘的涨跌家数,示例代码如下:
fStkName:=if(STRCMP(STKMARKET, 'SH'),'399301','1A0001');- c6 \" ?% u! J" e&&c, v% T
fAdvance:=STKINDI(fStkName,'涨跌家数.A',0,6);$ V) y, v6 N# p) G/ v, x
fDecline:=STKINDI(fStkName,'涨跌家数.D',0,6);& L7 W, B! p9 ~- ~5 l0 F
0 D1 |5 u2 H4 ~- o: e
说明:大盘函数advance、decline只能被大盘所使用,不能在个股中直接使用,这段代码,示范了如何利用STKINDI函数达到在个股中引用的目的。
* J& W5 y, y$ n/ u3 `) ~% q
例2:在日k线中引用本股票5分钟的obv该怎么写?1 a- p0 C& z+ |9 E
求解:代码如下
StkIndi(StkLabel,'OBV',0,2);{注意,公式的名称应使用大写字母}
; q- V' w& ~8 `
二、横向统计相关函数的用法简介:
1、横向统计数据函数 ESTDATA(N),取得横向统计日线数据(1-N),仅在日线分析周期有效;4 {- ~5 m6 U6 _% c* _" |* e( P
2、用法举例:
例:设计一个公式,统计当日A股板块涨停板的股票数。1 R&&W) V( e$ C8 \3 q* V* J
3、方法如下:
①设计一个公式,判断个股是否涨停,代码如下,设公式名称是“涨停判断”:
3 j3 @# D3 _) |6 n5 K
bl:=if(STKINBLOCK('ST板块'),1.05,1.1);{如果为ST涨停为5%,否则为10%}
ztb:abs(c-intpart(ref(c,1)*bl*100+0.5)/100)&0.0001;{如果涨停返回1,否则返回0}( k5 F$ D1 |$ J$ o! G
{注:对新股的涨停未做判断,另外个股因历史的原因,是否被ST或PT处理无法判断,因此对历史数据的判断并不准确}! e* _+ l& {8 A) o% Q- \' I1 B
% ?8 w! I, U/ ?; q# ]# b
②建立横向统计数据项:鼠标点菜单“管理/横向统计管理”,在“横向统计管理”对话框中,点“新增”,找到刚才设计的公式“涨停判断”。- F( }/ a- ?6 A4 v" o
&&D, Y" R0 A1 P# t7 Z& v/ Z. Q8 D; t1 R
⑴数据名称改为“涨停板”
⑵选择技术指标“涨停判断”,计算周期“日线”、指标线“ztb”为默认,不作修改。
⑶横向统计方法选“全部累加”。
⑷“计算时选择除权后的数据”不选即前面不打勾。4 v1 v$ J* J. c3 \
⑸点“设置范围”按钮,选择统计范围。0 C' q- u! @&&i" k# M7 o5 q9 ]
⑹置好范围后,点确定。& O% I& ~2 @+ l" r1 z
' A0 v) c$ z: D' g
至此,我们就设计了一个横向统计数据项“涨停板”,在图中序号是1,则引用时是estdata(1)。
. _/ ^* n3 `* r# F
③设计一个引用“涨停板”的公式,公式代码如下,设公式的名称是zttj:# x+ G. k$ f# ~+ j! A. H0 ]; ^
涨停板统计:estdata(1);
在K线图中,调用公式zttj,就可以看到我们所需要的结果了。7 r! f. F/ a9 l
练习:如果对横向统计有兴趣的话,可以仿此,做一个跌停板统计公式。当然可以把涨停、跌停做成二合一公式。& I: o* R" r' ]$ H! j
三、如何计算当日交易分钟数:2 ^& W! e7 E4 s3 |$ m) Y
2 V2 l& g) [( _& u* @# z2 T
T定义为1分钟周期图上,开盘后的交易分钟数,
1、代码之一+ i: H( R" h7 W4 q- n0 F
. k8 x& P: M% h( A8 `: b! F
--------------------------------------------------------------------------------) K1 d5 G. _. m' ^' \
T:=IF(BETWEEN(HOUR,9,11),(HOUR-9.5)*60+MINUTE,: M4 ^- f, ^+ X5 J9 u: v
IF(BETWEEN(HOUR,13,15),(HOUR-9.5-1.5)*60+MINUTE,240));
--------------------------------------------------------------------------------
# A% }" C& a$ o+ ?/ o) O* o
. r. J1 \& C6 @- B5 x! `( K
稍加优化:
0 e9 `4 M" l9 m( M; ~
--------------------------------------------------------------------------------
T:=IF(BETWEEN(HOUR,9,11),(HOUR-9.5)*60+MINUTE,
IF(BETWEEN(HOUR,13,15),(HOUR-11)*60+MINUTE,240));
&&X8 L! j. b- w
--------------------------------------------------------------------------------- P&&Z* R+ r7 z+ ]% S. a8 _
代码解释:
如果小时数介于9和11间,返回值(HOUR-9.5)*60+MINUTE7 C) _6 F' g4 ~
    如果小时数介于13和15之间,返回值(HOUR-9.5-1.5)*60+MINUTE6 h% w8 w/ F; }
      否则返回值240( ^8 l' o" s5 L, D4 E/ R
- ]# b5 x7 O; W, i# k
2、观察所有的股票一天的1分钟周期图,可以发现,都是起始于9:31,结束于15:00,并且中午休市不显示,因此代码一可以简化为如下公式代码二,请自行解释代码。3 h&&O( x' n8 G2 b# e
公式代码二:! c) l0 f: O' `2 h
' J+ `2 {- \8 P6 p" U
' j. ~# I. A6 k2 U( o
--------------------------------------------------------------------------------1 V' [2 S$ X/ |- H$ p
T:=IF(HOUR&=11,(HOUR-9.5)*60+MINUTE,
IF(HOUR&=11,(HOUR-11)*60+MINUTE,240));
' w0 T) r6 B" C
--------------------------------------------------------------------------------$ {3 |$ V) O9 T) M- l
9 k3 z&&I% t$ n3 O7 e
3、公式代码二,在1分钟周期中,其实返回240的情况可以合并如下(为什么?)
公式代码三:! K6 a% X7 m) `9 _0 f
T:=IF(HOUR&=11,(HOUR-9.5)*60+MINUTE,(HOUR-11)*60+MINUTE);
整理后得到,公式代码四:8 d9 o6 N3 ~2 W
T:=IF(HOUR&12,HOUR*60+MINUTE-570,HOUR*60+MINUTE-660);
6 V& n2 x9 \: m
4、公式代码四,可以改写如下的公式代码五:
T1:=IF(HOUR&12,570,660);. h5 O) @( e6 ~" K. O- T; m' P
T:=HOUR*60+MINUTE-T1;" ~+ L9 P) D! s: m8 _
  呵呵,570就是9.5小时对应的分钟数,660是11小时对应的分钟数。其实一开始我们就可以写出这个公式了。我在飞狐公式入门五的答贴中,提示了“用时间类的函数,例如现在是10:30的话,怎么算交易时间呢?如果‘现在’是14:00,又怎么算交易时间?”
0 @+ I# I6 r/ F
公式代码五,是南客喜欢的表达方式,比公式代码四要多写一行,但更灵活、易于变化。( k& R) z* V; ~
: Y* E+ a9 I0 \. z8 q8 G" C
  好了,问题解决了,也该给喜欢思考的弟兄一点问题。2 `; m' f* P! d* G" m1 a
  问题1:在5--60分钟周期图上,设计一个计算当日交易分钟数的公式,进一步设计出量比公式。' b- h0 U/ X% c& N' O! M# l& a
  问题2:国内A、B股等的交易分2个时段,即上午和下午各交易2小时,在中午休市1.5小时,如果设想一个股市,一天之中,交易3个或更多个时段,当日交易分钟数的公式,又该怎么写?为了方便写公式,假设为3个时段:上午为9:30--11:30,下午为13:00--15:00,晚上为19:00--21:00。
  提示:公式改写为适用于5--60分钟周期,还需考虑当日是否停牌。为了减少难度,先不考虑停牌的情况,等公式调试成功后,再考虑如何加入判断是否停牌的条件。& A# A$ ~&&b' v&&B+ Y: X( T
四、相关系数函数CORR简单介绍及示例代码:9 M6 }% z0 j. ?2 ~/ f
相关系数函数CORR,可以比较两只个股或个股与大盘的指标或价格在N周期内走势的相似程度,函数返回的数值越大,相似程序越高。/ ]5 m# P' M7 R& |: |8 {
下面是最后N周期内,个股与大盘收盘价走势相似程度的示例代码:
4 d! B/ m, s4 G7 D. l( T
ts0:=barssince(c);& V&&s: I$ C5 Y5 L1 x' V$ e
ts1:=barslast(barssince(backset(islastbar,N+1))=0);9 X6 @2 I: _/ Q0 y5 y& E1 S
ts:=if(ts0&n,ts0,ts1);{上市时间短于参数N,调整叠加的基准日}' [" D" z: k
bl:=ref(IndexC/C,Ts);{确定基准日压缩比率}0 ^* X4 R" v4 a% I; H
fIndexC:IndexC/{按比率压缩大盘指数,以便跟个股收盘比较}' M&&m4 m. j* I( q. B4 O
相似程度:CORR(fc,fIndexC,N),linethick0;
简单的应用方法:+ _$ I5 L/ s8 x. E0 T/ o" M
1、指标作为副图指标,可通过对“相似程度”排序,找出近期走势跟大盘相似程度较高的个股。
2、也可以把代码中的IndexC换成其它作为样本的个股,找出同类走势的个股。
* }/ Z+ m* T) X
转贴《教育统计学》中,对相关系数的描述:
相关系数&&_8 z# Q9 r+ q$ W/ r
在教育研究中,常涉及到两个事物(变量)的相互关系问题,例如,学习成绩与非智力因素的关系,数学成绩与物理成绩的关系,男女生学习成绩的关系,等等。其关系表现为以下三种变化;第一,正相关:一个变量增加或减少时,另一个变量也相应增加或减少;第二,负相关:一个变量增加或减少时,另一个变量却减少或增加;第三,无相关:说明两个变量是独立的,即由一个变量值,无法预测另一个变量值。统计学中,就用“相关系数&来从数量上描述两个变量之间的相关程度,用符号“r&来表示。) S" W0 E7 ]# c" j2 x) q
) C( \3 J! B4 l3 P/ C# b
相关系数取值范围限于:-1≤r≤+1
( N&&P" w' o4 i2 I" U% I! Y
相关系数表示的意义5 m% O- k&&n/ C8 a, n
相关系数(r) 0.00 0.00-±0.3 ±0.30-±0.50 ±0.50-±0.80 ±0.80-±1.00
相关程度 无相关 微正负相关 实正负相关 显著正负相关 高度正负相关
五、不同股票(证券)引用不同大盘指数的参考代码:
对于indexc替换成如下的index_c:6 i0 J6 k0 Z. j( c3 ~5 H
--------------------------------------------------------------------------------* {4 H9 t2 M) d$ s- ^4 M8 V; K
index_sh_c:=1 w. G- p8 O3 N* @! R* j! x
if(STKTYPE=1,&1A0002$close&,+ F- h6 p7 w) V4 j
if(STKTYPE=2,&1A0003$close&,: H) F. t* c" A&&U5 C! d
if(STKTYPE=3,&1B0008$close&,indexc)));{对A股、B股及基金引用不同指数}
! i. d% N% Q, y# K' ^
index_sz_c:=
if(STKTYPE=1,&399002$close&,0 w8 c1 l" `& E% M1 ]8 K
if(STKTYPE=2,&399003$close&,
if(STKTYPE=3,&399305$close&,indexc)));
: _: f+ l# f) k, W+ W8 [
index_c:if(STRCMP(STKMARKET, 'SH')=0,index_sh_c,index_sz_c);
; U$ @# s0 t6 ], x- Y
--------------------------------------------------------------------------------
. O$ \, |0 \, d6 M! Z! J+ {; K" s
5 Q2 t, y$ M* ^9 V4 _0 E
以上代码仅考虑了A股、B股、基金,其它未作区分,可根据自己的需要进行修改。" ~& g# a- U. Y" j
对于indexo替换成如下的index_o:
8 R- B. p( c! N% O7 \2 }
--------------------------------------------------------------------------------index_sh_o:=" r- p) U/ U8 V* Z% R
if(STKTYPE=1,&1A0002$open&,& ^/ A( }9 y$ A! `. f. c
if(STKTYPE=2,&1A0003$open&,1 t. `' D7 Z- N: @8 ~
if(STKTYPE=3,&1B0008$open&,indexo)));
index_sz_o:=0 R, ^6 Y( M* C3 P, `" w& K8 \; \
if(STKTYPE=1,&399002$open&," _, u. z* Z: y0 h4 v
if(STKTYPE=2,&399003$open&,5 q2 x6 l7 Y( w) Y# g
if(STKTYPE=3,&399305$open&,indexo)));
index_o:if(STRCMP(STKMARKET, 'SH')=0,index_sh_o,index_sz_o);--------------------------------------------------------------------------------+ D, ], u: F5 R3 U3 u
对于indexh替换成如下的index_h:
--------------------------------------------------------------------------------
index_sh_h:=
if(STKTYPE=1,&1A0002$high&,* L' U1 m$ P0 ~8 u/ [
if(STKTYPE=2,&1A0003$high&,
if(STKTYPE=3,&1B0008$high&,indexh)));* H# x5 J% n% P( l" M: O! z
index_sz_h:=7 M7 r( b+ a( b3 |: p8 U- _
if(STKTYPE=1,&399002$high&,
if(STKTYPE=2,&399003$high&,
if(STKTYPE=3,&399305$high&,indexh)));
index_h:if(STRCMP(STKMARKET, 'SH')=0,index_sh_h,index_sz_h);5 W2 ?2 D( X1 V$ I3 _&&H& _
. N! Z6 ?&&I7 r8 e8 Y+ Y0 u
--------------------------------------------------------------------------------0 R7 c! V+ t1 R! J4 p&&m
对于indexl替换成如下的index_l:* F' E& B5 d( [6 M9 R# N, _* `
) ?) V) s" o( G. K! L) G) }! Z8 V
--------------------------------------------------------------------------------
index_sh_l:=' j&&@9 l" S' P; z3 g
if(STKTYPE=1,&1A0002$low&,6 N( w6 ]7 D1 u8 V0 t2 d6 ~
if(STKTYPE=2,&1A0003$low&,! {4 d" s+ |( R. O6 N
if(STKTYPE=3,&1B0008$low&,indexl)));
index_sz_l:=- _% v! U' z3 \0 f6 H3 {( P8 {6 R
if(STKTYPE=1,&399002$low&,
if(STKTYPE=2,&399003$low&,7 R! ]- j1 a- Z0 w
if(STKTYPE=3,&399305$low&,indexl)));8 W8 G2 Z+ `* f! {1 m
# L& F&&W6 L+ B' K9 j) L
index_l:if(STRCMP(STKMARKET, 'SH')=0,index_sh_l,index_sz_l);- U5 M% c( y) @# Y- @, y% L5 p
--------------------------------------------------------------------------------% \# n! b2 K% f6 c7 v7 g
, j( u! m# E7 V8 {2 U& X
对于indexa替换成如下的index_A:
7 ~1 y7 t" ?* T1 T/ C. V
8 v* G* r% N8 `6 V9 d5 X
--------------------------------------------------------------------------------$ q: |3 T2 C% E* A5 F
index_sh_A:=
if(STKTYPE=1,&1A0002$Amount&,
if(STKTYPE=2,&1A0003$Amount&,5 l9 P& q: \- V4 @* {
if(STKTYPE=3,&1B0008$Amount&,indexA)));. e5 u" H0 J5 k# `1 z: D9 z
index_sz_A:=
if(STKTYPE=1,&399002$Amount&,
if(STKTYPE=2,&399003$Amount&,
if(STKTYPE=3,&399305$Amount&,indexA)));& q, Z" g. Z7 a( G' k" O* ]
6 u- s1 S$ B8 T4 m
index_A:if(STRCMP(STKMARKET, 'SH')=0,index_sh_A,index_sz_A);5 ^0 v7 V% }5 [2 H2 {7 {
3 X0 r8 y: ]2 `# V' e* z3 ^&&K* V& ?
--------------------------------------------------------------------------------( I, @% {5 D3 A8 p. j* }- r
对于indexv替换成如下的index_V:) p# K$ P5 |" ]6 G
9 d+ ?/ W( ^6 V% y
1 A6 y4 J9 N5 \$ m
--------------------------------------------------------------------------------
index_sh_V:=
if(STKTYPE=1,&1A0002$Vol&,, U+ i) c8 S# a* p' O2 q0 V4 i
if(STKTYPE=2,&1A0003$Vol&,) r& B& a1 F* P0 T9 |* t
if(STKTYPE=3,&1B0008$Vol&,indexV)));
5 a5 n4 d" X* N. `
index_sz_V:=# Q3 q2 s4 n: R4 J% L
if(STKTYPE=1,&399002$Vol&,
if(STKTYPE=2,&399003$Vol&,
if(STKTYPE=3,&399305$Vol&,indexV)));6 d# o+ z) V7 v& A. E( l: G
index_V:if(STRCMP(STKMARKET, 'SH')=0,index_sh_V,index_sz_V);
--------------------------------------------------------------------------------
六、控制语句if...then...else示例; I0 N0 ]# B: \) N- O
通过参数N,控制调整均线数,代码参考如下:. p0 k9 {, ?; w! Y- {! i, O8 K
7 s" v. M9 q7 h
input.:p1(5,0,300),p2(10,0,300),p3(20,0,300),p4(30,0,300),n(4,1,4);{参数定义}( e# u2 g+ C1 n& Y
IF n&0 then MA1:MA(CLOSE,P1);{如果n&=1则输出ma1指标线}
IF n&1 then MA2:MA(CLOSE,P2);{如果n&=2则输出ma1指标线}8 B) J&&d& a, q1 `$ f# E9 g
IF n&2 then MA3:MA(CLOSE,P3);{如果n&=3则输出ma1指标线}8 _5 D) ^/ T7 B/ M4 l/ A) @7 u0 \5 g
IF n&3 then MA4:MA(CLOSE,P4);{如果n&=4则输出ma1指标线}
# P7 K& E/ ?; T0 f+ w5 O9 ~
由于目前IF cond THEN expr1 ELSE expr2 中条件cond暂时只能用常数,因此,可配合主要是参数、常数函数
例2:修改成交量公式VOL,当流通盘不为零且当前周期为日以上周期时,显示换手率,代码参考如下(仿此,大家绕过指标模组,可以自行设计,“绑定”到周期、券种等的公式)
VOL,VOLSTICK;
MA1:MA(VOL,M1);
MA2:MA(VOL,M2);
MA3:MA(VOL,M3);
if capital&0 and DATAPERIOD&=6 then 换手率:vol/
: d1 S( e2 B* ]0 S* n1 b
当切换到60分钟及以下周期,或者切换到大盘(此时流通盘=0),会发现“换手率”指标线、名称及数值都不显示。1 V* Z% h1 @4 J) `6 H; V: k( V
稍加改进,使用复合语句,可适用于任意周期:
例3,修改成交量公式,流通盘不为0时,显示换手率(60分钟及以下周期,计算当日最新的换手率),代码参考如下:
# h: |: R4 `6 ?* C+ t/ Y
9 M7 ~: o7 d5 N8 M3 S, N
# }8 o) h: Z0 p5 N&&p/ B
PHP代码:--------------------------------------------------------------------------------&&k; k0 L; u5 h* y$ A2 m" k# ^5 E
VOL,VOLSTICK;
MA1:MA(VOL,M1);
MA2:MA(VOL,M2);. h" C" y6 U- {3 n7 z7 s" {. D
MA3:MA(VOL,M3);9 D/ o- K9 p: Y
IF CAPITAL&0 then //如果换手率>0,则
IF DATATYPE&=6 then //如果周期为日及以上的较长周期,则
b:=VOL/CAPITAL*100
else //否则
begin //复合语句开始,即以下3条语句,视为1条语句,end表示复合语句结束
tj:=DAY&REF(DAY,1) or BARSSINCE(CLOSE)=0;7 [. a1 u! j" B: q) q. d&&h7 T
ts:=BARSLAST(tj)+1;& J+ a3 i! }- U
b:=SUM(VOL,ts)/CAPITAL*100;
换手率:b;--------------------------------------------------------------------------------/ t4 j0 \7 \+ d% }. ]0 _
修改或创建这个公式后,大家会发现,只要流通盘=0,则换手率指标线就不会被显示,例如切换到大盘观察。
; \: Q" Q- n) H/ r8 V- }- A
七、循环语句示例:移动平均线的N种写法
! r0 F. G; C2 E. Z: @7 a: g
移动平均线的N种写法(V3.5.30828 以上版本支持)
* B" \% X/ T! _/ q9 o2 w
+ p! V, P- g, o0 O: L% R
--------------------------------------------------------------------------------- q/ l) m1 V" }
INPUT.:n(5,1,300); //参数申明
VARIABLE:k=0; //变量申明
FOR i=0 TO n-1 DO$ i& t% \& C. x! ^
k:=k+ref(close,i); //把最近 n 天的收盘价累加
MA1:k/n; //实现MA(C,N)
///////////////////////////////////////////) t9 B: l1 R6 _
INPUT.:N(5,1,300); //参数申明
VARIABLE:i=0,k=0,j=0; //变量申明+ T7 N- i" \& \! c
VAR1:=C;7 _+ B0 Y+ C
FOR j=1 TO DATACOUNT DO3 S4 g. L( Z3 l/ \
IF j&=n THEN
WHILE i&n DO' G# Y0 n' ]4 u6 \
BEGIN7 _" B0 p" i# F
k:=k+VAR1[j-i];# E: O$ f9 x' H
i:=i+1;+ K/ b$ n- G7 @% W1 r- ^+ N( `# [
MA2[j]:k/n; //实现MA(C,N)
* R0 f& ]/ G( P* W+ H3 p8 w
///////////////////////////////////////////$ s+ g( M1 I&&x/ x8 X5 A# t
INPUT.:N(5,1,300); //参数申明& j% s&&f0 @' M. ?9 ^, @) b
VARIABLE:i=0,k=0,VAR1:=C; //变量申明1 a$ ?) ~; v( e1 t( }' W( X0 u&&|
FOR j=1 TO DATACOUNT DO
k:=k+VAR1[j];
IF j&=n THEN
IF j&n THEN0 t* I; K; d' G3 {
k:=k-VAR1[j-n];
MA3[j]:k/n; //实现MA(C,N)
END;5 ~7 a" }+ H2 f: S/ i
! M3 K: e# G4 s4 U' y2 l
/////////////////////////////; ~; x1 [* F, F( @
--------------------------------------------------------------------------------5 [% ^* G. I& ?8 p) L! H( Q, M
; k( [, k# z2 j" |5 E! s
* w4 C5 B' m" q( z' S
还有很多写法% p&&i, P! ?# N7 n$ B( U* N- l9 z/ I+ M
还可以只计算最后1个有效数值,比如用于提高预警速度,大家练习试试8 h$ k&&X) u+ k: m, R6 q6 p
//////////////////////////////////////////////////////////
南客再附上一段历史流通盘的代码:
//说明:本公式,无法计算增发、职工股上市等情形,公式原型为原子兄用VBS设计的代码: t" r2 q8 ^/ y
var1:=splitdata(1)+splitdata(2);- y3 H1 L& B$ w$ b% T, r
cap:=c;% }! o* z&&p0 o) p* W
cap[datacount]:=1;) D" F3 h. t&&x
for i=datacount downto 2 do cap[i-1]:=cap/(1+var1/10);0 B& o9 H; K* ]&&a3 b
capi:=cap*capital/100;% M( [) F" y: z, v) F&&R6 n" t' S&&c
历史流通盘∥万股:2 q) w' w3 A, w* Y( _
drawnumber(cap&ref(cap,1) or barscount(c)=1,capi,capi,0);4 J# q1 ^( I0 g. x4 g+ l2 k$ m3 @
. o9 }0 S$ D/ k, o
八、序列数据量
所属类别: 常数函数 参数数量: 0
$ _: t% D3 m2 n
序列数据量。) z: _( r1 u, r- K7 w
用法:, N* f) F4 w4 A& C
DATACOUNT,返回序列数据数量# g1 e, e9 g5 T8 ^0 p7 l6 g7 s
注意:该函数返回常数
  解说:以日周期为例,我们知道,个股的收盘价就是一个序列变量,每天都有一个数值,总共有很多个数值,到底有多少个数值?如果个股数据是完整的,数值的个数就是上市后总的有效交易天数(即K线的数量)。显然人工去点不现实,这里提供的函数,就是计算这个数据的。+ b0 q' P) ]+ z
  代码示例:
4 q$ O9 V. k" l6 I+ g6 ]& F0 y
K线数:6 v& w# s3 |4 W- w# u- ?2 L
②在飞狐新开发的公式系统中,序列变量可以用数组表示,比如:
fc:=4 n( {; w0 n8 ~& c6 ~, ]
定义了一个序列变量fc,它等于个股所有的收盘价。请看下面代码:
9 u* W' F4 ^0 [/ e0 g% Y
fc:=c;) G! ^* p&&M&&N, u&&b
第1天收盘价:fc[1];' H* g% P) n$ z2 y
最后1天收盘价:fc[datacount];1 Y! Z! B/ M# `4 y9 U5 M" N9 y
&&Q! o, O; q- I( ]0 z) H8 o, s
" C$ s8 e# ]" {% H; j, ?
  想想看1:如何表示第1根K线的日期(通常是上市的日期),如果想将股票按上市日期先后排序,这个公式会很有用。; }2 h! j&&k7 h6 g6 j&&L" y
  想想看2:编写一个选股公式,选出上市天数少于N的公式。8 m( r+ m# P" G& R9 m# k
与barscount的区别:显然,这是一个序列变量,随K线的位置不同而不同。而datacount是一个常量,不管在哪个K线的位置上,它都是同一个数值。& ?# d4 G, T5 Q" e% z* J) D
新增函数应用:如何遍历板块股票代码- W' X1 U5 J0 ?, Z&&Y8 j
PHP代码:--------------------------------------------------------------------------------; ~3 y) w: O. e
bk:='深圳A股';0 l% j. h& p) ]: y, h5 ^
variable:j=1,k=0,dm_len=0,lstr[6]='00000',blksum:=STKCOUNT(bk),dmstr[blksum]='';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
while j&=blksum do begin: @2 M4 T3 q) _; a) h
dm:=NumToStr(k,0);+ s) o4 p8 p& X&&k
dm_len:=strlen(dm);: _8 {&&q- h6 m3 s0 x
dm:=lstr[dm_len]+; Q+ V7 I7 m+ e8 b* S, |2 b% ^
if stkinblock(dm,bk) then begin. {; o$ r5 x% _! G7 S" q
dmstr[j]:=
& ]7 x0 y9 x# E# Z. ]' h
& _2 n) R&&o4 j) H
, [3 Q! x7 Q7 R6 t+ }, i
//以下是一些字符串函数及运算的综合应用, p0 T0 p* J. i" B5 D&&l
EXPLAIN(1,dmstr[1]); //在解盘中,输出深圳A股第1只股票的代码
EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称# F# w* d$ w: g, I; ~9 t
EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称
EXPLAIN(1,'深圳A股第4只股票的代码是:'+dmstr[4]);
EXPLAIN(1,dmstr[5]+'最后收盘价:'+numtostr(close,2));* `, B3 F) W% X$ Y, n" B$ ~
EXPLAIN(1,'深圳A股共有股票:'+numtostr(blksum,0)+'只');--------------------------------------------------------------------------------
  如果您有编程的功底,上面代码一看就明白,但对没有编程经验的狐友们来说就不容易了。下面尽量详细地对思路和公式代码做一些解说,并对代码进行适当扩展。. l! M# @% @/ }8 Y6 G8 B& s
  1、所谓遍历股票代码,就是能够访问某板块中所有的股票代码,如果连访问都不能实现,怎么做一些更加强大的诸如横向统计、排序的功能?
  2、上面的公式代码是以深圳A股板块为例,我们看看深圳A股的股票代码,它们都是很有规律的,0002、...、,请注意这些代码的特征:" L8 ]&&_; I( U- o- q
  ①股票代码要理解成字符串,而不是数值,如果是数值的话,股票代码就成了1、2、...、999、。
  ②这些代码如果转换成数值,大体集中在某个数的范围,如上面所示,深圳A股代码的数值目前都小于1896,代码的数值大多都是呈递增1的规律,少量有跳跃的情况,比如000040跳到0041不存在。
  因此,我们初步可以设计一个循环
&&N; J4 u&&b; s. s& ~2 n6 Q
0 J+ r4 O' y1 h9 R( b5 d8 Y- j
PHP代码:--------------------------------------------------------------------------------( i3 w: F5 I" x) H) N$ c6 [
while j&=1896 do
begin7 T& c1 |9 ^5 s% M4 e/ ~. R
--------------------------------------------------------------------------------1 B7 s# S1 g: @
  上面这段代码,是个循环,每次循环都执行一次由begin和end所包围起来的语句,这里只有一条语句即j:=j+1,目的让变量j从1每次循环都递增1,直到j=1896为止。&&F8 C6 K* c5 m- L* r& M
  j:=j+1这条赋值语句,初次接触的话不大好理解,大意是这样,右边的j比如现在等于2,这条语句是让右边的j现有的数值加上1,然后再送回到变量j之中,执行完这条语句后,j就由2递增1变成了等于3。9 C' `0 Y3 q: `, D( F0 D3 Y
  j:=j+1,看起来有点象计数器的功能吧?每循环一次,计数器就增加1,因此也可以称变量j为计数器(变量)。. |/ i( e. Z7 V9 i) d4 T. a
  好了,思路敏捷的狐友,马上就能想到,这个计数器会生成从0到1896总共1897个数值,如果进行转换,也就是把数值转换成字符串,则深圳A股所有的股票代码都包含在里面了。; u3 V% t% E/ M1 K# C7 t- E
  呵呵,的确是这样,因此我们设计下面一个稍加改进的循环,来逼近我们要完成的任务:! g&&L, Y; R( Z. M; p: P
6 `! F- ~* O5 x$ S+ N0 C7 l# e
PHP代码:--------------------------------------------------------------------------------
j:=0;% b&&b( K. g3 b# I) ^; Y
while j&=1896 do: E4 W4 f6 g) B& B, x7 K4 q
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数0
8 S4 C& V$ K8 K% f2 `
EXPLAIN(islastbar,dm); //当处在最后一根K线位置时,输出字符串dm的内容--------------------------------------------------------------------------------
# K4 V: y2 B3 t' ?9 x' a, K. y8 Y. K
  最后一行代码,是用解盘函数输出字符串变量dm的结果,我们可以在“解”中观察,不过这里由于dm是单值变量,不是序列变量,只能保存最后的一次结果,因此只能观察到结果是1896。
如果想观察其它的结果,只好改循环首语句,比如:
while j&=1 do
 大家可以发现这些结果,还有一点小问题,没有前导的0,即我们要的是01896,而不是1、1896这样的字符串,怎么办呢?
  给它们的前面加上0就可以了,但加上0的个数有讲究的,比如1在前面要加上5个0,1896前面只需加上2个0,很明显,要加的0的个数,等于6减字符串的字符个数。因此,设计公式代码如下:" R% D& @$ I0 W0 [
7 q# J" D3 I. [2 H: l) ^
PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';//定义一个数组lstr[6],共6个元素,并让所有6个元素初始都等于字符串'00000'
4 A6 b* E6 A# N&&r( m
//下面对字符串数组lstr[]第2至第6个元素重新进行赋值,以便巧妙应用
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
while j&=1896 do
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+ //由dm的长度,确定应该给dm的前面加上多少个字符0
j:=j+1;+ V8 R6 u9 n* X1 y8 Y
EXPLAIN(islastbar,dm); //当处在最后一根K线位置时,输出字符串dm的内容--------------------------------------------------------------------------------  对这行代码稍加解释:dm:=lstr[dm_len]+dm,如果某次循环右边的dm等于'19',则它的字符串长度为dm_len等于2,则这行代码此时等价于dm:=lstr[2]+dm,而lstr[2]等于'0000',结果就是在'19'的前面加上4个字符'0'即成了'000019',然后再把'000019'赋值给dm,于是左边的dm就等于'000019'3 X% J/ T3 O$ M$ m) F
&&y' S: U' X+ [' S&&s
  到此为止,我们只是实现了所生成的字符串,可以让深圳A股的代码全部被包含在其中,但还有大量的“废”字符串,我们要把没用的字符串过滤掉。取出我们真正需要的。  要用到的函数  ①stkinblock(dm,bk),函数注释:如果股票代码dm从属于板块bk,则函数返回数值1,否则返回数值0  ②条件控制语句IF cond THEN expr1 ELSE expr2,意思是:当满足 cond 条件的时候,执行语句 expr1,否则执行 expr2 语句  设计代码如下:PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';2 i4 C0 [- Q; f! S0 C
j:=0;9 z5 z3 ?, W5 T* I( l
bk:='深圳A股'; //bk赋值为字符串'深圳A股'
while j&=1896 do
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数0/ L2 E# x6 V1 c1 U
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len! N1 G0 W7 g! A5 S$ ^. X
dm:=lstr[dm_len]+ //由dm的长度,确定应该给dm的前面加上多少个字符06 R4 C) {6 C6 B/ ?- Z: Y
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句# U2 p0 f9 N2 e" b&&n
begin& O&&C, R$ b: ]" e5 \3 I
dm1:= //真正需要的股票代码是这里的dm13 @% n/ s/ N( ?% [/ l6 b2 K
6 I2 T7 S$ b5 j. C. @# L
j:=j+1;5 ^' X1 a5 U+ j& q
: k7 u. q% z3 x% s: F% R. O
EXPLAIN(islastbar,dm1); //当处在最后一根K线位置时,输出字符串dm1的内容--------------------------------------------------------------------------------
8 D, R% F7 q4 h- i% E
公式代码设计到这里似乎可以结束了,因为我们要的结果都可以生成了。其实还有改进的余地:  ①dm1只是个单值的字符串变量,它只能保存最后的结果,而不能保存所有的结果。这里考虑使用数组,数组可以自行定义很多个元素,让每个元素保存一个结果。  ②循环首的j&1896总觉得不对劲,不够智能化,比如将来“深圳A股”板块最后的代码不是0001896,则这段公式代码的结果就不对了。  针对以上问题,设计公式代码如下: PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';9 K0 E&&e&&p&&?7 d) z, N5 V/ `3 h
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0; //记录循环次数的计数器
k:=1; //记录股票代码的个数的计数器
bk:='深圳A股'; //bk赋值为字符串'深圳A股'& A3 J! d1 q&&D, `2 s% P& d6 ^&&^
blksum:=STKCOUNT(bk); //板块所包含证券数量1 \7 C9 v3 q7 X+ m4 T" c&&m
variable:dmstr[blksum]=''; //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空
while k&=blksum do //当计数器k&=blksum时,执行以下循环. V1 }. K* v8 Q
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数09 X4 s. O, W2 R6 y. l2 ]
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+ //由dm的长度,确定应该给dm的前面加上多少个字符0! A! @, f" S# r
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句
begin" \5 A" {4 w2 ?0 U
dmstr[k]:= //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中
k:=k+1; //记录找到的股票代码的个数
j:=j+1; //记录循环的次数1 Z2 X) ~8 {3 a7 s# V: C
. ?+ a7 E* x9 S% e7 L
EXPLAIN(islastbar,dmstr[1]); //当处在最后一根K线位置时,输出深圳A股第1只股票的代码--------------------------------------------------------------------------------1 Y&&_7 s' o8 S&&X: B7 @
" K, B8 e1 z- e
  有了以上公式,我们就可以把范围扩大,比如遍历'A股板块'的所有股票代码,很简单,只需改一条语句,即把 bk:='深圳A股' 改成 bk:='A股板块'。  公式代码如下(且慢执行,等下面的解说):PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';6 N9 T# _0 j! S
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0; //记录循环次数的计数器" S&&]4 s& M& S/ y
k:=1; //记录股票代码的个数的计数器& t5 [6 k: Y* W
bk:='A股板块'; //bk赋值为字符串'深圳A股'* a/ p7 Y3 V& v4 t" t5 r& }
blksum:=STKCOUNT(bk); //板块所包含证券数量* B8 M&&Q) l0 e. c
variable:dmstr[blksum]=''; //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空
while k&=blksum do //当计数器k&=blksum时,执行以下循环
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数0$ ?- H' o$ i. m* s
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+ //由dm的长度,确定应该给dm的前面加上多少个字符0
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句$ I( N3 E1 U9 `3 C9 d
begin6 v# w: O+ ~, L5 E5 E. U
dmstr[k]:= //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中7 l8 k2 K/ d: \& ~0 c3 p' e4 O7 O$ X
k:=k+1; //记录找到的股票代码的个数
, P! {4 T/ {( U- H1 ~
j:=j+1; //记录循环的次数
" i( H& i/ L& A2 s
EXPLAIN(islastbar,dmstr[1]); //当处在最后一根K线位置时,输出字符串深圳A股第1只股票的代码--------------------------------------------------------------------------------  假如你试图执行这段代码,你会发现好慢哦~~  为何会这样?因为从深圳A股切换到上海A股的股票代码时,是从1896跳跃到600000,中间有508104次空循环,这中间没有一个代码是真正的股票代码,因此可以这样来提高循环的执行效率,在公式代码中插入如下几行代码:if j=1896 then j:=599999;if j=600999  优化后的代码如下: PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';4 {/ E- Y+ |' x: t
j:=0; //记录循环次数的计数器6 ]0 F; |; p3 o$ D# V
k:=1; //记录股票代码的个数的计数器" T. Y/ G( a% j: Y
bk:='A股板块'; //bk赋值为字符串'深圳A股'&&^* I1 C# l, _0 u* W5 ~+ \
blksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[blksum]=''; //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空/ y&&U. u7 E& A$ l% l! C" V& V
while k&=blksum do //当计数器k&=blksum时,执行以下循环% \! ?0 C% V" k% F+ P
begin& X, Y( P8 N# C- W' s
dm:=NumToStr(j,0); //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+ //由dm的长度,确定应该给dm的前面加上多少个字符02 T( L9 F" x* W$ ^
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句5 K! w! _) |. o5 S# ]
begin2 p% Q" ^: P8 |
dmstr[k]:= //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中
k:=k+1; //记录找到的股票代码的个数
/ T4 Q1 q: F- a% r5 N, J# t
if j=1896 then j:=599999; //计数器j直接跳到到上海A股对应的最小代码
if j=600999 //如果记录到这个代码则跳出循环
j:=j+1; //记录循环的次数
3 b, r: H& A* o
$ z9 y/ j5 {7 c4 M) p' Z
//以下是一些字符串函数及运算的综合应用
EXPLAIN(1,dmstr[1]); //在解盘中,输出深圳A股第1只股票的代码% B. @: t9 F% }4 |& b5 e& B" b
EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称0 q+ D) I! z% I2 |
EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称$ H6 n2 N3 H- V; o/ {( w
EXPLAIN(1,'深圳A股第4只股票的代码是:'+dmstr[4]);* V. c" B) e2 b, S
EXPLAIN(1,dmstr[5]+'最后收盘价:'+numtostr(close,2));) N4 z6 j% D/ n+ J2 V( ?# z) s
EXPLAIN(1,'深圳A股共有股票:'+numtostr(blksum,0)+'只');--------------------------------------------------------------------------------  这行代码 if j=600999 then break 有什么用?以防万一,如果有人改了市场规则,把500001之类的股票计入上海A股的话,这里的循环会出不来的,会造成电脑死循环,飞狐长时间没有响应。 以上公式代码,只是个示例,效率不太高,如果能有个方法,直接给出板块中所有的股票代码,那就不需要这段公式代码。  给出这个示例,是想通过大致解剖整个公式代码的设计过程,让大家对循环、条件语句有个初步的认识。  最后,给大家个练习的机会:  1、修改上述代码,计算“A股板块”的成交量(这就是横向统计了)  2、以上公式代码,使用的是while循环,有办法改成fox循环吗?(当心,在修改代码的过程中,如果不慎的话,有可能造成死循环,对于win9x操作系统,也许很难退出,对于NT以上操作系统,可以强行退出)  3、高级问题:通过以上代码,可以做出横向排序,不过建议不要用代码本身来实现排序(会很慢的),应使用今天发布的新函数SORTPOS(X,D,N1,N2)来实现。  4、借用论坛的一个问题:ff:=barslast(date=1030107);周期:=5;VERTLInE(ff=0 or ff=周期*1 or ff=周期*2 or ff=周期*3 or ff=周期*4 or ff=周期*5or ff=周期*6 or ff=周期*7 or ff=周期*8 or ff=周期*9 or ff=周期*10or ff=周期*11 or ff=周期*12 or ff=周期*13 or ff=周期*14 or ff=周期*15or ff=周期*16 or ff=周期*17 or ff=周期*18 or ff=周期*19 or ff=周期*20or ff=周期*21 or ff=周期*22 or ff=周期*23 or ff=周期*24 or ff=周期*25or ff=周期*26 or ff=周期*27 or ff=周期*28 or ff=周期*29 or ff=周期*30or ff=周期*31 or ff=周期*32 or ff=周期*33 or ff=周期*34 or ff=周期*35or ff=周期*36 or ff=周期*37 or ff=周期*38 or ff=周期*39 or ff=周期*40),POInTDOT;  把以上代码,改成用循环表示。  5、一个数列定义如下:f[1]=1,f[2]=1,f[n]=f[n-1]+f[n-2],你能用循环计算出f[10]等于多少吗?这个数列是很有名的,许多股票预测都会用到它。  呵呵,具体我也记不住了,谁能告诉我它叫什么?
VBS入门续:条件语句
VBS入门续:条件语句+ ^7 b2 B5 F8 `. O8 z&&N&&j; _
8 ~' ~/ P4 t8 @6 o+ f8 m% n
条件语句是程序中的最基本、最重要的语句之一,今天通过一个简单实例学习条件语句。& W* B0 a4 i: s* O7 N% |' E&&`
问题:设计一个指标,除首日外,如果当日涨停(设10%为涨停),则公式输出1,否则输出0。9 l) u% P( c) e- R0 n
公式代码:+ c( b: Z* V7 B! D+ m: @&&G
fc:=c;2 s! ]8 J- ]! Y# c' ?: g2 }( w# ^
&%! ], ]5 i( v( P&&|+ Z7 u& L
vc=ffl.vardata(&fc&)" ?4 z6 G9 \8 w' Y# s- \3 p
vn=ffl.vardata(&n&)
vs=ffl.vardata(&js&)4 X4 ]- {( h& p+ O3 ^5 _4 P6 ?/ M
. s8 B; l1 W' W
last=ubound(vc)
vc(0)=07 K8 P/ o. G3 B8 x, K* j& p/ P8 A
for i=last to 1 step -1
if vc(i)&=vn*vc(i-1) then4 K' L+ t3 g% v! h8 l5 C
vc(i)=17 d&&W# y* N) g8 b7 a3 s2 Q* e9 M
end if# i$ A$ f) t# T4 H
next, L6 G" `! ~- T- B&&i; `. t' t8 K
ffl.vardata(&fc&)=vc
%&- W2 I* C7 M; U' e. h8 @
9 \- U! p) Y! q7 H) p$ A
7 h* o. \6 \* O) Z8 o
4 N: k& x&&l5 s& Z
VBS程序条件语句部分解释,参阅VBS帮助文件,如下代码为条件语句:
if vc(i)&=vn*vc(i-1) then ----如果...则,这里的条件是判断当日涨停否& A6 A3 H) q" c! C# p) C) W) P
vc(i)=1 ----vc(i)赋值16 I+ l9 ~" _+ j/ h* h* m
else ----否则
vc(i)=0 ----vc(i)赋值0
end if ----条件语句结束6 [' O$ f8 n5 f1 n5 T; E; p
飞狐基本函数简介之指标线形描述函数
这一组中的函数,全部不能单独使用,一定要和其它指标一起用才能发挥效力,因为它们都是描述其它指标的。
指标在主图或副图中的显示,主要分为棒状(柱状)和线状两种。这一组中的函数,全部是为了指挥指标的显示而设计的。. n1 Y1 d&&i5 U&&y; T; P% `' L
&&H- M6 h4 }# [9 r
掌握好这组函数,可以使指标输出显示丰富多彩,色彩缤纷。
, j& F; P" \% u0 e" M
使用的一般形式:
指标,描述函数1,描述函数2,...;5 i) K" u! l7 A! \3 Q3 i
一、$ k9 u% Y' d. l$ C" I6 z
函数: STICK
/ B" R* a8 U! T( J1 K- c
返回: 无$ a) I. U+ \6 `' K: T% o
8 J8 z3 N' O* x- f
说明: 画棒状线
( }1 y+ C% F5 \5 v- k
2 H: o7 F6 p! q( k
STICK的英文是棍、棒的意思。
一般指标的显示,在软件中默认是线状的。即如果不加指标线形描述函数,则指标以线状的形式输出显示。
如公式:5 G: Q# v: b8 O# b, P
1 k" T' t2 c" t5 t9 U% ]' |- D
0.98*L;{主图叠加}
0 Z$ ^. }# @&&R" j4 y( C
如加上棒状线的描述,则变成这样了:. T&&q6 `# A0 G' K+ a( }
0.98*L,STICK;{主图叠加}: x3 l2 N&&{% [6 {( R- |9 O7 b$ @
一般的信号,不加描述函数,会成箭头状。加了STICK之后,就成棒状了。5 m' G. [* C( p9 F: g
副图1公式:  C&REF(C,1) AND C&REF(C,2);- b2 i9 U: _: W+ T9 i
! J/ B* j( O
副图2公式:  C&REF(C,1) AND C&REF(C,2),STICK;
9 W&&l, E, z( W5 v0 \; ^
我个人调试公式的体会,还是副图1的显示清楚,因为可以看到连续信号的出现。8 |' q7 n$ \0 D8 u
& b" [; N2 T. U2 m. N! q" P/ }
二、3 ~- W6 |&&`% ]: r
函数: COLORSTICK
3 p/ F5 J2 g( n: F% w
说明: 以零轴为中心画彩色棒状线,零轴下为阴线颜色,零轴上为阳线颜色/ n! p: h5 b5 ?7 l7 X5 o
! P* K$ A3 i3 a3 G
&&x! b- N" o&&I0 L
这样零轴就如楚汉交界,泾渭分明了。8 @1 |' r$ G1 o* N8 L# `$ M
8 @' ~3 C7 E9 i) v7 a3 ]
C-REF(C,1),COLORSTICK;{副图指标}1 `9 X$ e' ?- Q3 @0 t# {" X
函数: LINESTICK
参数: 无8 {) M; {( \' L& F+ J
: O. \2 _6 M7 g&&Y$ @
返回: 无- b$ @1 x* H& |
- k9 w8 X) u! e# ^&&F" J
说明: 同时画棒状线与指标线。3 D6 r2 e( j- a& f$ V; `' [
/ ?5 x/ g" x( g2 @- t, |) ~
示例:9 o& a( T" i" D" B&&C' A
& |4 g) F3 D' s9 _1 |
LINE是线,STICK是棒,LINESTICK自然是线棒一起显示了。. p& t+ V' R
5 A+ ^* L4 n9 ]7 S3 H&&o- i
A:=C-REF(C,1);
A,LINESTICK;{不作说明,都认为是副图指标}
那么,即想显示指标线和棒状线,又想以零轴为中心显示彩色棒状线,怎么写公式呢?这样行吗?: W&&k, _8 M& x&&]3 i
&&_+ s1 k2 P4 z1 J
A:=C-REF(C,1);
5 Q, v- K; t. z- {" T&&C, }/ b
A,LINESTICK,COLORSTICK;
' D8 X4 D. P! ?4 c: M
各位可以自己试一下,结论是否定的。结果是只有彩色柱,没有指标线了。
, I+ ]5 @* @+ C3 R$ \( [
这样我们初步可以得出一个结论:在同一个指标中,有多个相同性质的描述函数时,软件只认最后一个描述函数。7 w- h* z5 C* L# u! j! q( |. B
即想显示指标线和棒状线,又想以零轴为中心显示彩色棒状线,可以用分开的两句语句来达成目标:&&\- y3 o3 y2 h# Y5 g% W&&U0 Y
/ b3 r&&^' h0 ~" S
A:=C-REF(C,1);5 M$ s8 B+ ]7 f/ {
A,LINESTICK;
. W9 j9 o" F! H) J
A,COLORSTICK;
函数: VOLSTICK
) v: f, F9 w4 M) H# i
参数: 无. J+ k/ Q9 W) g6 g9 e0 x
' O2 e) J2 w: U% n
说明: 画成交量柱状线。
4 x) ]4 r* X9 x" A
示例:" L# E: ?$ O+ v9 d! N
/ b7 p5 ^2 H- g! s- A0 s# a" j
这是专门为显示成交量设计的。" E8 A2 N2 \- r% K1 i2 |
股票软件不同,显示成交量的阴阳线是很不同的。总的来说,是根据价来定的,具体方法各有不同,很难说哪种方法就好了,哪种方法就不好了。8 y$ g&&_* _&&g' X! B0 {
$ s7 A6 ]- r- t' Y% z4 T
飞狐中的方法是这样的:今天的收盘价大于昨天的收盘价,显示阳柱;小于等于则显示阴柱。
五、7 ~. I4 s6 T' B* X. G&&a
. n6 `/ v9 V4 q3 B4 u, p' H
函数: CROSSDOT
* W( P&&~' `& p. H
返回: 无+ }- p. _0 V: p7 D
说明: 画叉状线或x状线。) d0 S3 L1 A0 h
- `: ]; O9 Z' V! i# {2 l& X8 U. H; F; n
示例:&&g0 n- V$ n0 v# a, q0 U& f/ h3 z
呵呵,叉状线和X状线有什么区别?应该是一样的吧。
- k. |) g* C* V0 D
CROSS是交叉,DOT是点。
. B5 R: P$ K9 |&&W$ M2 Y+ u1 T$ k
当指标线连续性较好时,显示交叉点比较顺眼。连续性不好时,看起来比较凌乱。$ Z; a&&c; i( z4 j5 B( v3 \7 u" b0 [: r
0.98*L,CROSSDOT;, _4 @6 A, e$ I&&Q
MA(C,30),CROSSDOT;{主图叠加}6 P/ N9 n8 \8 h" u+ U8 [' m
# L6 \* N/ i, d2 R
9 _/ u8 L; K( w+ B
函数: CIRCLEDOT
返回: 无1 K6 c, `% n. y0 d$ g0 j
' n0 H/ n% C& f' j! B# D
说明: 画小圆圈线0 a6 [0 A5 t$ T( j&&b4 G
. N; U&&B1 ^$ |* }( w) n
CIRCLE,圆圈。把CROSSDOT的X显示换成圆圈的样子。如果结合后面的COLOR函数一起用,可以画出不同颜色的圈圈,有时也比较实用。
七、, E2 g2 E; \- h- T
函数: POINTDOT
参数: 无6 o" g6 ^' Y/ i6 G6 Q3 n
( q$ p/ E2 Q0 l$ u8 [1 s2 \+ M$ X
返回: 无, k- a. c+ t( z( y
说明: 画点状线
# b+ E2 ^+ L- o&&o+ h
示例:7 A3 T( F. i8 w+ Y# x
POINT是点、加点的意思。这个点状线,在K线显示数不多的情况下,看起来太小了。正因如此,在K线显示数较多的情况下,就可以弥补CIRCLEDOT显示太大的缺陷。% u+ C- q$ }2 F0 n
0.98*L,CIRCLEDOT;
2 R2 U! ?0 t/ z2 h
MA(C,30),POINTDOT;{主图叠加}
+ O; b+ ]. ]2 t&&`& e&&m3 J% h8 N
函数: SHIFT
* D4 C6 ]# D. r* @( E
参数: 1--127
. u* I5 h8 l0 Z0 L( d. _% v
返回: 无& R&&}% n% w% f5 k: _! i' O/ e
9 t. N. R& g9 V$ L) y* |- W; z
说明: 指标线向后(向右)偏移x个周期
示例: ma1:ma(close,5),shift3;将MA1指标线向后偏移3个周期
SHIFT,移位。这是个飞狐比较有特色的的特色函数。
以以下公式为例子:% Z; m% a# C' \! P5 D: c. }2 @7 g0 a
" U7 P&&S6 Z4 d! W5 t
& n4 o$ q! o# l! q/ }* i
MA(C,30),POINTDOT,SHIFT5;{主图叠加}( P. h: m6 K) a&&G2 B( U
9 f) P- A8 o( F" I
要注意两个问题:7 B" S2 K&&\8 D6 G- e. _/ N
' |; p5 @. K$ O" ^) D( f
1、移位后的指标显示数值和不移位时的数值是不一样了。移位了五个时间单位,就显示五个时间单位之前的原数值。
+ M2 O6 }4 i4 ^&&D+ q
2、所移位的周期数,不能设为参数来调整。移位的最大周期数是127。如果写成SHIFT666,调试公式也能通过,不过软件自动取了127来移位。&&|4 I* E5 O. I, d: j
; [; y+ K4 W. R2 H: d$ P
另外说点题外话。; z1 E1 Y$ l5 L+ E6 V' H
8 f3 l3 Y3 Z. K5 d
用SHIFT10之后,当前日的指标显示的就是原10天前的指标数值。也就是说,把最近十天的K线数据,置之不理了。
& w9 J& X9 a6 Z) X&&~" p
从人的记忆的特征来看,越近发生的事,对目前的影响力就越大。这样看,用SHIFT就一无是处了,因为它抛弃了最近的数据,而去找较早的数据。
从混沌学牵一发就能动全身的观点看,SHIFT就大有道理了。佛教中说前世的因,后世的果,相差时间就长得不好说了。& l. I, g&&@* u9 F1 [0 }
9 n7 }&&R: F; }
这些讨论一般难得见到。易股论坛中有位台--湾的老兄,发了两帖,来讨论K线左移(或者说是指标线右移),我才留心了一下。巫山的朋友有体会的,不妨说说。
# h! f6 ]% E3 y+ |&&P
函数: LINETHICK
参数: 0--7. B: w! A+ f$ b4 M
返回: 无. X. A8 P* o9 A7 P& t1 K/ b
6 r. Z&&A% D&&C5 |. [/ W4 |
说明: 改变指标线粗细,LINETHICK0 表示不画出指标线,不影响坐标,但可在顶部显示数值。6 W3 X4 j5 `- M/ F, R
: P* C4 x& l&&d4 B3 _4 v
示例: ma1:ma(close,5),linethick3;
ma1:ma(close,5),linethick0;表示不画出ma1指标线,不影响坐标,但可在顶部显示ma1数值
4 K2 L( C* O$ a" U
THICK,厚的。LINETHICK就可以理解为线(棒)的粗细了。1 n# b. Z1 w6 o3 z9 {6 J
V,STICK,LINETHICKN;' ?" W: E1 y5 j
N分别取1、2、3、4、5、6、7,做七个副图公式。
3 H/ l7 q+ |( {4 }
这个N也不能做成参数调整的。
LINETHICK0是非常常用的,因为一个公式中指标一多,显示会很乱,把有些显示去掉,就用这一招。5 X' W3 `0 U: K9 j, J
有时会碰到相反的情况,指标线(柱)显示不多,而顶部数值的显示太多了,那么怎么画出指标线,而又在顶部不显示数值呢?
&&Y$ d" x: k( c- @: t" U
一般用STICKLINE(画柱),PARTLINE(画线)等绘图函数来解决。
* x4 z' W9 f+ u) |8 r. _
PARTLINE(1,MA(C,30));{主图叠加}& X( G- d# y' L4 {# h
! ~* E9 z5 J9 B" }
函数: COLOR
% k. d8 e2 J, h
参数: 000000--FFFFFF0 ]& T6 H/ e) L- J- n
" _( ]7 }$ d4 k8 B
返回: 无, r) E& R/ A4 }. V& ]
& G" J" ?# G8 m&&}3 I2 c
说明: 改变指标线颜色。
5 b# L7 w/ o. Q8 b5 S4 \
常用: 黑色:colorblack 红色:colorred 绿色:colorgreen 蓝色:colorblue
    白色:colorwhite 灰色:colorgray 黄色:coloryellow 青色:colorcyan
- ^* d/ p2 j) |. B7 o$ [
    晶红色:colormagenta 棕色:colorbrown( k9 z- O7 h$ }4 O0 N* T
示例: ma1:ma(close,5), 或 ma1:ma(close,5),colorff0000;
2 ~% w4 f. A7 H* M
附录: 238种常用颜色代码速查表( ?( f$ q3 ?8 e2 X* |
- m% L+ L0 [; _0 O! }
COLOR,颜色,色彩。是这组函数中最常用的一个。不但能定义指标线(柱)的颜色,而且能定义顶部指标文字的颜色--用LINETHICK0时也一样。
" A# Q/ ?* ^! L: q
颜色的种类应该够用了。至于各指标线(柱)之间的颜色搭配,实在是一种很艺术性的事。既要有美感,又要不触目惊心,我只能凭感觉挑选,其它也没有什么招数了。要是有学过美术的人来指点几招就好了。$ [# B* D# g, T! C
枫叶秋雨兄提供的“飞狐色彩值吸取器”,实在是好东西,给我们挑选颜色提供了很大的方便。( {( o1 X* {0 k9 I& I# o
飞狐基本函数简介之行情函数& B- X5 V% P: V" D, Z
这些行情函数所取得的数据,是我们所编写的公式的原材料。9 I7 F+ ~; Y6 {! C" R4 P5 h
- w' |- T( D) J
如果说公式是衣服,这些行情函数就是布。5 V: C: u* j1 Q2 Y# g6 c5 O* O1 b9 f
$ X2 u) X. S& m) a. W9 u& T, g&&g
有人会说做衣服不一定要布,野草树皮也可以做。对,一个公式中不一定非有行情函数不可,但总感觉透风,缺点什么。+ C7 L. W* l+ n( j0 k8 H
函数: OPEN
说明: 取得该周期开盘价,也可简写为 O.
$ H& H9 H/ ~" V, a3 w! e
函数: HIGH
说明: 取得该周期最高价,也可简写为 H.. E3 D% ?4 R&&e9 H( p
/ g8 Q/ F5 I/ L! i! O&&N
函数: LOW2 y7 i. u! V5 O0 B. z4 @0 Q
说明: 取得该周期最低价,也可简写为 L.( }+ E: K) C; l' b& {5 ]
函数: CLOSE9 d- e$ z( a" _, M
说明: 取得该周期收盘价,也可简写为 C.9 I1 j: f1 b& a6 ?$ K9 {, V: _9 U
* f* r, h9 |( ^5 I# S( f5 ]
OPEN,打开。HIGH,高度。LOW,低的。CLOSE,关闭、结束。
常言道,巧妇难为无米之炊。此四者,就是我们做价格指标的“米”了。不同周期的K线,均由此四者为原材料画出。
; ~, B- G9 K1 @' D
(有人说,家里的米没有味道,于是去割野菜,采野花,日子一长,又说还是家里的米能填饱肚子。)! Z) V2 L1 I+ b8 r& t$ Z
有人说,价、量、时、人是技术分析的四大要素,那么O、H、L、C便构成了“价”的四大要素。; q&&j4 D9 [) a&&p
3 p! b2 l4 [! n9 f/ m# k. W( s( P
道氏理论,主要关注的是长期趋势,所以,一般以CLOSE线为主要参考指标。所取前期高、低点,也是CLOSE线的高、低点。/ o* V- ?4 j, |5 `0 R. S& F
人的心理,常以成败论英雄。所以CLOSE作为一根K线中的“结局”,被视为价格四大要素中的最关键因素。此论似成通论,但有些短线炒手认为,OPEN要比CLOSE更重要。股市本是无定论的地方,仁者见仁,智者见智,故不敢多作妄论。+ N/ W) U% H&&T4 Z3 e
这里随便谈些本人对未来函数和未来数据的看法。关于未来也者,在较为经典的书上很少直接见到这种说法,只是在网上见得多了,便有了些想法,说出与大家共同探讨。
如图,一般带公式平台的股票软件,有“公式检测”这一项,用来判断公式中是否含有未来函数。! ^4 L/ d% N4 G8 r/ T
% @+ [* z: E" n- B5 Z
目前的信号的产生和保持,如果全依赖于之前的数据,则可认为产生信号的公式中,不含有未来函数和未来数据。" M8 g5 C# {; F6 W" k
8 Q% D& Q$ N2 j( J" b) c" T) u
目前的信号的产生和保持,如果部分依赖于之后的数据,则可认为产生信号的公式中,含有未来函数和未来数据。
! b1 d5 S8 u9 w( K, z&&{
换句话说,如果公式中产生的信号,随着行情的发展,信号永远不变,则此公式就绝无“未来”之嫌疑;信号可能要逃、要变,则此公式中就有“未来”。
0 z- S1 H&&F/ p: v# v+ O: ?
如果此定义成立,则可将“未来”分为两种情况:
" Y2 X5 D/ n) u
1、在一根K线(即时行情)中;
2、在多根K线(盘后)中。
+ [" w" N" c" ?% k
在第一种情况中,以即时行情中的当前日K线为例,除了O之外,其它H、L、C全有未来之嫌。因为在收盘之前,拉高、打压是司空见惯的事,谁也不能保证H、L不会创出当天的新高和新低,更不用说C了。比如日线周期公式“C&REF(C,1);”,前一分钟信号成立,后一分钟可能信号就不成立了。这样说的话,在日K中包括H、L、C的指标,就全有“未来”之嫌疑了。
8 U0 ?: A7 s0 M5 Q: Y4 Q( Y
还有就是引用进来的信号,比如引用了周K和月K指标,因为当前周K和月K还在变动之中,所以也是未来数据。. n$ K, a, s* f2 {$ }
6 F* I5 d- m1 `
在第二种情况中,因为在盘后,日K中的四大要素就没有未来之可能了。在多K线中,典型的未来函数有两个:BACKSET、ZIG。这两个未来函数到底未来到什么程度,到以后介绍时再说。就算在盘后,除了周五之外,引用的周K指标也是未来数据;除了在月末,引用的月K指标也是未来数据。
% z8 I, f( T' A1 F
9 T# H, n9 g/ a. a) _( S; P
这样说的话,到处是“未来”,我们何处适从?
, ?7 [. T* w7 E
实际上未来也者,并不是新问题,而是老问题,从有技术分析之日起,这个问题就存在了,只是在经典著作中,并不是以“未来”的字眼出现。
8 s( X: ?&&c6 c2 ^6 \
“我们所采取的交易风格越保守,那么,耐心地等待趋势反转的验证信号就越为重要。到底需要等待多久呢?这就得从风险与报偿两个方面来权衡。如果我们选择较为保守的交易风格,宁愿等待趋势反转的验证信号,那么,确实可能承担较少的风险;但是另一方面,我们从交易中取得的报偿也可能减少了。等到趋势反转信号得到确认的时候,获利的空间也许已经缩小了。”
(<日本蜡烛图技术>P.159)
所以说即时行情中的“未来”也一样,体现的是技术分析中最古老的一个问题。! ^: M4 I6 I; h7 Q$ ^
而多K线中的未来数据,是要好好注意的。如果在ZIG的低点买进,在ZIG的高点卖出,则是全世界最好的交易系统了--可惜是马后炮,因为当时谁也做不到这一点。但也不能说BACKSET、ZIG就一无是处了,有时甚至是不可或缺的。刀剑可能自伤,也可用于杀敌。只要我们熟悉了BACKSET和ZIG的本质,就可以了解它们“未来”到什么程度,拿来用也是不妨的。至于不熟悉的,还是少用为妙。
3 E+ i4 t: G- r2 Q* t3 v6 r
二、. I7 o1 k! I# J4 e- I
函数: VOL, G% L1 V1 ~, x- u% u& @
说明: 取得该周期成交量,也可简写为 V.( h6 X1 |* p&&Q9 U
3 f1 S% A) j$ l
函数: AMOUNT+ F/ D% j8 Z; w&&s
1 ]2 Y&&e# c$ i1 T% T&&t" J
参数: 无& D6 h6 f- J* L
# n. h/ K) i7 w" C- R
说明: 取得该周期成交额
: J: T: p! E2 c&&^8 v
VOLUME,量。AMOUNT,数量、总计。6 P; c' J0 A1 Y" ]$ @3 f( u
0 E5 P$ v&&F! T
成交量系统默认单位是手(一百股)。成交额系统默认单位是元(A股和基金是人民币、沪B股是美元、深B股是港元)。
成交量是仅次于价格的技术分析要素。成交额因为里面有价量因素,有些高手应用时喜欢用之代替成交量。1 c, S& i, D9 r$ x# n9 v) v
&&j7 P; ?& {+ ?1 x
成交金额万元:AMOUNT/10000,LINETHICK0;
成交量手:VOL,VOLSTICK;0 @1 D* R% I* I) y
流通盘万股:CAPITAL/100,LINETHICK0;
. p1 k7 u3 A" ~" A5 e
换手率:100*V/CAPITAL,LINETHICK0;
: d3 T! X3 @/ U9 z
/ T, ]9 _3 I# |6 h0 g) q: x+ s" V
( s: X6 @4 n8 }% {, d
三、: ~, V0 ~/ r: q1 ~: c3 A
函数: ADVANCE
参数: 无6 R5 N. P! M( H6 c0 }/ ^7 y
+ A$ B- p) }9 n. O' a0 N
说明: 取得该周期上涨家数。(本函数仅对大盘有效)。
参数: DECLINE
参数: 无1 M5 I6 i3 S* j5 G, K9 e4 P# B( K7 c
说明: 取得该周期下跌家数。(本函数仅对大盘有效)。* w1 X+ N1 ]5 t: s. c6 s* Z% v! C
ADVANCE,前进。DECLINE,下降。
用于上证指数和深圳成指。4 ?8 v, }: w&&Y) C1 H2 y- H. g- q
* s7 U# `/ c" ]& p: M/ u7 j
A:=ADVANCE-DECLINE;&&v6 m) Y; y' ?' F, ?. q
SUM(A,50);
9 {2 N$ s) {# P. J
这个线形状与指数C线有些不同,反映的是不加权的情况。" K) w# W: y8 Z* p9 o8 D1 ~
9 F&&D# w8 M% M( [
8 b9 {' \1 R0 J* n
+ I, W$ _! ^7 b
函数: BUYVOL% E+ V. E7 F( [. Q
* e6 V1 l3 j7 L( R8 F
说明: 取得主动性买单量。 当本笔成交为主动性买盘时,其数值等于成交量,否则为0. (本函数仅个股在分笔成交分析周期有效)2 W3 y: U8 \! u6 K0 ]
函数: SELLVOL
* Z- D& o: F9 E7 K: X
参数: 无! |5 E3 m# E. w" y! U% c0 j
3 u&&]/ T1 O&&R9 `# Z% t- T
说明: 取得主动性卖单量。当本笔成交为主动性卖盘时,其数值等于成交量,否则为0. (本函数仅个股在分笔成交分析周期有效)
BUY,买。SELL,卖。VOL,VOLUME,量。
在分笔成交分析周期中看:4 K3 v7 u# L' [: U8 P&&T* a: H
&&J" W4 ?$ K4 j
主动性买单量:BUYVOL;, w4 \# i/ C& o" c
主动性卖单量:SELLVOL;. `6 L( w4 J- t: `% [
之和:BUYVOL+SELLVOL;/ n% h1 U/ @&&V0 r" w, s
7 k' Y( b7 _- I: J&&l' ~
总成交量:V;
* I$ M9 j2 [, v&&D' g
两者之和必然为总成交量。所以说每笔之成交量,不是主动性买单量,就是主动性之卖单量。1 F3 f6 L3 n9 g+ W6 Y
1 R- l& m# L- G# f
主动性买单量代表多方的力量,主动将挂在卖盘档位的单子吃进,主动性卖单量则反之,代表的是空方的力量。
至于庄家对倒诱空诱多之动作,长期看另当别论,但在当时,确实也代表了多空之一方。
每日之SUM(BUYVOL,0)之类的数据,不能在其它周期中引用,要做成扩展数据才可。% V+ @+ J7 c! o0 |! n0 L, A& W) n
: L* Y: }) I, }9 C' n( [
* S( f, s' p) S+ G. E
. @0 j" o8 R. r. A
函数: ISBUYORDER( L# h8 }1 u0 e
&&u& i+ @( ~* i9 b
说明: 取得该成交是否为主动性买单。当本笔成交为主动性买盘时,返回1,否则为0. (本函数仅个股在分笔成交分析周期有效)' [9 `$ g+ z6 Y) t8 w
ORDER,定单。BUYORDER,买单(不是请客吃饭后的买单!)。
&&^0 D7 }" O: w2 R
在分笔成交分析周期中可以看到,任一笔成交的单子,不是主动买单,就是主动卖单。/ ~( x% D! G8 [; \0 v
主动买单:ISBUYORDER;
主动卖单:NOT(ISBUYORDER)*0.5;+ _$ o7 d0 u5 `- T/ q, q* b1 f0 z+ ?
9 [5 W9 _6 u! B2 x! l6 N' T
这也就是没有ISSELLORDER函数的原因,因为用NOT(ISBUYORDER)就可以取得相同功能。
, i6 {4 I6 A. {9 ~* N&&?: l, W
0 |( G+ Q1 d8 y2 `1 Y+ H
" `8 b( {2 C! O
! f# E( m0 M* P- Z* v1 @
函数: BIDPRICE(N)
: h" _4 N: C( |: @: X/ h4 z
参数: N取1--3,表示买盘档位。! R5 _* ^$ W5 ]$ P
+ `# A8 I+ V5 ^2 i* d
说明: 取得委买1--委买3价格。(本函数仅个股在分笔成交分析周期有效)
示例: BIDPRICE(1)% \7 w$ _% p! Y( P
    表示最高叫买价。
函数: BIDVOL(N)- H3 g% W) M2 N6 [&&`; O) m% w
参数: N取1--3,表示买盘档位。
说明: 取得委买1--委买3量。(本函数仅个股在分笔成交分析周期有效)
+ J9 ]- |" w# o
示例: BIDVOL(1)! ^/ N6 o, V) J/ |
! y3 q/ L+ ]. u8 f6 l
    表示最高叫买量。
9 g9 T+ C3 v0 j
BID,出价、投标,这里是买进报价的意思。PRICE,价格。4 ]4 p1 P5 y+ {6 v0 E$ ^9 w* C8 d
有人可能会说:图中不是有委买8的单子么?呵呵,那是推算出来的,撤单了亦未可知。. O: S! {- \( C# r. a$ O9 ?. U
" x0 v4 Z&&Y; b$ a* `5 w6 O
/ p+ _0 B4 z' A/ B! H) U" m# x
&&J' n8 J( Z/ x- m% Q6 K
: w2 w+ g0 V" a% M9 M&&~
函数: ASKPRICE(N); k5 t/ t0 Y+ k
. S$ L5 ]6 L2 R' F' Z& {
参数: N取1--3,表示卖盘档位。
说明: 取得委卖1--委卖3价格。(本函数仅个股在分笔成交分析周期有效)
示例: ASKPRICE(1)
* I- d5 k. L; J" \+ t
表示最低叫卖价。3 @( i" U3 o2 ^+ R. Z! t, S
3 B& s! q- P: o# x+ p
函数: ASKVOL(N)
参数: N取1--3,表示卖盘档位。9 V. q' h1 G4 n
! c" s$ G' f" z+ B
说明: 取得委买1--委买3量。(本函数仅个股在分笔成交分析周期有效): l/ A4 X- H8 H/ r6 b
示例: ASKVOL(1)+ASKVOL(2)+ASKVOL(3)
) \9 h" N: }* T! b' u&&O
表示三档卖盘量总和。
ASK,询问、要求,这里是卖出报价的意思。
副图公式一:; T, x8 L! [" M2 S: i
9 S, S1 _8 I1 f8 F' s6 u5 U" k5 r
委买总量:BIDVOL(1)+BIDVOL(2)+BIDVOL(3);
委卖总量:ASKVOL(1)+ASKVOL(2)+ASKVOL(3);- q, k- E8 z" m. X
副图公式二:0 P' ]2 J2 O( W9 n, j8 L& x6 b
卖一买一空档:ASKPRICE(1)-BIDPRICE(1);
5 z1 F4 n4 }) D1 ^. N- d/ ^
编仅个股在分笔成交分析周期有效的公式时要注意,编好了之后,公式的“禁用周期”就自动设置为如图的样子。
6 _( x/ d! g8 ]2 q- a
如果以后要把这个公式修改为其它周期的公式时,不可忘记把“禁用周期”中的设置改过来,否则公式指标输出会没有显示。6 u2 d- R) K4 ^: }+ r
飞狐基本函数简介之绘图函数
这组函数的功能是在主图或副图上设定条件输出图象、图标、直线、文字、数字、指标线、指标柱等,全部可以单独使用。, @&&X* l- Y; {6 O$ B
2 U# m&&L4 F2 H$ C3 l7 N
个人感觉,飞狐的强大功能,在此组函数中有淋漓尽致的发挥。无论在表面(美感),还是实质(提高工作效率)上,都有良好表现。$ B4 N: O% Y. q) a- L$ Q
毫无例外的是,这组函数中,都带有COND。CONDITION,条件,状态。COND在这里可作为条件理解。
为了能找到合适的COND,用于举例子,请允许我先介绍一组概念。
高点:在2N+1根K线中,中间这根K线的H,要大于等于左右N根K线的H。在N+1根K线中,有等高点出现,取最先出现的。
* ^- D6 A. \' N- o: j
低点:在2N+1根K线中,中间这根K线的L,要小于等于左右N根K线的L。在N+1根K线中,有等低点出现,取最先出现的。7 O5 U5 x: g- S
5 D: P0 i9 p+ u6 i% O
峰点:高点和低点,合称为峰点。& c! n5 v7 m3 S+ {$ t
$ _" w8 p: J- x: x% S1 k
(这个定义,意合于技术分析的老祖宗道氏:“只要平均指数的最高点超过了前期的最高点,它就处于牛市时期;当最低点低于前期的最低点时,它处于熊市时期。”这里我们撇开向上、向下分形和分形峰状点等概念,以免把概念复杂化。)
也为了不让公式一来就过于复杂,我们先取N为2来做公式。简介到后面,可以看到,N是可以作为峰点公式的参数进行调整的。* G. |9 {' q0 K
&&A- `+ _" ]; ^8 s4 r$ }# l
公式名称:FENG2
公式说明:供引用2 X/ g" ~$ D$ `) M6 R7 g4 U* |
&&@( u/ _* F! R7 T1 U$ T: `. G& E
公式内容:' |3 }; \9 w3 p4 H
{峰点参数暂定为2}
A:=REF(H,2);{中间K线的最高价}% Z7 U6 ]2 O3 }, s
. E1 z: H, k1 ?# i# v2 h1 a
B:=A&=REF(H,4) AND A&=REF(H,3) AND A&=REF(H,1) AND A&=H;{中间K线的最高价大于等于两边共四根K线的最高价}8 o8 I2 o3 [( Y7 ]&&l
( b- G6 S- W5 B+ h7 ?; @
D:=BACKSET(B,3);{将当前位置和之前2个周期的数值设为1}: c+ U/ D* j+ {
HD:FILTER(D,2);{找到高点后,过滤掉其后2周期内可能出现的等高点。输出高点}
A2:=REF(L,2);{中间K线的最低价}
B2:=A2&=REF(L,4) AND A2&=REF(L,3) AND A2&=REF(L,1) AND A2&=L;{中间K线的最低价小于等于两边共四根K线的最低价}. P, K8 W" U&&\
! |! v2 F1 {5 Q0 T7 h
D2:=BACKSET(B2,3);{将当前位置和之前2个周期的数值设为1}
LD:FILTER(D2,2);{找到低点后,过滤掉其后2周期内可能出现的等低点。输出低点}
7 i1 g& w0 D# ~. k& c& O
{后面有些例子,就从这个公式中引用信号。}
5 b5 F7 U$ b# v&&H% N
函数: DRAWICON, Z3 E7 S8 ?+ m" a
- w! a- F9 ~* H
7 _: M&&j! _4 J# b
用法: DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE号图标。- J7 f# J& p1 J. s+ z# \
1 _2 E! M$ S( Q) D
说明: 在图形上绘制小图标,其中TYPE可选7种图标,编码为1-7(1-3为小脸,4、5为上下箭头,6、7为红绿小旗)。TYPE为    字符串时可显示用户自制BMP图。5 n1 M) d6 }" `6 ~" N6 c& s: _3 A
6 o- I6 [. l" l5 s4 A
示例: DRAWICON(CLOSE&OPEN,LOW,1);表示当收阳时在最低价位置画1号图# O- [0 t0 L+ P/ q/ `6 ^
    DRAWICON(C&O,L,'MyBMP')表示当收阳时在最低价位置画FmlDLL子目录下的自制图标MyBMP.BMP
2 V' `9 B) c( e
1、COND条件,一般是指判断的结果,不是0就是1。如用其它数据,大于等于1的,条件满足;小于1,条件就不满足。5 _) M3 v2 o) Z: d+ \
% N6 J, v2 F5 g* t# e
2、TYPE图标,现在已经有12种,用下面的公式,在000829上可以全部显示出来。当TYPE取大于等于12的数时,都显示黄球。
& f8 }9 K) q+ T; [, Y( l8 z4 ?
当TYPE取0时,显示的是笑脸(这个公式中没有做进去,自己可以试一下)。
&&X) p: u4 t# a* `, J$ W* _1 K) J
B:=&FENG2.HD&;' r' [. L2 n
D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);
A:=D&REF(D,1);# K* S5 ?- z3 a# c
8 J9 ?+ [5 P' n$ d' j
DRAWICON(REF(A,1),1.05*H,1);0 v7 t4 R) z&&~: @6 X
DRAWICON(REF(A,2),1.05*H,2);
DRAWICON(REF(A,3),1.05*H,3);
DRAWICON(REF(A,4),1.05*H,4);
DRAWICON(REF(A,5),1.05*H,5);+ D/ \4 X# x! r3 X1 {* d
6 d! s& t3 {& I! S
DRAWICON(REF(A,6),1.05*H,6);
# t/ H4 h" }/ @+ o
DRAWICON(REF(A,7),1.05*H,7);
' U% b6 p/ o# C/ U+ t( Q
DRAWICON(REF(A,8),1.05*H,8);
DRAWICON(REF(A,9),1.05*H,9);
DRAWICON(REF(A,10),1.05*H,10);
2 r1 G- e/ B# g2 }8 s8 M1 Q
DRAWICON(REF(A,11),1.05*H,11);# v1 j9 g. |! B& L1 j8 P3 k
DRAWICON(REF(A,12),1.05*H,12);
DRAWICON(REF(A,13),1.05*H,13);
DRAWICON(REF(A,14),1.05*H,100);{主图叠加}
当红球和绿球连续显示时,立体感会强一些。8 t& @2 {+ K' X& @
DRAWICON(C&=MA(C,30),MA(C,30),10);
DRAWICON(C&MA(C,30),MA(C,30),11);{主图叠加}
3、PRICE是用于定位图标的位置的。一般用1.01*H,或者0.99*L等。现在可用ALIGN(0-5)指定对齐位置。
用这个公式来试(主图叠加)$ i& V&&t/ Q6 G( o! T8 f
! ^2 ]4 f# X; y! C
B:=&FENG2.HD&;
# [" A: d8 u/ J) W7 b
D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);9 f7 G+ Q# @' l
A:=D&REF(D,1);
% r&&c' m: ^4 E7 `) `' G9 @
E:=REF(H,1);&&l' M' x# X9 j0 l. F
DRAWICON(A,E,10),ALIGN0;
0 O& n5 F7 y" X' N/ \; u4 m8 K. T
DRAWICON(A,E,11),ALIGN1;, @" X* B0 m. j
DRAWICON(A,E,12),ALIGN2;
DRAWICON(A,E,3),ALIGN3;&&v4 N5 y0 q, m, e* L3 n
/ O' G* {6 P$ T&&q
DRAWICON(A,E,4),ALIGN4;$ D& W8 i, }- R; e# P
' l7 P4 q* w3 _; P) U* ~3 V
DRAWICON(A,E,5),ALIGN5;
( b6 X# t1 d: e" M: o
可以初步得出结论:$ w& b% C- q2 M' q. Y+ k
ALIGN0:信号出现在PRICE的正中;3 i1 w( V" W&&D% F
! X7 C* p3 w8 m8 c& ]' r
ALIGN1:信号出现在PRICE下边(十分靠近);# S3 G. _3 b$ J4 K9 Y) y
3 q, D5 E0 d&&f1 z2 |% m
ALIGN2:信号出现在PRICE上边(十分靠近);* R) ~% X& V" l9 E8 H6 y3 L7 J, ?, N
# o7 v# V) i4 i/ Q6 U. ~
ALIGN3:信号出现在主图的中间;6 z% \) X% [; B) e" F
: L1 V) \6 P4 w3 N1 n* F* f&&x; I2 j
ALIGN4:信号出现在主图的最上边;1 N&&H$ U9 x% F! J+ _0 c2 f& \
" D; l+ A# v$ U
ALIGN5:信号出现在主图的最下边;
在高低点上作图标,可以使高低点更明确了。: j& f$ _6 e* L! `4 J% V7 v) G
% Q4 C" _1 ?1 O) [
A:=&FENG2.LD&;3 `/ I/ l! C' i- s5 F! b) T
3 _+ u8 D0 S8 F
B:=&FENG2.HD&;2 z6 _. Z6 x: c* e9 h7 j
- ]4 q7 E; [, Y) O( `. l8 A
DRAWICON(A,L,11),ALIGN1;
8 m9 M) e! ^&&E7 f! m
DRAWICON(B,H,10),ALIGN2;{主图叠加}
! q: k8 K4 L8 }4 ?+ Y+ s' b&&k1 |
! D2 @& M) S% c" l7 T; u
4、可以自由调用MyBMP.BMP图到显示位置,大大增强了输出的效果。你只要看到好看的图,可以随时抓拍过来,做成BMP文件,放到FmlDLL子目录下,就可以调用了。8 y% F7 M# [6 W8 O6 h* G
A:=&FENG2.LD&;& i2 O+ H! ]" s* u9 |, R3 `: x
B:=&FENG2.HD&;
DRAWICON(A,L,'PIG'),ALIGN1;
DRAWICON(B,H,'PIG'),ALIGN2;{主图叠加。如果你没有PIG.BMP文件,则不可显示。}1 H3 U& e, H( P# u+ u7 W" o
% L. p9 q5 @( a& d5 ]4 Q
$ W3 t9 F4 I. F; |
DRAWICON(1,MA(C,5),'S28');' C$ g( T8 _( t
4 [/ k. R8 [* u8 g( s2 O
DRAWICON(1,MA(C,10),'S31');
DRAWICON(1,MA(C,20),'S14');, l3 O( ?1 m5 K5 N* K( z5 M
1 W& x! L3 p0 P& d" ~7 F
DRAWICON(1,MA(C,30),'S25');{主图叠加。如果你想要这个公式有显示,可到楼下下载,解压缩到FmlDLL子目录下}
内有40个不同颜色的小球。
二、&&R3 k2 x* K' B6 }: j
函数: DRAWLINE4 q3 h& q) p$ ?. Y$ Q; b/ l. b
2 t# x- i! m& G3 N/ J1 `
参数: 无$ v9 a0 [9 M3 T
% u* H+ |6 _* [: |0 z9 X6 p
用法: DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND),当COND1条件满足时,在PRICE1位置画直线起点,当COND2条件满足时,在PRICE2位置画直线终点,EXPAND为延长类型。
% Q( M1 v: W' W/ x5 M
说明: 在图形上绘制直线段。, U! k/ C8 Z1 v" o
示例: DRAWILINE(HIGH&=HHV(HIGH,20),HIGH,LOW&=LLV(LOW,20),LOW,1);表示在创20天新高与创20天新低之间画直线并且向右延长。
4 E2 y5 G3 j2 J
DRAWLINE是唯一一个一句里面用到两个COND的绘图函数。因为它需要两个点来决定一直线。
# y6 }# V1 T5 l. p* \
COND1相当于指定K线位置(横坐标),PRICE1相当于是指定价位(纵坐标),这样一个点在平面上的位置就决定了。) l2 d1 l4 A8 a( K3 ]) v9 v
DRAWLINE是从第一点画到第二点的,即有起点与终点的顺序关系:第一点出现的时间,要在第二点之前。否则线是画不出来的。
&&]4 V& T* b8 v5 J1 ^6 W. z
EXPAND,扩张、发展,这里是延伸的意思吧。一般取0,不延长;取1,延长。实际上是取大于等于1的数就延长,小于1就不延长。
&&r0 `5 U# J7 [6 S: r! e
DRAWLINE目前支持POINTDOT、LINETHICK、COLOR、SHIFT这四个描述函数。
举个例子吧。
A:=&FENG2.LD&;' |& O6 a/ R1 @8 X! R
) v) k8 N% I. J& O* K4 p
B:=&FENG2.HD&;/ c* q) S/ q. h* W4 R+ ]
3 @6 \7 b5 D# N$ T
DRAWICON(A,L,11),ALIGN1;! n* t) B4 t3 k/ u6 w$ r$ f. Q; u1 l
- J/ C# V5 ~9 Y" H; `( Q
DRAWICON(B,H,10),ALIGN2;$ N/ [$ J- ]8 O& ?$ l) b
D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);
E:=D&REF(D,1);
" Q+ l- N1 E! _. g" _
F:=BACKSET(E,REF(BARSLAST(B),1)+2);
G:=F&REF(F,1);
7 X% m: P8 V3 f
DRAWLINE(G,H,E,H,1),pointdot,linethick1,{主图叠加}/ a) D6 r9 h1 T( _) d5 o
" G&&g& x, c2 d& v: d
0 J&&S& h8 z2 y
7 @. b$ r) H5 h& D' h$ e0 }7 v5 ^
这根线有些趋势线的意思了。由于趋势线的主观性颇强,只有多设参数才能满足多数人的要求,以后有机会再作介绍。
DRAWLINE画出的线,应该比手工画出的线精确一些。(DRAWLINE画线的灵敏度,要比手工画线低,所以说DRAWLINE画出的线精确,就未必对。)
* P( J* ~/ P: O' u+ p9 a6 v
主要用于画斜线,水平线我们一般可以另想办法。因为在图中显示直线,并非DRAWLINE的“专利”。
比如:) u* D: r2 S5 n* r$ j% `
# ~: P" @6 D6 \& l: w
A:=&FENG2.LD&;
B:=&FENG2.HD&;
D:=BACKSET(ISLASTPERIOD,BARSLAST(A)+1);
* D+ S/ Z) P0 {# v! N3 r5 \
E:=D&REF(D,1);
F:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);% a' O; g7 Q# \3 @
G:=F&REF(F,1);
7 u% {: `&&Y&&P; O/ w
前高:REF(H,BARSLAST(G));' z7 c6 o&&B: c. h% x&&A0 [* a/ X
6 S* A$ ?5 {$ p8 S7 M7 h1 z$ q! p
前低:REF(L,BARSLAST(E));{主图叠加}* a7 J1 D8 n&&^0 L
4 a& x7 J/ w. Q" O/ q2 F/ w* a
8 l- H/ \3 N) p, Z
这里出个“难题”吧:
怎么在主图上画一根直线?直线的高度是今天收盘价。就是这个样子的:* Z$ L! y&&_& S7 x* O+ b0 ~: U
7 a&&P+ C7 b: `" l4 l% a
6 c: h: x( s* R
三、/ l! @# i3 {. M! w. M. \& }! }; |
8 x, j0 T6 t3 q5 e1 p
函数: DRAWTEXT8 n7 P4 y2 @1 d
0 [* e) x" D2 N) J6 l
用法: DRAWTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置书写文字TEXT,可显示多行文本,用&\&换行。
6 r: H( o1 X0 F, n& q7 p
说明: 在图形上显示文字。
示例: DRAWTEXT(CLOSE/OPEN&1.08,LOW,'大阳线');表示当日涨幅大于8%时在最低价位置显示'大阳线'字样。% M* r4 X7 E* C* }- h
DRAWTEXT(CLOSE/OPEN&1.08,LOW,'好呀\大涨啦');可显示多行文本,用&\&换行;
3 H; w5 I1 t: N( k
在某些满足条件的地方直接显示文字或字符,比显示图标要更直观一些。&&j* z5 r! Y0 t' t&&I6 D
此函数可以用ALIGN来定位水平位置。而ALIGN用在DRAWICON上定位的是高低的位置。
+ Y6 H8 l7 V9 g. E. p
从下面例子可以看到,ALIGN(0~2)定义水平位置的意义:, C. S2 h0 h+ h' U+ T/ j1 G
ALIGN0:居中;
ALIGN1:偏右;
7 s0 ?( c9 W&&T&&j; f4 ^+ ]& @" v
ALIGN2:偏左。
也可以用SHIFT函数进行向右水平移位。
4 W: B* P5 u
所显示的文字或字符,可以用COLOR函数来定义颜色。至于文字的大小,则采用系统默认的大小,在此函数中无法定义。' Q$ q( L+ H8 h# _0 V5 ]5 w
此函数单独使用有其用

我要回帖

更多关于 数据线多少钱一根 的文章

 

随机推荐