加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转帖】飞狐股票代码遍历和横向排序的源码

(2011-01-22 19:49:04)
标签:

飞狐

股票代码遍历

横向排序

横向统计

股票

分类: 股票软件
飞狐怎么样进行板块股票代码遍历:

bk:='A股板块'; //bk赋值为字符串'A股板块'
stksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[stksum]='';  //定义一个字符串数组用于记录股票代码,元素个数为stksum,初始值为空
for k=1 to stksum do  //以下循环,循环计数器k从1开始每次递增1,直到stksum
begin
    dm:=stkfromblk(bk,k);//板块bk中第k只证券的证券代码,赋值到字符串变量dm
    dmstr[k]:=dm;  //股票代码,记录到字符串数组dmstr的第k个元素中
end;

//以下是一些字符串函数及运算的综合应用
EXPLAIN(1,dmstr[1]);  //在解盘中,输出深圳A股第1只股票的代码
EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称
EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称
EXPLAIN(1,bk+'第4只股票的代码是:'+dmstr[4]);
EXPLAIN(1,stkname+'最后收盘价:'+numtostr(close,2));
EXPLAIN(1,bk+'共有股票:'+numtostr(stksum,0)+'只');

飞狐怎么样进行横向排序:
//此飞狐公式输出结果,请在解盘中查看,由于大量引用了其它指标,因此运算时间会稍长

bk:='A股板块'; //bk赋值为字符串'A股板块'
yygs:='macd.diff';//引用的指标,此处可修改为引用其它的指标

stksum:=STKCOUNT(bk); //板块所包含证券数量
dcount:=datacount; //K线图上,最后一根K线的位置
variable:dmstr[stksum]='',var_px[stksum]=0,var_indi[stksum]=0;  //定义一个字符串数组用于记录股票代码,元素个数为stksum,初始值为空
for k=1 to stksum do  //以下循环,循环计数器k从1开始每次递增1,直到stksum
begin
    dm:=stkfromblk(bk,k);//板块bk中第k只证券的证券代码,赋值到字符串变量dm
    dmstr[k]:=dm;  //股票代码,记录到字符串数组dmstr的第k个元素中
    temp1:=stkindi(dm,yygs,0,-1);  //引用其它个股的指标
    var_px[k]:=temp1[dcount];  //记录最后一个周期的指标值,此处可以使用参数,以便得到其它周期的排序
    var_indi[k]:=temp1[dcount];  //同上,但准备用于记录排序后的位置
end;

Num1:=sortpos(var_indi,1,1,stksum);  //计算排序后,按大小排列的位置
dm_max1:=var_indi[1];  //最大值的对应位置
dm_max2:=var_indi[2];  //次大值的对应位置
dm_max3:=var_indi[3];
dm_max4:=var_indi[4];
dm_max5:=var_indi[5];
dm_max6:=var_indi[6];
dm_min1:=var_indi[stksum];  //最小值的对应位置
dm_min2:=var_indi[stksum-1];

max1:=var_px[dm_max1];
max2:=var_px[dm_max2];
max3:=var_px[dm_max3];
max4:=var_px[dm_max4];
max5:=var_px[dm_max5];
max6:=var_px[dm_max6];
min1:=var_px[dm_min1];
min2:=var_px[dm_min2];

explain(islastbar,yygs+'前6名:'),colorred;
EXPLAINex(islastbar,'1:'+dmstr[dm_max1]+STKNAMEEX(dmstr[dm_max1])+':',max1,2,0),colorred;
EXPLAINex(islastbar,'2:'+dmstr[dm_max2]+STKNAMEEX(dmstr[dm_max2])+':',max2,2,0),colorred;
EXPLAINex(islastbar,'3:'+dmstr[dm_max3]+STKNAMEEX(dmstr[dm_max3])+':',max3,2,0),colorred;
EXPLAINex(islastbar,'4:'+dmstr[dm_max4]+STKNAMEEX(dmstr[dm_max4])+':',max4,2,0),colorred;
EXPLAINex(islastbar,'5:'+dmstr[dm_max5]+STKNAMEEX(dmstr[dm_max5])+':',max5,2,0),colorred;
EXPLAINex(islastbar,'6:'+dmstr[dm_max6]+STKNAMEEX(dmstr[dm_max6])+':',max6,2,1),colorred;

explain(islastbar,yygs+'后2名:'),colorgreen;
EXPLAINex(islastbar,'2:'+dmstr[dm_min2]+STKNAMEEX(dmstr[dm_min2])+':',min2,2,0),colorgreen;
EXPLAINex(islastbar,'1:'+dmstr[dm_min1]+STKNAMEEX(dmstr[dm_min1])+':',min1,2,0),colorgreen;

这里给出的代码示例,请下载飞狐0916测试版后使用,否则将会出现语法等错误。
  从上面代码示例可以看出,板块股票代码的遍历是基础,有了这个横向遍历,就可以实现横向排序、横向统计。
  上面未给出横向统计的示例,大家可以参照上面示例,根据自己的需要进行设计。
  几个关键函数:stkfromblk(),sortpos(),可进入公式编辑器,查看函数注释。
  飞狐的循环、条件控制语句,可以任意访问的数据,将给处理问题带来极大的方便。
  下面,再给一段代码,是飞狐利用循环、判断语句,设计一个鬼变脸的公式代码:

sensitivy:=-c;
direction:=c;
towero:=o;
towerc:=c;
fc:=c;
i:=2;
while i<=datacount do begin
  if towerc[i]>towero[i] and not(between(sensitivy[i],towero[i],towerc[i])) then
    direction[i]:=1;
  else if towerc[i]<towero[i] and not(between(sensitivy[i],towero[i],towerc[i])) then
         direction[i]:=0;
       else direction[i]:=direction[i-1];
  if not(between(sensitivy[i-1],towero[i-1],towerc[i-1])) then begin
    towero[i]:=towerc[i-1];towerc[i]:=fc[i];
    sensitivy[i]:=towero[i-1];
  end else begin
    towero[i]:=towerc[i-1];towerc[i]:=fc[i];
    sensitivy[i]:=sensitivy[i-1];
  end;
  i:=i+1;
end;
tj:=between(sensitivy,towero,towerc);
stickline(tj,max(towero,towerc),sensitivy,7,0), colorred;
stickline(tj,min(towero,towerc),sensitivy,7,0), colorgreen;
stickline(sensitivy<towerc and not(tj),towero,towerc,7,0), colorred;
stickline(sensitivy>towerc and not(tj),towero,towerc,7,0), colorgreen;
stickline((towerc=towero or sensitivy=towerc) and direction=1,towero,towerc,7,0),colorred;
stickline((towerc=towero or sensitivy=towerc) and direction=0,towero,towerc,7,0),colorgreen;

 

-----------------------------------------------------------------------------------------------
贴个东西,看不懂。。。。。
“飞狐软件一个很好的功能,可在盘中即时进行横向统计。
可惜如果计算的股票太多,速度较慢,飞狐软件现在与分析家一样的遭遇,看来已不可能在计算速度上有所改进,十分遗憾!

代码:
引用公式:
001
c1:c;
........................................................................................
bk:='自选股'; {设定横向统计范围}
s:=STKCOUNT(bk); {取得横向统计证券数量}
variable:dm[s]='';{定义s个字符串数组用于记录股票代码,初始值为空}
∑:=0*c;{定义∑用于记录横向统计的总和,初始值为0}
for i=1 to s do begin {以下循环,循环计数器i从1开始每次递增1,直到s}
    dm1:=stkfromblk(bk,i);{取bk中第i只证券的证券代码,赋值到字符串变量dm1}
    dm:=dm1;{将证券代码记录到字符串数组dm的第i个元素中}
    cc:=stkindi(dm
,'001.C1',0,DATAPERIOD);{引用个股的指标}
    for j=LBOUND(cc) to datacount do {循环计算,从个股的最小下标开始到最后一天}
    ∑[j]:∑[j]+cc[j];{取得个股指标的横向统计总和}
END;
横向统计总和:∑[DATACOUNT];{最后K线处的横向统计总和}”
 
--------------------------------------------------------------------------------------------
阿姆斯指數(ARMSINDEX,AI) 的设立{繁体字,大家凑合着看,内容还是不错}   AI 的目的在確認股票任一時候的上漲是否帶量上揚,是下跌股票平均成交張數對上漲股票平均成交張數的比率,用以衡量相對成交量。主要是用於研判股市的超買或超賣現象。 定義 AI最初是用來做當沖的技術工具,它結合了漲跌家數和漲跌成交量的變化,是一種單一的指標,通常被稱為TRIN( 短線操作指數→Short Term Trading Index ),用以顯示上漲或下跌股票所呈現的不正常巨額成交量。 公式 AI = (上漲家數 / 下跌家數) / {上漲成交股數(張數) / 下跌成交股數(張數)} 應用 雪磲悒垂D常低迷時,AI值會大於1,因為下跌股票的成交量較大,相反的,當股市處於漲勢時,AI值小於1通常當10日AI超過1.2時為超買區;當10日AI低於0.8時為超賣區。 優缺點 AI的用途在於當作整體股市的超買超賣區的研判,其數值的變動方向與速度,通常較AI指數本身的絕對值更重要。 AI可視為市場壓力的長期指標,可以確定股市是處於多頭或空頭,並確認任一時間作多或放空的風險高低。 可使用相當長期的移動平均AI線來消除假買賣訊號,同時又能掌握訊號的即時性,所以,AI可以作為短期及長期的研判工具。 受到成交張數佔整體比率過大的個股影響,而導致這些類股漲跌影響AI值的變化相當大,對AI研判功能有相當影響。 AI採用移動平均的平滑化過程,使AI衡量相對成交量的功能受到扭曲。 AI僅以當日收盤價為判斷正負值的依據,若股價開高走低或開低走高時,卻仍以上漲或下跌成交張數為計算基礎,則無法顯示出真正的成交數量。故應以淨下跌(上影線)力道修正上漲張數的比例;以淨上漲(下影線)力道修正下跌張數的比例。 AI結合漲跌成交量及漲跌家數,以明確數值是否小於1,研判股市處於多頭或空頭趨勢。 公式需要横向统计的支持,所以现在可以实现了 [上涨家数:c>ref(c,1),{ESTDATA(1)} 下跌家数:cREF(C,1),VOL,0),{ESTDATA(3)} 下涨股数:IF(C< td>

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有