飞狐公式系统指南Word格式.docx
《飞狐公式系统指南Word格式.docx》由会员分享,可在线阅读,更多相关《飞狐公式系统指南Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
FFL.MsgBox(strMsg)
显示信息提示对话框,strMsg为字符串类型的变量或常量
实例
1、交易系统:
背景:
假定买入信号发生的条件是创200天新高,第一次达到条件时发出买入信号,略去随后的买入信号,利润目标是10%,最大亏损是8%,达到止赢止损点发出止损卖出信号,这样的交易系统在原公式系统中无法实现,而用脚本语言就解决了这样的问题。
该实例综合应用了循环语句、条件语句和数组操作,请注意变量数据是怎样被转入、转出的。
请看代码:
{买入信号临时变量:
收盘创200天新高}
BUY:
=CLOSE=HHV(CLOSE,200);
{初始化卖出信号临时数组变量给下面的脚本用,任意赋给一个有效数值起始位置为0的数组变量即可,注意,若SELL:
=0则表示SELL为数值而非数组}
SELL:
=BUY;
{初始化收盘价临时数组变量给下面的脚本用}
CLOSEPRICE:
=CLOSE;
{用<
%......%>
嵌入脚本语言,类似编写ASP}
<
%
'
将公式系统变量转入VBScript
close=FFL.VarData("
CLOSEPRICE"
buy=FFL.VarData("
BUY"
)
sell=FFL.VarData("
SELL"
该变量保存买入价,也表示开仓、平仓状态。
如为0则表示空仓(平仓)
lastbuyprice=0
遍历数组
fori=0toUBound(close)
sell(i)=0
若已买入而且未平仓略去随后的买入信号
if(lastbuyprice>
0)then
buy(i)=0
endif
若满足买入条件取买入价,也用于设置开仓
if(lastbuyprice=0)AND(buy(i)=1)then
lastbuyprice=close(i)
若已买入且满足卖出条件,产生卖出信号并平仓
if(lastbuyprice>
0)AND((close(i)>
(1.1*lastbuyprice))OR(close(i)<
(0.92*lastbuyprice)))then
sell(i)=1
next
将VBScript变量转出为公式系统变量
FFL.VarData("
)=buy
)=sell
%>
ENTERLONG:
BUY;
EXITLONG:
SELL;
有兴趣的用户可以将这段代码扩充为同时考虑回落、横盘平仓点的情况。
2、技术指标
在达到某个条件时弹出信息提示对话框,请注意公式参数和常数变量是怎样被转入VB脚本中的。
(已设置一参数P缺省5,2,60)
MA1:
MA(C,P);
N:
=3;
p=FFL.VarData("
p"
n=FFL.VarData("
n"
ma=FFL.VarData("
MA1"
nFirst=FFL.VarStartIndex("
ma1"
nLast=UBound(ma)
fori=nFirsttonLast
ma(i)=ma(i)/p
next
'
判断最后一个数是否满足条件
if(ma(nLast)>
n)then
str="
大于3"
MsgBox(str)
endif
)=ma
设置有效起始位置示例
)=nFirst
类似地,运用脚本语言强大的语法、函数,当然也可以在技术指标、条件选股、五彩K线中实现原来不可想象的计算和处理。
指标函数
COST(X)支持序列数组
ZIG类函数支持序列数组:
函数:
ZIG(X,N)
参数:
X为序列数组或常数,为常数时表示0:
开盘价,1:
最高价,2:
最低价,3:
收盘价,N为常数
返回:
返回序列数组
说明:
当序列或K线变化量超过N%时转向
示例:
ZIG(3,5)表示收盘价的5%的ZIG转向
ZIG(MA(C,20),5)表示20日平均线的5%的ZIG转向
PEAK(X,N,M)
X为序列数组或常数,N为常数,M为大于等于1的整数
表示之字转向ZIG(X,N)的前M个波峰的数值
PEAK(1,5,1)表示%5最高价ZIG转向的上一个波峰的数值
PEAK(MA(C,20),5,1)表示均线的5%的ZIGVAR转向的上一个波峰的数值
PEAKBARS(X,N,M)
表示之字转向ZIG(X,N)的前M个波峰到当前的周期数
PEAKBARS(0,5,1)表示%5开盘价ZIG转向的上一个波峰到当前的周期数
PEAKBARS(MA(C,20),5,1)表示线的5%的ZIGVAR转向的上一个波峰到当前的周期数
TROUGH(X,N,M)
表示之字转向ZIG(X,N)的前M个波谷的数值
TROUGH(2,5,2)表示%5最低价ZIG转向的前2个波谷的数值
TROUGH(MA(C,20),5,2)表示均线的5%的ZIGVAR转向的前2个波谷的数值
TROUGHBARS(X,N,M)
表示之字转向ZIG(X,N)的前M个波谷到当前的周期数
TROUGHBARS(2,5,2)表示%5最低价ZIG转向的前2个波谷到当前的周期数
TROUGHBARS(MA(C,20),5,2)表示均线的5%的ZIGVAR转向的前2个波谷到当前的周期数
这样扩展后,ZIG类函数可用于判断RSI等指标的M头W底。
绘图函数
DRAWNUMBER(COND,PRICE,NUMBER,PRECISION)
当COND条件满足时,在PRICE位置书写数字NUMBER(可以为常数或数组序列),PRECISION为精度(取值范围0-3),即显示到小数点后PRECISION位。
该函数可用于显示指标数值。
例如:
DRAWNUMBER(CLOSE/OPEN>
1.05,HIGH,(CLOSE-OPEN)/OPEN*100,1)表示当日涨幅大于5%时在最高价位置显示涨幅(相对于开盘价的百分比,取一位小数);
DRAWYITEXT(COND,PRICE,CODE,TYPE)
在图形上显示干支、64卦文字。
当COND条件满足时,在PRICE位置书写TYPE类型的CODE的对应文字。
TYPE为常数,取0--1,分别表示显示的是干支、64卦,CODE为对应的代码。
DRAWYITEXT(CLOSE/OPEN>
1.05,LOW,GANZHI(DATE,0,2),0)表示当日涨幅大于5%时在最低价位置显示日干支;
DRAWYITEXT(REF(CLOSE,2)>
REF(OPEN,2)ANDREF(CLOSE,1)>
REF(OPEN,1)ANDCLOSE>
OPEN,LOW,KGUA(1,1),1)表示连续三阳线时在最低价位置显示K线卦象。
易理函数
LDAY
无
返回有效值范围为(1-30).
取得该周期的农历日期。
LMONTH
返回有效值范围为(1-12)
取得该周期的农历月份。
LYEAR
返回有效值范围为(1970-2038)
取得该周期的农历年份。
LSOLARTERM(X)
X为序列变量,格式与DATE同,有效值范围为(700101-1341231),表示19700101-20341231
返回有效值范围为(0-24).0表示该周期不在节气日中,1-24分别表示小寒、大寒、立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至
取得该周期所在的二十四节气。
LSOLARTERM(DATE)表示求当前周期节气
ZQDMNUM
用法:
ZQDMNUM
返回证券代码数,如0001返回1,600001返回600001,指数返回0
ZQDMSUM
ZQDMSUM
返回证券代码各位数字之和,如0001返回1,600001返回7,指数返回3
NUMBERSUM(NUMBER,N)
NUMBER为待计算的数据,N表示小数点后取几位
各位数字之和
NUMBERSUM(CLOSE,2)则收盘价为9.53时返回17
GANZHI(DATE,TIME,TYPE)
DATE为数组或常数,有效值范围(年月日80010100-130123123)
TIME为数组或常数,有效值范围(时分秒000000-235959)
TYPE为常数,取0--3,分别表示计算的是年、月、日、时的干支
返回六十甲子代码,有效值范围为(0-59),依次表示甲子、乙丑.....癸亥
取得日期的年、月、日、时的干支代码
GANZHI(DATE,0,2)取得该周期的日干支代码
GANZHI(DATE,TIME,3)取得该周期的时干支代码
GANZHI(1010901,0,0)取得2001年9月1日的年干支代码
这样:
MOD(GANZHI(DATE,0,2),10)即可得到该周期的对应的日天干代码。
0-9分别表示甲、乙...癸
MOD(GANZHI(DATE,0,1),12)即可得到该周期的对应的月地支代码。
0-11分别表示子、丑...亥
INTPART(GANZHI(DATE,0,2)/10)即可得到该周期的旬代码(0-5),依次表示甲子旬、…、.甲寅旬
(5-INTPART(GANZHI(DATE,0,2)/10))*2即可得到该周期的第一个旬空地支代码
(5-INTPART(GANZHI(DATE,0,2)/10))*2+1即可得到该周期的第二个旬空地支代码
WUXING(X,TYPE)
TYPE为常数,取0--2,分别表示计算的是天干、地支、八卦对应的五行,X为对应的代码,数组或常数
返回五行代码,有效值范围为(0-4),依次表示金水木火土
取得天干、地支、八卦对应的五行代码
WUXING(MOD(GANZHI(DATE,0,2),12),1)取得该周期的日地支对应的五行代码
WXGX(WX1,WX2)
WX1,WX2为五行代码的数组或常数,有效值范围为(0-4),依次表示金水木火土
返回五行生克关系代码,有效值范围为(0-3),依次表示WX1无关WX2、WX1生WX2、WX1克X2、WX1反克WX2
取得五行相生相克反克的关系
WUXING(0,1)返回1,表示金生水
五行序数的相生次序:
0-1-2-3-4-0
五行序数的相克次序:
0-2-4-1-3-0
五行序数的反克次序:
0-3-1-4-2-0
WXLD(JI,LD)
LD为五行四季力度代码,有效值范围为(4-0),依次表示旺(4)、相(3)、休
(2)、囚
(1)、死(0);
JI为四季数代码,有效值范围为(0-4),依次表示春、夏、秋、冬、四季土
返回五行代码,依次表示金水木火土
取得不同时间的力度(旺相休囚死)对应的五行代码
WXLD(0,4)=2,表示春季木旺
WXSS(WX,SS)
WX为五行代码的数组或常数,SS五行盛衰十二阶段代码,有效值范围为(0-11),依次表示绝、胎、养、长生、沐浴、冠带、临官、帝旺、衰、病、死、墓
地支代码,0-11分别表示子、丑...亥
取得五行盛衰十二阶段(原生旺死绝)对应的地支代码
WXSS(1,0)返回2,金绝于寅
DZGX(DZ1,DZ2)
DZ1,DZ2为地支代码的数组或常数,有效值范围为(0-11)
返回地支关系代码,有效值范围为(0-5),依次表示无关(0)、DZ1生DZ2
(1)、DZ1克DZ2
(2)、相冲(3)、相害(4)、DZ1刑DZ2(5)
地支间的关系
DZGX(0,6)返回3,表示子与午冲
DZXH(DZ1,DZ2,DZ3,DZ4)
DZ1,DZ2,DZ3,DZ4为地支代码的数组或常数,有效值范围为(0-11),若求六合,则DZ3为-1,DZ4除算申子辰化合成水局外为-1
返回合成的无行代码,有效值范围为(-1-4),-1表示无相合关系
地支间的相合关系
DZXH(0,1,-1,-1)返回4,表示子丑合而化土
DZXH(8,0,4,-1)返回1,表示申子辰化合成水局
KGUA(TYPE,N)
TYPE取爻次序,为0表示以第一个周期为初爻,当前周期为上爻,不为0则反之
N为所取的周期数,为0取3个周期,不为0表示取6个周期
K线卦象,若N为0,返回八卦代码(1-8),否则返回六十四卦代码(11-88),请参考易卦代码表
取得K线卦象
KGUA(1,1)以当前周期为初爻,取6个周期组成的某个六十四卦
升为阳,跌为阴,平盘则相对前收盘(如果也相等?
反日k线:
若改为阳线为阴爻,阴线为阳爻,则可写成99-KGUA(1,1)
附:
易卦代码表
将八纯卦及64别卦按先天数编排:
乾
(1)、兑
(2)、离(3)、震(4)、巽(5)、坎(6)、艮(7)、坤(8)
天
(1)、泽
(2)、火(3)、雷(4)、风(5)、水(6)、山(7)、地(8)
譬如上卦为艮,就7,下卦为乾,就1,这样,山天大畜就可以用71来表示,所以64卦的最大范围为坤卦纯卦,为88,纯乾卦为最小,为11
"
乾为天"
(11),"
天泽履"
(12),"
天火同人"
(13),"
天雷无妄"
(14),"
天风姤"
(15),"
天水讼"
(16),"
天山"
(17),"
天地否"
(18),
泽天夬"
(21),"
兑为泽"
(22),"
泽火革"
(23),"
泽雷随"
(24),"
泽风大过"
(25),"
泽水困"
(26),"
泽山咸"
(27),"
泽地萃"
(28),
火天大有"
(31),"
火泽睽"
(32),"
离为火"
(33),"
火雷噬嗑"
(34),"
火风鼎"
(35),"
火水未济"
(36),"
火山旅"
(37),"
火地晋"
(38),
雷天大壮"
(41),"
雷泽归妹"
(42),"
雷火丰"
(43),"
震为雷"
(44),"
雷风恒"
(45),"
雷水解"
(46),"
雷山小过"
(47),"
雷地豫"
(48),
风天小畜"
(51),"
风泽中孚"
(52),"
风火家人"
(53),"
风雷益"
(54),"
巽为风"
(55),"
风水涣"
(56),"
风山渐"
(57),"
风地观"
(58),
水天需"
(61),"
水泽节"
(62),"
水火既济"
(63),"
水雷屯"
(64),"
水风井"
(65),"
坎为水"
(66),"
水山蹇"
(67),"
水地比"
(68),
山天大畜"
(71),"
山泽损"
(72),"
山火贲"
(73),"
山雷颐"
(74),"
山风蛊"
(75),"
山水蒙"
(76),"
艮为山"
(77),"
山地剥"
(78),
地天泰"
(81),"
地泽临"
(82),"
地火明夷"
(83),"
地雷复"
(84),"
地风升"
(85),"
地水师"
(86),"
地山谦"
(87),"
坤为地"
(88),
三、DLL扩展程序调用接口
分析家现有的DLL接口只能调用4个参数,其中只能有一个序列,飞狐对分析家DLL调用接口信息数据结构进行了扩展,使扩展程序调用的参数不限数量,且每个参数都可为数值或序列。
/////////////////////////////////////////////////////////////////////////////
//调用接口信息数据结构
typedefstructtagCALCINFO
{
DWORDm_dwSize;
//结构大小
DWORDm_dwVersion;
//调用软件版本
DWORDm_dwSerial;
//调用软件序列号
char*m_strStkLabel;
//股票代码
BOOLm_bIndex;
//大盘
intm_nNumData;
//数据数量(pData,pDataEx,pResultBuf数据数量)
STKDATA*m_pData;
//常规数据,注意:
当m_nNumData==0时可能为NULL
STKDATAEx*m_pDataEx;
//扩展数据,分笔成交买卖盘,注意:
可能为NULL
intm_nParam1Start;
//参数1有效位置
float*m_pfParam1;
//调用参数1
float*m_pfParam2;
//调用参数2
float*m_pfParam3;
//调用参数3
float*m_pfParam4;
float*m_pResultBuf;
//结果缓冲区
intm_dataType;
//数据类型
float*m_pfFinData;
//财务数据
//以上与分析家兼容,所以沿用其结构和名称
//以下为FoxTrader扩展
DWORDm_dwReserved;
//保留,将来用于设置标志
intm_nNumParam;
//调用参数数量
CALCPARAM*m_pCalcParam;
//调用参数数组
}CALCINFO;
/////////////////////////////////////////////////////////////
//调用参数项结构
typedefstructtagCALCPARAM
union{
float*m_pfParam;
//