ocean

来源:百度文库 编辑:神马文学网 时间:2024/04/27 00:21:08
vbs公式编写入门 一、VBS教程:
  请参阅Vbs55.chm,里面已经论述得非常详细了,该文件在飞狐的主页提供了下载。
  提示:在飞狐中使用VBS,大多涉及的是数值运算,先熟悉一些常用语句、基本概念就可以应用了,如循环语句、条件语句,赋值、数组、过程等概念。
  VBS较飞狐的强大之处,在于循环,可以解决飞狐公式系统所无法处理的问题,但也有个致使的弱点,由于是VBS解释性语言,因此运行慢,利用VBS设计公式时,应注意使用高效率的算法。
二、VBS接口:
  VBS与飞狐公式系统之间,必须通过接口才能交换数据,也就是说,公式系统中的数据不能直接被VBS处理,同样VBS中运行的结果,也不能直接被公式系统使用。
  VBS目前提供的接口有:
  1、FFL.VarData("变量名"),传递常量、数组变量数据。
  2、FFL.VarStartIndex("变量名"),传递数组变量有效数值起始位置,若脚本处理过程中不改变变量有效数值起始位,则无须调用。
  3、FFL.MsgBox(strMsg),strMsg为字符串变量或常量。
  4、FFL.Color("变量名"),用于指定指标输出变量的颜色;(可程序实现渐变色)。
  5、FFL.LineThick("变量名"),用于指定指标输出变量的线宽;(可程序实现线宽)。
三、利用VBS设计公式:
  VBS脚本语句,必须使用“<%”和“%>”框起来,以便让公式系统能够识别,在一个指标公式中,可以多次调用VBS脚本,即可以有多组由“<%、%>”框起来的脚本。
  在公式系统中无法实现而需要调用VBS的实例通常较复杂,为了学习VBS,所举的实例从简单开始,大多可以在原公式系统中实现。
  以下通过具体实例,解剖一下VBS设计的公式。
  例一:设计一个公式,计算收盘价对应的涨停价位(设涨停板为10%)
  代码如下:
spj:=close;
<%
vspj=ffl.vardata("spj")
last=ubound(vspj)
for i=0 to last
vspj(i)=vspj(i)*1.1
next
ffl.vardata("spj")=vspj
%>
vspj
  以下详细解释公式代码:
  1、spj:=close--定义一个序列变量spj,其值等于序列收盘价(对日K线而言,等于从上市首日直到最后一天的一系列收盘价,故名为序列变量)。
  接着是一段由“<%”、“%>”框起来的VBS程序代码。
  2、vspj=ffl.vardata("spj")--将序列变量spj传递到VBS中,其数据放入数组vpj中。有关数组概念,可参阅Vbs55.chm。
  这里对数组稍加解释,VBS中的数组,是由一系列元素构成的,本例中为Vspj(0)、vspj(1)......,这里括号中的0、1......等称为数组的下标,VBS数组下标是从0开始的。其中vbs(0)是数组的第一个元素,对应序列变量的第一个值(即首日收盘价),依此类推,直到最后一个。那么,数组vspj的最后一个元素是哪个?这很重要,因为在涉及相关计算时必须知道。看下一行代码:
  3、last=ubound(vspj)--ubound(vspj)是什么东东?查一下Vbs55.chm中的函数部分,原来是计算数组vspj最大下标。本行语句,是把vspj的最大下标的值赋给变量last,也就是说last此后就等于vspj的最大下标值。
  4、接着的三行语句是VBS的循环,此处的for...... nexe语句的VBS循环语句中的一种(其余几种循环语句,请自查Vbs55.chm文件中的解说)。循环是起什么作用的?我们来看看,要计算从第一天到最后一天的涨停价位,如果逐条语句来写,大致如下:
  vspj(0)=vspj(0)*1.1--把第一天的收盘价vspj(0)乘以1.1,再赋回给vspj(0),运算后vspj(0)就不再等于收盘价,而是原价的涨停价位。
  vspj(1)=vspj(1)*1.1--vspj(1)运算后等于第二天的涨停价位。
  vspj(2)=vspj(2)*1.1
? ?.
? ?.
? ?.
? ?vspj(last)=vspj(last)*1.1--最后一天的运算。
一共须写last+1条语句,显然效率太低了。这些语句用循环语句来写,只须3条就行了,即
  for i=0 to last
  ??vspj(i)=vspj(i)*1.1
  next
解释如下:
  for i=0 to last--循环首,让循环变量i从1开始,每次增加递增1循环执行“循环体”,直到i=last时跳出循环。
  vspj(i)=vspj(i)*1.1--循环体,这里只有一条语句,可以有多条语句。当i=0时,执行的是vspj(0)=vspj(0)*1.1,随着i的递增,最后一次执行的是vspj(last)=vspj(last)*1.1,共执行last+1次。
  next--循环尾,与for配套对应,执行到此处时,跳回到对应的循环首for重新执行。当for语句判断i=last+1时,for语句将会跳出循环,即跳过next,到next的下一条语句。
  5、执行完循环后,我们需要的所有运算都完成了,接着要做的是把VBS中的结果送回到飞狐公式系统中。
  ffl.vardata("spj")=vspj--按字面上通俗理解,本行意思是通过接口ffl.vardata(),让飞狐公式系统中的序列变量spj等于vbs中的数组vspj,即VBS中的数据传递到飞狐公式系统。
  6、飞狐公式系统输出spj,注意此时的spj已经不等于原来的序列收盘价了。
  通过以上解释,你明白了吗?可以实际动手操作了,不过别急,由于飞狐的VBS尚存在BUG,上述代码运行时会出现非法操作,问题出在vspj(i)=vspj(i)*1.1,直接乘以1.1有问题,待以后飞狐完善后就没问题啦,目前需把代码稍作修改,如下:
spj:=close;
n=1.1;
<%
vspj=ffl.vardata("spj")
'下面一行,把公式系统中的常量n传到VBS中的变量vn
vn=ffl.vardata("n")
last=ubound(vspj)
for i=0 to last
vspj(i)=vspj(i)*vn
next
ffl.vardata("spj")=vspj
%>
vspj
  上述代码中,有一行以半角单引号“'”开始的VBS注释语句,注释语句不会被执行,仅起注解代码的作用。编写公式时,应养成在适当代码处,插入注释语句的良好习惯。以免将来自己也看不懂代码,更谈不上修改、改进公式代码。
  现在开始动手输入并建立以上公式。在飞狐的界面中按Shift+W,调出管理面板,鼠标点正文的“公式”,调出公式管理面板,鼠标右击“技术指标”,建一个新的公式组“VBS学习”,然后鼠标右击“VBS学习”新建一个公式,公式名称“VBS公式1”,然后逐行输入上述公式代码,不要偷懒哟(来个“复制”、“粘贴”最轻松了,但学完就忘),一行一行的从键盘输入,校对无误后,点“确定”保存公式,随便调一个股票的K线,然后键盘输入vbs即从键盘精灵中发现刚才的公式名称,选中它,就可看到你的公式输出的曲线。
  练习:
  1、用vbs设计一个公式,输出收盘价相对应的跌停价位。
  2、用vbs设计一个公式,计算每日的换手率,提示:利用公式系统中的流通盘函数CAPITAL或FINANCE(N),注意这两个函数的单位不同。 ? ?三关价,小数点四舍五入的写法(VBScript)

取三关价的(今上关)为例,将小数点第三位四舍五入:

将下列公式建立在:技术指标 ( ●主图叠加 ○主图 )

公式名称:PPP1

AA:=REF(H,1);
BB:=REF(L,1);
CC:=AA+(AA-BB);
DD:=0.382;



今上关舍小数:CC;

EE:=REF(H,1);
FF:=REF(L,1);

今上关:EE+(EE-FF)*0.382;


公式说明:

1.在飞狐内嵌入VBScript,是用

2.Round:VBScript的函数,传回一个被四舍五入到某个小数位的数值。
--(这里取2个小数位)

3.ubound:VBScript的函数,传回的是某一维空间的上界。
--(这里是指二维空间横坐标)
--(VA、VB、VC这三个变数的横坐标,就是交易日时间坐标)

4.LT为一变数:将ubound( )指定给LT,而成为代表交易日时间坐标的上界。

5.下面算式,代表第四个和最后一个交易日的算式。故共有(LT+1)个算式。
--
--
VC(3)= Round ( VA(3)+(VA(3)-VB(3) )*VD ,2 )
--
--
VC(LT)= Round ( VA(LT)+(VA(LT)-VB(LT) )*VD ,2 )

将这些算式依时间数列连成曲线,就是(今上关舍小数:CC)。

6.ffl.vardata的功用是:

a.从飞狐调入变数进入VBScript。
b.再把变数从VBScript调回飞狐
例2
取三关价的(今上关)为例,将小数点第三位四舍五入:
动态行情最新价突破-->上关价时,跳出一个讯息方块:

将下列公式建立在:技术指标 ( ●主图叠加 ○主图 )

公式名称:PPP2

AA:=REF(H,1);
BB:=REF(L,1);
CC:=AA+(AA-BB);
DD:=0.382;
EE:=DYNAINFO(7);

今上关:AA+(AA-BB)*0.382;



今上关舍小数:CC;

公式说明:

1.飞狐功能选单之
工具→数据管理→导入数据→按(日线生成行情报价)钮

2.DYNAINFO(7):动态行情表,最新(为一常数)

3.Msgbox:VBScript的函数,将讯息显示在跳出的对话方块中。

4.Cstr:VBScript的函数,强制将执行结果以String(字串)资料型态表示。
下面是一个无关痛痒的公式,只是为了输出VBScript的运算结果:

将下列公式建立在:技术指标 ( ●主图叠加 ○主图 )

公式名称:PPP5

CC:CLOSE;


公式说明:

1.Dim:在VBScript内可用Dim来宣告变数。

2.进入博庭飞狐下载中心下载VBScript语言参考手册。
下面公式为FoxTrader.chm帮助系统档内的范例公式:

当( P日收盘均价 / P ) > 2 时,跳出一个VBScrip讯息方块。

将下列公式建立在:技术指标 ( ○主图叠加 ●主图 )

公式名称:PPP6

参数Param( P、5、2、60 )

AA:MA( Close , P );
BB:=2;



本公式说明:

1.FFL.VarStartIndex 的功用:
--将飞狐变数的横坐标有效数值起始位置调入给VBScrip。
--再把VBScrip变数的横坐标有效数值起始位置调回飞狐

2.FT为一常数:将AA变数的横坐标有效数值起始位置指定给FT。
--在参数Param( P、5、2、60 )的情况下,
--AA变数的横坐标有效数值起始位置=4
利用简易一维阵列排序程式设计来求算:
( 大陆人称阵列为数组 )

3周期内收盘价最高值→用 VBScript 的写法。

将下列公式建立在:技术指标 ( ○主图 ●主图叠加 )

公式名称:PPP10

AA:Close;

BB:HHV( Close , 3 );



本公式说明:以后再补充
( CLOSE + 2 + 8 ),用二维阵列的写法。

记得南客先生,有在网上写过,用到二维阵列的公式,
在这里举个简单的例子,当作入门:

将下列公式建立在:技术指标 ( ●主图 ○主图叠加 )

公式名称:PPP13

AA:CLOSE + 2 + 8;
BB:CLOSE;
CC:CLOSE; ? ? ? ? 请原子朋友谅解,为了主题醒目,南客改了贴子主题。
原主题为:“版主及懂Delphi的朋友请进!(飞狐DLL编制之DELPHI版本)”



我现在正在学用delphi编写dll公式,以下是一个公式,没有什么功能,
只是当有输入参数时,指标显示为1.我在delphi下编译通过,但在飞狐
中引用却什么显示都没有。到底是什么原因,请大家帮我看看:
library dllfnc;
type
//分析周期
DATA_TYPE=
? ?? ?? ?(
? ?? ?? ? TICK_DATA,? ?? ?? ?? ? //分笔成交
? ?? ?? ? MIN1_DATA,? ?? ?? ?? ? //1分钟线
? ?? ?? ? MIN5_DATA,? ?? ?? ?? ? //5分钟线
? ?? ?? ? MIN15_DATA,? ?? ?? ?? ?//15分钟线
? ?? ?? ? MIN30_DATA,? ?? ?? ?? ?//30分钟线
? ?? ?? ? MIN60_DATA,? ?? ?? ?? ?//60分钟线
? ?? ?? ? DAY_DATA,? ?? ?? ?? ???//日线
? ?? ?? ? WEEK_DATA,? ?? ?? ?? ? //周线
? ?? ?? ? MONTH_DATA,? ?? ?? ?? ?//月线
? ?? ?? ? MULTI_DATA? ?? ?? ?? ? //多日线
? ?? ?? ? );
//基本数据
tagSTKDATA = packed record
? ?? ?? ? m_time:? ???integer;? ?//时间,UCT
? ?? ?? ? m_fOpen:? ? single;? ? //开盘
? ?? ?? ? m_fHigh:? ? single;? ? //最高
? ?? ?? ? m_fLow:? ???single;? ? //最低
? ?? ?? ? m_fClose:? ?single;? ? //收盘
? ?? ?? ? m_fVolume:??single;? ? //成交量
? ?? ?? ? m_fAmount:??single;? ? //成交额
? ?? ?? ? m_wAdvance: word;? ?? ?//上涨家数(仅大盘有效)
? ?? ?? ? m_wDecline: word;? ?? ?//下跌家数(仅大盘有效)
end;
//分笔成交数据的买卖盘
tagMMP = packed record
? ?m_fBuyPrice:??array of single;? ? //买1--买3价
? ?m_fBuyVol:? ? array of single;? ? //买1--买3量
? ?m_fSellPrice: array of single;? ? //卖1--卖3价
? ?m_fSellVol:? ?array of single;? ? //卖1--卖3量
end;
//扩展数据,用于描述分笔成交数据的买卖盘
tagSTKDATAEx = packed record
? ?? ?case integer of
? ?? ?0: (mmp: tagMMP);
? ?? ?1: (m_fDataEx: array of single);? ?//保留
end;
//财务数据顺序(m_pfFinData内容)
tagFinData = packed record
? ? Zgb:? ???Single;??//0? ? 总股本(万股)
? ? Gjg:? ???Single;??//1? ? 国家股
? ? Fqrg:? ? Single;??//2? ? 发起人法人股
? ? Frg:? ???Single;??//3? ? 法人股
? ? LtBg:? ? Single;??//4? ? B股
? ? LtHg:? ? Single;??//5? ? H股
? ? LtAg:? ? Single;??//6? ? 流通A股
? ? Zgg:? ???Single;??//7? ? 职工股
? ? A2zpg:? ?Single;??//8? ? A2转配股
? ? Zzc:? ???Single;??//9? ? 总资产(千元)
? ? Ldzc:? ? Single;??//10? ?流动资产
? ? Gdzc:? ? Single;??//11? ?固定资产
? ? Wxzc:? ? Single;??//12? ?无形资产
? ? Cqtz:? ? Single;??//13? ?长期投资
? ? Ldfz:? ? Single;??//14? ?流动负债
? ? Cqfz:? ? Single;??//15? ?长期负债
? ? Zbgjj:? ?Single;??//16? ?资本公积金
? ? Mggjj:? ?Single;??//17? ?每股公积金
? ? Gdqy:? ? Single;??//18? ?股东权益
? ? Zysr:? ? Single;??//19? ?主营收入
? ? Zyly:? ? Single;??//20? ?主营利润,
? ? Qtly:? ? Single;??//21? ?其他利润
? ? Yyly:? ? Single;??//22? ?营业利润
? ? Tzsy:? ? Single;??//23? ?投资收益
? ? Btsr:? ? Single;??//24? ?补贴收入
? ? Yywsz:? ?Single;??//25? ?营业外收支
? ? Snsytz:??Single;??//26? ?上年损益调整
? ? Lyze:? ? Single;??//27? ?利润总额
? ? Shly:? ? Single;??//28? ?税后利润
? ? Jly:? ???Single;??//29? ?净利润
? ? Wfply:? ?Single;??//30? ?未分配利润
? ? Mgwfp:? ?Single;??//31? ?每股未分配
? ? Mgsy:? ? Single;??//32? ?每股收益
? ? Mgjzc:? ?Single;??//33? ?每股净资产
? ? Tzmgjzc: Single;??//34? ?调整每股净资
? ? Gdqyb:? ?Single;??//35? ?股东权益比,
? ? Jzsyl:? ?Single;??//36? ?净资收益率
end;
//函数数据结构
tagCALCINFO = packed record
? ?? ?m_dwSize:? ?? ?? ?? ?? ? LongWord;//结构大小
? ?? ?m_dwVersion:? ?? ?? ?? ? LongWord;//调用软件版本(V2.10 : 0x210)
? ?? ?m_dwSerial:? ?? ?? ?? ???LongWord;//调用软件序列号
? ?? ?m_strStkLabel:? ?? ?? ?? ???Pchar;//股票代码
? ?? ?m_bIndex:? ?? ?? ?? ?? ? longBOOL;//大盘
? ?? ?m_nNumData:? ?? ?? ?? ?? ?integer;//数据数量(pData,pDataEx,pResultBuf数据数量)
? ?? ?m_pData:? ?? ?array of tagSTKDATA;//常规数据,注意:当m_nNumData==0时可能为 NULL
? ?? ?m_pDataEx:??array of tagSTKDATAEx;//扩展数据,分笔成交买卖盘,注意:可能为 NULL
? ?? ?m_nParam1Start:? ?? ?? ???integer;//参数1有效位置
? ?? ?m_pfParam1:? ?? ?? ?? ?? ?^single;//调用参数1
? ?? ?m_pfParam2:? ?? ?? ?? ?? ?^single;//调用参数2
? ?? ?m_pfParam3:? ?? ?? ?? ?? ?^single;//调用参数3
? ?? ?m_pfParam4:? ?? ?? ?? ?? ?^single;//调用参数3
? ?? ?m_pResultBuf:? ???array of single;//结果缓冲区
? ?? ?m_dataType:? ?? ?? ?? ? DATA_TYPE;//数据类型
? ?? ?m_pfFinData:? ?? ?? ???tagFinData;//财务数据
end;
function FNC1(pData:tagCalcinfo):Single;stdcall;
begin
if (pData.m_pfParam1 <> nil) and (pData.m_pfParam2 <> nil) then
??result:=1;
else
??result:=0;}
end;
exports
FNC1;
end.
? ? ? foxtrader支持delphi的DLL公式 ,下面是例子。

(一)dllfnc.dpr
library dllfnc;
uses
Unit1 in 'Unit1.pas';
{$E *.dll}
{$R *.RES}
exports
FNC1;
begin
end.
(二) unit1.pas
unit Unit1;
interface
uses
SysUtils,
Classes;
type
//分析周期
DATA_TYPE=
(
TICK_DATA, //分笔成交
MIN1_DATA, //1分钟线
MIN5_DATA, //5分钟线
MIN15_DATA, //15分钟线
MIN30_DATA, //30分钟线
MIN60_DATA, //60分钟线
DAY_DATA, //日线
WEEK_DATA, //周线
MONTH_DATA, //月线
MULTI_DATA //多日线
);
//基本数据
tagSTKDATA = packed record
m_time: integer; //时间,UCT
m_fOpen: single; //开盘
m_fHigh: single; //最高
m_fLow: single; //最低
m_fClose: single; //收盘
m_fVolume: single; //成交量
m_fAmount: single; //成交额
m_wAdvance: word; //上涨家数(仅大盘有效)
m_wDecline: word; //下跌家数(仅大盘有效)
end;
//分笔成交数据的买卖盘
tagMMP = packed record
m_fBuyPrice: array[1..3] of single; //买1--买3价
m_fBuyVol: array[1..3] of single; //买1--买3量
m_fSellPrice: array[1..3] of single; //卖1--卖3价
m_fSellVol: array[1..3] of single; //卖1--卖3量
end;
//扩展数据,用于描述分笔成交数据的买卖盘
tagSTKDATAEx = packed record
case integer of
0: (mmp: tagMMP);
1: (m_fDataEx: array[1..12] of single); //保留
end;
//财务数据顺序(m_pfFinData内容)
tagFinData = packed record
Zgb: Single; //0 总股本(万股)
Gjg: Single; //1 国家股
Fqrg: Single; //2 发起人法人股
Frg: Single; //3 法人股
LtBg: Single; //4 B股
LtHg: Single; //5 H股
LtAg: Single; //6 流通A股
Zgg: Single; //7 职工股
A2zpg: Single; //8 A2转配股
Zzc: Single; //9 总资产(千元)
Ldzc: Single; //10 流动资产
Gdzc: Single; //11 固定资产
Wxzc: Single; //12 无形资产
Cqtz: Single; //13 长期投资
Ldfz: Single; //14 流动负债
Cqfz: Single; //15 长期负债
Zbgjj: Single; //16 资本公积金
Mggjj: Single; //17 每股公积金
Gdqy: Single; //18 股东权益
Zysr: Single; //19 主营收入
Zyly: Single; //20 主营利润,
Qtly: Single; //21 其他利润
Yyly: Single; //22 营业利润
Tzsy: Single; //23 投资收益
Btsr: Single; //24 补贴收入
Yywsz: Single; //25 营业外收支
Snsytz: Single; //26 上年损益调整
Lyze: Single; //27 利润总额
Shly: Single; //28 税后利润
Jly: Single; //29 净利润
Wfply: Single; //30 未分配利润
Mgwfp: Single; //31 每股未分配
Mgsy: Single; //32 每股收益
Mgjzc: Single; //33 每股净资产
Tzmgjzc: Single; //34 调整每股净资
Gdqyb: Single; //35 股东权益比,
Jzsyl: Single; //36 净资收益率
end;
//函数数据结构
tagCALCINFO = packed record
m_dwSize: LongWord;//结构大小
m_dwVersion: LongWord;//调用软件版本(V2.10 : 0x210)
m_dwSerial: LongWord;//调用软件序列号
m_strStkLabel: Pchar;//股票代码
m_bIndex: longBOOL;//大盘
m_nNumData: integer;//数据数量(pData,pDataEx,pResultBuf数据数量)
m_pData: ^tagSTKDATA;//常规数据,注意:当m_nNumData==0时可能为 NULL
m_pDataEx: ^tagSTKDATAEx;//扩展数据,分笔成交买卖盘,注意:可能为 NULL
m_nParam1Start: integer;//参数1有效位置
m_pfParam1: ^single;//调用参数1
m_pfParam2: ^single;//调用参数2
m_pfParam3: ^single;//调用参数3
m_pfParam4: ^single;//调用参数3
m_pResultBuf: ^single;//结果缓冲区
m_dataType: DATA_TYPE;//数据类型
m_pfFinData: tagFinData;//财务数据
end;
pTagCALCINFO = ^tagCALCINFO;
function FNC1(pData:pTagCALCINFO):integer;stdcall;export;
implementation
function FNC1(pData:pTagCALCINFO):integer;stdcall;export;
begin
if (@pData.m_pfParam1 <> nil) and (@pData.m_pfParam2 <> nil) then
result:=1
else
result:=0;
end;
end. ? ? ? ? ? 如何编制dll公式?

请介绍一下飞狐如何编制DLL公式?

1、机器里需要安装,c,c++。delphi,vb等编程的任何一种软件,根据自己擅长。
2、用编程软件打开飞狐或分析家软件预留的接口文件,编写程序,程序返回1-n个运算结果返回给设定的函数,用编程软件编译成*.dll文件。
3、将该.dll文件拷贝至飞狐安装的文件夹。
4、在飞狐软件的编辑公式中调用dll文件返回的函数结果。

其实,飞狐软件所提供的函数已经基本能够满足需要,再加上飞狐支持的VBScript,可以说基本不需要使用编写dl动态链接库这种方法。 ? ? ? ? ? ? 发表数: 155 [南客老师]扩展函数下载
经博庭公司飞狐交易师首席技术支持专家「南客老师」同意
转载其最新扩展函数如下

请按下面三个连结下载
[url=http://www.li20.net/attachment.php?aid=299599][color=Red]扩展函数NK.DLL[/color][/url]
[url=http://www.li20.net/attachment.php?aid=299600][color=Red]扩展函数NKEX.DLL[/color][/url]
[url=http://www.li20.net/attachment.php?aid=299598][color=Red]扩展函数FOXGY.DLL[/color][/url]


chungwen 发表时间: 2003-05-25 23:05 网站管理员注册日: 2003-04-25
来自:
发表数: 155 Re: [南客老师]扩展函数下载
nk.dll
新版NK.DLL包含以下7个函数,另隐藏若干函数,待测试稳定无误后公开。
  一、"NK@NKGBL1"(N),基本鬼变脸函数,参数N=1、2、3时,分别输出鬼变脸的上端、下端、变脸端,N=4时,返回值为1、-1、0.1、-0.1分别代表红脸、绿脸、翻红脸、翻绿脸。
  示例代码(鬼变脸):

GLS:="NK@NKGBL1"(1);
GLX:="NK@NKGBL1"(2);
GLB:="NK@NKGBL1"(3);
GLCOLOR:="NK@NKGBL1"(4);
STICKLINE(GLCOLOR=1,GLX,GLS,6,1),COLORRED;
STICKLINE(GLCOLOR=-1,GLX,GLS,6,0),COLORCYAN;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLS,6,1),COLORRED;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLX,6,0),COLORCYAN;

  二、"NK@NKGBL"(X,Y,N),扩展鬼变脸函数,X、Y为计算序列变量,相当于开盘价、收盘价。参数N=1、2、3时,分别输出鬼变脸的上端、下端、变脸端,N=4时,返回值为1、-1、0.1、-0.1分别代表红脸、绿脸、翻红脸、翻绿脸。
  示例代码(0号指数,感谢REDHYSS提供):

VAR1:=SMA("1A0001$AMOUNT"+"399001$AMOUNT",10,1)/10000000;
VAR2:=REF(VAR1,1);
GLS:="NK@NKGBL"(VAR2,VAR1,1);
GLX:="NK@NKGBL"(VAR2,VAR1,2);
GLB:="NK@NKGBL"(VAR2,VAR1,3);
GLCOLOR:="NK@NKGBL"(VAR2,VAR1,4);
STICKLINE(GLCOLOR=1,GLX,GLS,9,0),COLORRED;
STICKLINE(GLCOLOR=-1,GLX,GLS,9,0),COLORCYAN;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLS,9,0),COLORRED;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLX,9,0),COLORCYAN;

  三、"NK@NKTWR1"(N),"NK@NKTWR1"(N),基本宝塔线函数,参数N=1、2、3时,分别输出宝塔线的上端、下端、变脸端,N=4时,返回值为1、-1、0.1、-0.1分别代表红脸、绿脸、翻红脸、翻绿脸。
  示例代码(宝塔线):

GLS:="NK@NKTWR1"(1);
GLX:="NK@NKTWR1"(2);
GLB:="NK@NKTWR1"(3);
GLCOLOR:="NK@NKTWR1"(4);
STICKLINE(GLCOLOR=1,GLX,GLS,6,1),COLORRED;
STICKLINE(GLCOLOR=-1,GLX,GLS,6,0),COLORCYAN;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLS,6,1),COLORRED;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLX,6,0),COLORCYAN;

  四、"NK@NKTWR"(X,Y,N),扩展宝塔线函数,X、Y为计算序列变量,相当于开盘价、收盘价。参数N=1、2、3时,分别输出宝塔线的上端、下端、变脸端,N=4时,返回值为1、-1、0.1、-0.1分别代表红脸、绿脸、翻红脸、翻绿脸。
  示例代码(略,参阅扩展鬼变脸的示例代码)

  五、"NK@NKCTIME"(N),
参数N=1,返回当前周期从开盘到当前完成时间比例,若非最后交易日,返回1。如60分钟周期,当前时间为14:00,则函数返回240/180,适用的周期:分笔、1分钟、5分钟、15分钟、30分钟、60分钟、日、周。
参数N=2,返回从当日开盘到当前的交易时间分钟数,若非最后交易日,则返回值240(分钟)。适用的周期:所有周期。
  示例代码一(动态0号指数,适用于可用于分笔、1分钟、5分钟、15分钟、30分钟、60分钟、日、周):

VAR1:=SMA(("1A0001$AMOUNT"+"399001$AMOUNT")*"NK@NKCTIME"(1),10,1)/10000000;
VAR2:=REF(VAR1,1);
GLS:="NK@NKGBL"(VAR2,VAR1,1);
GLX:="NK@NKGBL"(VAR2,VAR1,2);
GLB:="NK@NKGBL"(VAR2,VAR1,3);
GLCOLOR:="NK@NKGBL"(VAR2,VAR1,4);
STICKLINE(GLCOLOR=1,GLX,GLS,9,0),COLORRED;
STICKLINE(GLCOLOR=-1,GLX,GLS,9,0),COLORCYAN;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLS,9,0),COLORRED;
STICKLINE(ABS(GLCOLOR)=0.1 ,GLB,GLX,9,0),COLORCYAN;

  示例代码二,(量比曲线,可用于分笔、1分钟、5分钟、15分钟、30分钟、60分钟、日)。注意,本公式需要2个代码,新建一个公式VOL1,再建一个量比公式引用VOL1:
公式一,VOL1:
CJL:VOL;
MA1:REF(MA(VOL,5),1);

公式二,量比公式:
T1:="NK@NKCTIME"(2);
FV:=IF(DATAPERIOD<6,"VOL1.CJL#DAY",VOL)*240/T1;
Z5:=FV/"VOL1.MA1#DAY";
量比:FV/Z5;

  六、"NK@DATATYPE",无需参数。判断当前的周期类型,南客用于非飞狐软件时所需,返回0--10,对应的周期为分笔--多日线。
  示例代码(略)

  七、"NK@CMA"(X,N),X为序列变量,N为周期数,扩展了MA函数,使前N周期的均值有效,从第N周期起,返回值跟MA(X,N)相同。

附:感谢czj99,修正了原nk.dll鬼变脸函数中,当日鬼变脸不变色时,变色端计算不正确的BUG。应JIM之邀,增加了CMA函数。
  感谢浪花一朵朵指出鬼变脸的BUG,修正后再次公布。  
  修正了量比曲线公式代码,使之适应于日以下周期,修正了nk.dll中部分函数的某些不足。
                     2002/06/16



chungwen 发表时间: 2003-05-25 23:05 网站管理员注册日: 2003-04-25
来自:
发表数: 155 Re: [南客老师]扩展函数下载
nkex.dll
一、扩展函数1: VALWHENEX(COND, Var, N)

返回:当前周期之前,倒数第N次COND成立时,返回Var的值。N<=0返回空,N为常数。

例:VALWHENEX( cross(c,ma(c,10)), C,2 ), 返回当前周期之前倒数第2次cross(c,ma(c,10))
成立时C的值。


二、扩展函数2:BARSEX(COND, N)

返回:当前周期之前,倒数第N次COND成立时,距离当前的周期数。N<=0返回空,N为
常数。

例:BARSEX( cross(c,ma(c,10)), 2 ), 返回当前周期之前倒数第2次cross(c,ma(c,10))
成立时,距离当前的周期数。


三、扩展函数3:INCOMP(COND, Var1,Var2, Valmin, Valmax, M, N)

返回:条件COND成立后,从第M周期至第N周期,Var2变量值跟条件成立时
的Var1变量之比大于等于Valmin且小于等于Varmax时,返回1,否则返回0。
其中M
例:INCOMP(cross(ma(c,5),ma(c,10), c, 0.9,1.1, 20, 28),
返回:条件"5日均在线穿10日均线"成立后,第20至第28周期内,
若当前的收盘价与条件成立时的收盘价的比值在0.9与1.1之间,
则返回1,否则返回0。

四、扩展函数4:HLJ(N,M)
返回:当M=0,返回最后N日内的最低价,当M=1,返回最后N日内的最高价。
起始周期为从最后一个周期算,倒数第N个周期。

例:"nkex@hlj"(30,1),从最后周期算倒数第30周期起,返回最后30周期的最高价。

五、扩展函数5:STKTYPE
返回的数值分别为1、2、3、4、5时,分别表示股票名称的第1、2个字母分别为
ST、PT、XD、XR、DR,若返回0,则表示股票名称不在前5种范围之列。本函数无
需参数。


附:扩展函数1、3根据jxswm兄之邀设计,扩展函数2根据1a0001兄之邀设计。


??
chungwen 发表时间: 2003-05-25 23:06 网站管理员注册日: 2003-04-25
来自:
发表数: 155 Re: [南客老师]扩展函数下载
foxgy.dll
顶底背离扩展函数
更新顶底背离扩展函数
修正了原来扩展函数中,在某些情况下可能非法的问题。

顶、底背离二合一扩展函数,需要者请下载。
分析家可用,示例:
x:="macd.macd";
bl:"foxqy@blvar"(x);

返回值:当股价与macd顶背离时,返回-1,底背离时返回1,否则返回0
简要说明:
1、主要引用了未来一天的数据,如果需要做成选股公式,请用时段选股,由于在函数内部做了限制,当天选不出任何股票。
2、请配合其它指标进行综合判断。
3、不妨用多周期进行分析。
4、本函数是为了大家编公式方便而制作,未进行任何成功率之类的测试,是否对您有帮助,取决于您编公式的思路。


??
chungwen 发表时间: 2003-05-25 23:51 网站管理员注册日: 2003-04-25
来自:
发表数: 155 Re: [南客老师]扩展函数下载
顶底背离函数示范
本示范此用MACD之柱状作分析

公式建立在:技术指标

公式名称:MACD背离
公式说明:[副图用]MACD柱状部分顶底背离标记
(□不显示坐标线 □主图迭加 □主图)

使用参数:
(SHORT,26,20,100)
(LONG,12,5,40)
(M,9,2,60)

坐标线(最多7个,分号分隔):
自动

以下为公式内容:
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG),COLORBLUE;
MACD:EMA(DIF,M),COLORRED;
DEF:2*(DIF-MACD), COLORSTICK;

ddk:="foxqy@blvar"(def);
drawicon(ddk=-1,def,11),align0;
drawicon(ddk=1,def,10);


请事先下载foxgy.zip,
并将压缩档案里面的foxgy.dll解压缩
放到飞狐/天狐交易师安装目录里面的fmldll目录里面