范文一:怎么打包软件程序
怎么打包软件程序
引导目录
一、准备工作 1、准备工具 2、准备项目
二、整个打包使用工程 1、安装打包工具 2、打包设置 3、打包操作 4、安装过程 5、卸载过程 三、总结 1、工具特点 2、优势 3、不足
一、准备工作
1、准备工具:
准备打包工具,其实我以前用过inno Setup 和Visual Studio Setup 打包工具,我相信对于每一个软件开发者来说,inno Setup 和Visual Studio Setup 两款打包工具一点的不陌生,前者可以写脚本打包,后者基本是配置打包,不管怎么样都是通过比较繁琐的操作才能把软件打包成可以运行的安装程序。还有时间经常在打包是搞错配置,而让打包的软件无法运行。总感觉不太好用。
这里我就介绍最近发现一款非常棒的软件程序打包工具:火凤打包工具(hofoSetup) 先到官网:http://www.hofosoft.com
下载地址:http://hofosoft.com/hofosoft/download/HofoSetup.exe
2、准备项目
1、新新建项目HofoMain 测试项目
你也可以用其他软件开发项目,我这里是用C# 语言做的一个测试项目,写了一个简单的登录程序。
程序写完了,设置程序执行文件ICON图标,如果没有设置ICON图标,默认是系统默认图标这样,安装后图标就不是很好看。
执行以下项目是否有错误,如果没有错误该简单测试项目就算是准备好了。
2
二、个打包使用工程 1、安装打包工具
由于火凤打包工具是一个可以直接执行的exe文件,不用安装就可以执行运行打不工具
了。这样就非常方便,免除安装过程了。
2、打包设置
运行打不工具,显示无规则的打包配置界面,界面里填写软件打包的配置信息。 软件名称:就是您开发的项目名称
软件版本:就是您的项目程序的版本号。
简短描述:您软件的描述信息。
安装风选择:里面有三套皮肤:气泡进度条、时间滤斗,火箭发射,这里我选择皮肤是火箭发射。
选择打包目录:就是要打包的程序目录。 从源文件夹中选择主程序:就是程序的主程序。
默认执行程序或批处理:这里更能活了,你可以为你的程序编写脚本和其他额外扩展操作。 选择安装程序保存路径:就是你打包好的exe保存在哪里。(我保存在桌面名字为setup.exe)
检查软件打包基本信息是否填写完整。如果OK了,进行打包操作了。
3、打包操作
点击打包工具的“一键打包”。
当打包完成
4、安装过程
执行点击上图中的“启动程序”就可以安装打包好的软件了。
或这直运行打包好的”setup.exe”安装效果图片如下:
选择安装目录,点击安装
火箭安装进度倒计时提示
安装完成发射火箭过程。
安装完成,创建桌面图片、创建开始菜单,运行程序。整个安装过程非常的炫酷,与众不同。
5、卸载过程
现在我们看怎么把我按在的程序卸载掉。在开始菜单--》看美女登录程序-》卸载
漂亮的橡皮擦特效卸载效果。
四、总结
1、工具特点
轻巧简单免安装;配置简单皮肤自己选择;打包和安装非常快; 异性特效非常炫酷。 2、优势
专业、简单、炫酷、免费 3、不足
安装皮肤和卸载皮肤比较不是很多,希望有更多炫酷皮肤可以选择。 不支持主程序和卸载程序ICON的设置。 不支持安装效果图片的更换。
范文二:示波器制作的 软件程序 部分
给你的电路注入灵魂 ——程序设计
没有程序那一堆堆电路起不到任何作用,完全是一堆废板子!就像一台没有操作系统的电脑一样,只能废电。程序设计是整个示波器制作中的难点,本文将详细讲解程序的设计。
该示波器中的程序全部是用c 语言编写的,开发环境为CodeVisionA VR C,原程序在附件中,下面就各个重要的子程序的设计一一叙述,其它程序见原程序。MCU2与MCU1的程序流程图分别见图1和图2。
MCU2中断流程图
MCU2主程序流程图
图1:MCU2程序流程图
图2:MCU1程序流程图
1.同步触发的软实现
细心的朋友会发现这个示波器电路中缺少一部分电路,就是硬件触发电路,为了降低电路的复杂性我在做这个示波器时没有做这个电路,而是用软件实现同步触发的,这样做有个弊端就是几乎无法实现单次触发,因为我基本不用这个功能,需用这个功能的朋友只需在程控放大器部分加上一个由高速比较器构成的迟滞比较器然后将输出端接到一个外部中断的输入口即可。当然程序和电路就要做相应的变化,这里就不多讲了。软件触发的好处是触发条件更易调整,只需调整比较语句中的参数即可。保证可以用软件触发的条件是要有足够大的存储空间,显示一屏的数据为240个,但每次读进单片机的数据为500个,多余260个数据就是作为不满足触发条件的舍弃余量,为了以防万一,当从500个数据中以经读出超过260个数据但还没有符合触发条件的数据时,将跳出触发比较循环,重新从FIFO 存储器中读出500个数据,因为FIFO 存储器为4K 容量,最多可以这样重复读取8次数据,所以软触发可以非常稳定的工作,在该示波器的MCU2中控制触发的语句见以下程序段:
read:
for(i=0;i<500;i++) 从fifo="">500;i++)>
{
FIFO_R=0; add[i]=FIFO_bus; FIFO_R=1; }
while(!(add[q]<=m&&add[q+1]>=m)) //满足幅度为m 且为上升沿则触发 { q+=1;
if(q>=260) //若存储数据不足则重新读数据 goto read; }
程序的意思是只有当此时采样信号的数值是m 且为上升沿时才可以触发,改变触发沿只需改变运算符,改变触发电压只需改变m 的值即可,m 的取值范围是0~255。 2. 从采样数据中测信号峰峰值
本示波器就能够测量输入信号电压的峰峰值,并显示在屏幕上。这个功能由峰峰值测量子程序完成,见下面的程序段。
在程序开始时给a中赋值128,即基线电压值。因为一屏幕的显示数据为240个,所以用for()循环将if…else…判断语句执行240次,在a中存放最大值,在b中存放最小值。对每个数据进行比较,如果该数据比a大则将这个数据存入a,如果小于a,则将这个数据与b进行比较,比b大则抛弃,比b小则存入b。故当240个循环执行完后a中存放的是这一屏幕数据中的最大值,b中存放的是这一屏幕显示数据中的最小值。在比较完后用a减去b,得到差值存入c中,则c中保存的值就是电压的峰峰值,调用电压计算显示子程序根据当前的垂直灵敏度给c乘以不同的倍数,得到实际的峰峰值。当前垂直灵敏度的判断由一个switch()选择结构完成。biao寄存器中的数据是当前的垂直灵敏度,case 4:后面没有运算是因为程控放大器在此状态下的放大倍数为1,即没有放大也没有衰减。
在计算完峰峰值后,设置LCD显示器,使其工作在文本模式(因为只有在文本模式下对字库的调用才有效),然后设置屏幕上显示电压峰峰的坐标(对该LCD模块的控制是先送命令,后送参数。例如设置X坐标“SdCmd(0x60);SdCmd(30);”中,第一个SdCmd()送的0x60是设置X坐标的命令,第二个SdCmd()送的30是X轴的坐标,其他设置相同。具体见光盘中LCD显示屏的资料。),在设置完LCD后约定显示格式,小数点后保留2为有效数字,显示单位为Vpp,显示完毕后需重新设置LCD工作状态使其工作在图形模式用于波形显示。
a=128;
for(i=0;i<240;i++)>240;i++)>
{
if(add[i]>a) {
a=add[i]; }
else if(add[i]
b=add[i]; }
} //取得最大值存于a中,最小值存于b中 c=a-b; //取差值存入c中 if(e>5) //避免频繁换数据 {
disp_volt(); //调用电压值计算显示子程序 e=0; } e++;
void disp_volt() //电压值计算显示子程序 {
c=c*0.667;
switch(biao)//根据不同的垂直灵敏度计算峰峰值
{
case 0:c=c*25;break; case 1:c=c*10;break; case 2:c=c*5;break; case 3:c=c*2.5;break; case 4:;break; case 5:c=c*0.5;break;
case 6:c=c*0.25;break; case 7:c=c*0.1;break; case 8:c=c*0.05;break; default:break;
}
SdCmd(0x00);SdCmd(0xcd); //设置WLCR 寄存器,使LCD工作与显示文本状态 SdCmd(0xf1);SdCmd(0x1f); //字型水平、垂直方向各放大2 倍 SdCmd(0x60);SdCmd(30); //设置显示X坐标 SdCmd(0x70);SdCmd(50); //设置显示Y坐标
sprintf(lcd_buffer,"%3d.%02dVpp",c/100,c%100); //约定显示格式,小数点后保留两位ShowText(lcd_buffer); //有效数字
SdCmd(0x00);SdCmd(0xc5); //设置WLCR 寄存器,使LCD工作于图形显示模式 }
3.将采样数据转换成显示数据
LCD 显示屏为320×240点阵的图形显示模块,内置RA8803 控制器。模块不仅可以显示单一的文本、图形,而且可以实现双图层的(“或”、“异或”、“同或”、“与”四种逻辑关系)合成显示。在本示波器中显示格线与波形是在不同的层上显示,显示关系为“或”,画方格线的程序见原程序,比较简单就不多说了,着重解释一下如何将采样数据转换成显示数据。
显示屏的地址结构见图3,由图可知对显示数据的操作最小单位为字节,因为Mega32的内存为2K字节,显示波形的区域为240*240,显示一屏波形所需处理的数据为7.2K,故Mega32不可能同时处理一屏波形的全部数据,所以将一屏波形按字节分为30列,每次处理一列,处理完后直接显示,然后处理下一列。将AD转换所得的数据作为给LCD显示器写数据的列地址,因为一列数据位240字节,所以定义一个容量为240字节的数组lcd_buffer[240],lcd_buffer[]在初始时数据全为00H,因为每次对数据的操作至少是一个字节,而每次处理数据处理的是所显示一个点,所以对每列数据处理8次,定义一个变量m,在一列数据处理之前将其赋值为m=10000000B,处理该列第1个点时让该点垂直地址所对应的数组中的数据(00H)与m相或并将结果存入数组,再将变量m右移一位,即m=01000000B。让第2点垂直地址所对应的数组中的数据与m相或并将结果存入数组,再将变量m右移一位,即
m=00100000B ……,这样直到一列数据中的8个点全处理完,重新给m赋值为m=10000000B,
然后送显示。为了有较好显示效果,将显示相邻的点用线连接起来,在处理第一个点时预读出第二个点的垂直坐标,与第一个点的垂直坐标进行比较,如果比第一个点的垂直坐标小则从第一个点向第二个点拉线,如果比第一个点的垂直坐标大则从第二个点向第一个点拉线。具体程序如下所示:
for(j=0;j<30;j++)>30;j++)>
{ m=0b10000000; //
for(i=j*8;i<(j+1)*8;i++) 处理每列中的8个点="">(j+1)*8;i++)>
k=add[i]; // 读出采样数据作为垂直坐标
lcd_buffer[k]=(lcd_buffer[k]|m); //让该坐标对应数据与m相或并原位保存 if(add[i+q]
for(k=add[i+q];k
{
lcd_buffer[k]=(lcd_buffer[k]|m); }
} else {
for(k=add[i+q];k>add[i+q+1];k--)
{
lcd_buffer[k]=(lcd_buffer[k]|m); }
}
m>>=1; //将m的值右移一位 }
for(h=0;h<240;h++) 送显示="">240;h++)>
SdCmd(0x60);SdCmd(j); //设置显示X坐标 SdCmd(0x70);SdCmd(h); //设置显示Y坐标 SdData(lcd_buffer[h]); //传送显示数据
lcd_buffer[h]=0; //将已送出数据的存储器单元清零 }
}
图3:LCD 显示器地址结构图 4.用MCU1频率测量
用Mega8测量频率使用了其中的两个计数器/定时器。设置TCCR1B=6使16位计数器/定时器T/C1工作在计数器方式,对外部T1(PD5)引脚输入的脉冲信号进行计数(下降沿触发)。设置TCCR2=15使T/C2工作在CTC模式,内部时钟1024分频(16M/1024=15.625KHz),设置OCR2=124使中断时间为(124+1)/15.625=8ms,在低水平扫速时每隔8ms中断一次,在高水平扫速时通过重新设置TCCR2=14则每隔2ms中断一次,在这里以低水平扫速时为例,每次T/C2的中断中都首先记录下T/C1寄存器TCNT1当前的计数值,因此前后两次寄存器TCNT1的差值(time1_new-time1_old)或(65536-time1_old+time1_new)就是8ms时间内T1引脚输入的脉冲个数,为了提高测量精度程序对125个8ms内的脉冲个数进行累计,将累计值存入变量freq中,即可知限定时间为1s内有多少个脉冲,这样就将T1脚上的脉冲频率测量出来了,而T1脚上的频率是经过4分频后的所以真正的频率是将测量的频率的4倍。具体程序如下所示:
interrupt [TIM2_COMP] void timer2_comp_isr(void) {
time1_new = TCNT1; time_8ms_ok = 1;
// 8ms到,记录当前T/C1的计数值
}
void time() {
if (time_8ms_ok)
{
// 累计T/C1的计数值
if (time1_new >= time1_old) freq = freq + (time1_new – time1_old); else freq = freq + (65536 – time1_old + time1_new); time1_old = time1_new; if (++freq_time >=125) {
freq_time = 0; // 1s到,
freq_to_spibuff();// 将1s内的脉冲数送计算并通过SPI发送 }
time_8ms_ok = 0; freq = 0;
}
}
5.将两个单片机联系起来
将两个单片机联系起来就是实现两个单片机之间的通信,在这里实际就是让MCU1控制MCU2, 为了完成这一功能所以使用SPI 通信。 首先介绍一下SPI 的通信协议:
SPI (串行外设接口)总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换,广泛应用于各种工业控制领域。基于此标准,SPI 系统可以直接于各个厂家生产的多种标准外围器件直接接口。SPI 接口通常包含有4根线:串行时钟(SCK )、主机输入/从机输出数据线(MISO )、主机输出/从机输入数据线(MOSI )和低电平有效的从机选择线SS 。在从机选择线SS 使能的前提下,主机的SCK 脉冲将在数据线上传输主/从机的串行数据。主/从机的典型连接图如图4所示:
图4:主/从机的连接图
串行外设接口SPI 允许AVR 单片机和外设之间进行高速的同步数据传输。AVR 单片机SPI 的特点如下:全双工,3线同步数据传输,主/从机操作,LSB 首先发送或MSB 首先发送,7种可编程的比特率,传送中断结束,写碰撞标志检测,可以从闲置模式唤醒。SPI 主机-从机的互连如图5所示,系统包括两个移位寄存器和一个主时钟发生器。通过将需要的从机的SS 引脚拉低,主机启动一次通信过程。主机和从机将需要的数据放到相应的移位寄存器,主机在SCK 引脚上产生时钟脉冲以交换数据。主机的数据从MOSI 移出,从从机MIS O 移入。从机的数据从MISO 移出,从从机MOSI 移入。主机通过将从机的SS 拉高实现与从机的同步。
图5:SPI 主机-从机的互连 下面将介绍SPI 的几个特殊寄存器: (1)SPI 的控制寄存器—
SPCR
SPIE 为SPI 中断使能,置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中断使能位置位,就会引发SPI 中断。SPE 置位将使能SPI ,DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。MSTR 置位时选择主机模式,否则为从机。CPOL 置位表示空闲SCK 为高电平;否则空闲时SCK 为低电平。CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿采样。通过对SPR1、SPR0进行设计,确定主机的SCK 速率。 (2)SPI 的状态寄存器
—SPSR
SPIF 为中断标志位,串行发送结束后,SPIF 置位。若此时寄存器 SPCR的SPIE 和全局中断使能位置位,SPI 中断即产生。进入中断例程后SPIF 将自动清零。在发送当中对SPI 数据寄存器SPDR 写数据将置位WCOL ,SPI2X 置位后SPI 的速度加倍。 (3) SPI 的数据寄存器
—SPDR
SPDR 数据寄存器为读/写寄存器,用来在寄存器文件SPI 移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。SPI 系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI 数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过访问SPI 数据寄存器读取当前接收到的字符。否则第一个字节将丢失。
本示波器中只用MCU1控制MCU2,所以MCU1只用于发送控制数据,而MCU2只用于接收控制数据,所以将MCU1配制成SPI 主机,将MCU2配制成SPI 从机即可。在实际的程序设计中由于MCU1启动SPI 通信是在中断服务程序中完成,所以在执行完后相应寄存器会被清零,导致数据错误,所以MCU1并没有使用其中的SPI 控制器,而是使用一个子程序模拟SPI 通信,解决了控制寄存器被清零的问题。MCU2则使用了本身的SPI 控制器进行数据接收。具体程序见以下程序段:
(1)MCU1模拟SPI 主机程序段:
spi_out()为SPI 发送子程序,带有参数j ,即j 为要发送的数据,发送数据时先拉低ss ,让从机开始接收数据,然后用for ()循环将数据按由左至右的顺序(即高位先发送)发送给从机,具体方法是将j 与0b10000000相与,屏蔽低7位,是1则将dat 拉高,否则置低,然后拉高clk,延时1us 再置低clk,模拟时钟信号,再将j 左移一位,再与0b10000000相与,然后判断发送……直到8位数据发送完毕,拉高ss 告诉从机数据发送完毕进行数据存储。发送数据时约定数据格式,即两个单片机之间的通信协议:每次发送9个字节,前4个字节是测得的频率数据,且高位在前;第5个字节为垂置灵敏度数据;第6个字节为触发控制数据;第7个字节为同步控制数据;第8个字节为水平扫速数据;第9个字节为功能复用键的当前功能标志。从机再接收到数据后按照这样的顺序对数据进行处理,实现相应的功能。spi_out()这个子程序还可以用于其他需要SPI 控制的芯片,只需在调用前对IO 口进行定义即可。
spi_out(unsigned char j)
{
unsigned char u;
ss=0;
for(u=0;u<>
{
if(j&0b10000000) { dat=1; }
else {dat=0;}
delay_us(1);
clk=1;
delay_us(1);
clk=0;
delay_us(1);
j<>
}
delay_us(1);
ss=1;
}
void freq_to_disbuff()
{ if(fr==0)
{
freq=freq*4;
}
eep=freq>>24;//取频率高8位
spi_out(eep);
delay_us(10);
eep=(freq>>16)&0xff;
spi_out(eep);
delay_us(10);
eep=(freq>>8)&0xff;
spi_out(eep);
delay_us(10);
eep=freq&0xff;//取频率低8位
spi_out(eep);
delay_us(10);
spi_out(w[i]); //垂直灵敏度数据
delay_us(10);
spi_out(tri); //触发数据
delay_us(10);
spi_out(hold); //同步数据
delay_us(10);
spi_out(kr); //扫速数据
delay_us(10);
spi_out(zhi); //复用键功能标志数据
delay_us(10);
}
(2)MCU2从机SPI 程序段:
init_spi()函数是将MCU2配制成SPI 从机,每接收一个字节的数据中断一次,中断服务程序中将接收到的数据存入数组,并将数组地址加1,然后判断9个字节是否接收完毕,若没接收完则继续等待接收,接收完后则将数据按约定格式处理显示。大家可以根据自己的需求改变这些格式为其增加新的功能。
void init_spi() //SPI初始化子函数
{
DDRB.7=0;
PORTB.7=1;
DDRB.5=0;
PORTB.5=1;
DDRB.4=0;
PORTB.4=1; //将SPI 端口设置成输入
SPCR=0b11000101; //设置SPI 为从机
SPSR=0X00; //清零SPSR 寄存器
}
interrupt[SPI_STC] void spi_isr(void) //SPI接收数据中断
{
if(j!=9)
{
i[j]=SPDR; //将接收到的数据存入数组
j++; //给数组地址加1 }
}
if(j>=9) //判断9个字节数据是否接受完毕 { eep=i[0];
freq=eep;
freq=freq<>
eep=i[1];
freq=freq|eep;
freq=freq<>
eep=i[2];
freq=freq|eep;
freq=freq<>
eep=i[3];
freq=freq|eep; //将频率值整和到freq 寄存器 disp_freq(); //显示频率值
eep=i[4];
disp_volt(); //显示垂直灵敏度
tri=i[5]; //显示触发方式
hold=i[6]; //显示同步
biao=i[7]; //显示扫速
disp_time();
zhi=i[8]; //显示复用键当前功能
disp_cond();
j=0;}
Kunnsd_mculab.2009.01.07 魏坤
范文三:软件程序维护手册
程序维护手册
1 概述
1.1 编写目的
“编写程序维护手册的目的是为程序维护人员有效的维护×××××(软件名称)系统提供必要的信息。”
1.2
如:
a. 用户手册;
b. 操作手册;
c. 与本项目有关的其它文档。
1.3
1.4 术语和缩写词 列出本文档中专用的术语、定义和缩写词。 开发单位
说明该项目的提出者、开发者、用户和运行该软件系统的场所。 参考资料 列出本文档引用到的参考资料,包括作者、来源、编号、标题、出版日期和保密级别。
2 系统说明
2.1 系统用途
说明系统具备的功能,如用于控制战斗的系统要接收专门的输入(如势态报告、紧急警报等)并从输入中提取一些数据,再由此导出一些数据,从而形成具体战斗任务的信息和简报。
2.2
2.3 安全保密 说明系统数据的安全保密考虑。 总体说明
根据系统的总体功能,对系统、子系统和作业做出综合性的介绍,并用图表的形式给出系统主要部分的内部关系。
2.4 程序说明
说明系统中每个程序、分程序的细节和特性,以帮助维护人员理解各个程序及它们之间的关系。系统的专用维护程序将在第4.5节(专用维护程序)中说明。
2.4.1 程序1(标识符)说明
2.4.1.1 功能
说明程序的功能
2.4.1.2 方法
说明实现该程序的功能所使用的方法。
2.4.1.3 输入
说明程序的输入、所用介质、运行时用到的数据记录、运行开始时使用的输入数据的类型及存放单元、与程序初始化有关的入口要求等。
2.4.1.4 处理
介绍程序维护人员需要了解的处理特点及目的,如:
a. 产要的运行,用图表说明该程序的一系列运行的逻辑流程,例如读一个输入,访问一个数据记录、一个判断和一次打印输出,这些运行可用程序内部的程序段或子程序来表示,也可用图表分别详细表示每个重要的运行;
b. 本程序的主要转移条件;
c. 对程序运行的约束条件;
d. 程序运行结束时的出口要求;
e. 与下个程序的通信和联接(运行、控制);
f. 由该程序产生并供处理程序段使用的输出数据类型及存放单元;
g. 程序运行需要的存储器容量、类型及存储位置等主要参数。
2.4.1.5 输出
用便于程序维护人员理解的方式说明该程序的输出。
2.4.1.6 接口
说明该程序与本系统其它部分的接口。
2.4.1.7 表格
说明程序内部的各种表、项的细节和特性,对每张表的说明至少包括:
a. 表的标识符;
b. 使用目的;
c. 使用此表的其它程序;
d. 逻辑划分,如块或部,不包括表项;
e. 基本结构,包括固定长或可变长、固定表目或可变表目;
f. 设计安排,包括表的控制信息、每类表目的结构细节、使用中的特有性质及表内各
项的标识符、位置信息、用途、类型及编码表示。
2.4.1.8 特有的运行性质
说明在操作手册中没有提到的运行性质。
2.4.2 程序2(标识符)说明
用与第2.4.1款相同的方法,说明第2个到第N 个程序。
3 操作环境
3.1
3.2
3.3
3.3.1 设备 逐项说明系统的设备配置及其特性。 支持软件 列出本系统使用的全部支持软件,包括它们的名称和版本号。 数据库 全面说明每个数据库的性质和内容,包括安全考虑。 总体特征
如:
a. 标识符;
b. 使用这些数据库的程序;
c. 静态数据;
d. 动态数据;
e. 数据库的存储介质(如磁带、磁盘和内存)的规格及容量;
f. 系统中程序使用数据库时受到的限制。
3.3.2 结构及详细说明
说明数据库的内部结构。
3.3.2.1 说明该数据库的结构,包括其中的记录和项。
3.3.2.2 说明一个物理记录是一个逻辑记录,还是组成一个逻辑记录的若干个物理记录之
一。说明一个记录的组成部分,如首部或控制段、记录体。
3.3.2.3 说明每个记录结构的域,需要时解释它的目的。对每个域应包括下述内容:
a. 标记或标号;
b. 指明每个数据域的字符长度和位数;
c. 指明该域的允许值范围。
3.3.2.4 扩充,说明为记录增添附加数据域的规定。
4 维护过程
4.1 约定
列出该软件系统设计中使用的全部规则和约定,包括:
a. 程序、分程序、记录、数据域和存储区的标识或标号助记符的使用规则;
b. 图表的处理和标准、卡片的连接顺序、语句和记号中使用的缩写、出现在图表中的符号名;
c. 使用的软件技术标准;
d. 标准化的数据元素及其特征。
4.2 验证过程
说明一个程序段修改后,对其性能进行验证的要求和过程(包括测试程序和数据)及程序周期性验征的过程。
4.3
4.4 出错及纠正方法 列出出错状态及其纠正方法。 专门维护过程
说明本文档其它地方没有提到的专门维护过程,例如:
a. 维护该软件系统的输入输出部分(如数据库)的要求、过程和验证方法;
b. 运行程序库维护系统所必需的要求、过程和验证方法;
c. 对闰年、世纪变更需要的临时性修改等。
4.5 专用维护程序
列出维护软件系统使用的后备技术和专用程序(如文件恢复程序、淘汰过时文件的程序等)的目录,并加以说明,内容包括:
a. 维护作业的输入输出要求;
b. 输入的详细过程及在硬设备上建立、运行并完成维护作业的操作步骤。
4.6
程序清单和流程图 引用资料或提供附录给出程序清单和流程图。
程序维护手册
1 概述 .................................................................................................................................... 1
1.1 编写目的 . ...................................................................................................................... 1
1.2 参考资料 . ...................................................................................................................... 1
1.3 术语和缩写词 . .............................................................................................................. 1
1.4 开发单位 . ...................................................................................................................... 1
2 系统说明 ............................................................................................................................ 1
2.1 系统用途 . ...................................................................................................................... 1
2.2 安全保密 . ...................................................................................................................... 1
2.3 总体说明 . ...................................................................................................................... 1
2.4 程序说明 . ...................................................................................................................... 1
2.4.1
2.4.2 程序1(标识符)说明 . ................................................................................... 1 程序2(标识符)说明 . ................................................................................... 2
3 操作环境 ............................................................................................................................ 2
3.1 设备 . .............................................................................................................................. 2
3.2 支持软件 . ...................................................................................................................... 2
3.3 数据库 . .......................................................................................................................... 2
3.3.1
3.3.2 总体特征 . .......................................................................................................... 2 结构及详细说明 . .............................................................................................. 3
4 维护过程 ............................................................................................................................ 3
4.1 约定 . .............................................................................................................................. 3
4.2 验证过程 . ...................................................................................................................... 3
4.3 出错及纠正方法 . .......................................................................................................... 3
4.4 专门维护过程 . .............................................................................................................. 3
4.5 专用维护程序 . .............................................................................................................. 3
4.6 程序清单和流程图 . ...................................................................................................... 3
范文四:软件程序维护手册
程序维护手册
1 概述
1.1 编写目的
编写者可照抄下列语句,说明程序维护手册的编写目的,也可进行适当修改。
“编写程序维护手册的目的是为程序维护人员有效的维护×××××(软件名称)系统提供必要的信息。”
1.2
如:
a. 用户手册;
b. 操作手册;
c. 与本项目有关的其它文档。
1.3
1.4 术语和缩写词 列出本文档中专用的术语、定义和缩写词。 开发单位
说明该项目的提出者、开发者、用户和运行该软件系统的场所。 参考资料 列出本文档引用到的参考资料,包括作者、来源、编号、标题、出版日期和保密级别。
2 系统说明
2.1 系统用途
说明系统具备的功能,如用于控制战斗的系统要接收专门的输入(如势态报告、紧急警报等)并从输入中提取一些数据,再由此导出一些数据,从而形成具体战斗任务的信息和简报。
2.2
2.3 安全保密 说明系统数据的安全保密考虑。 总体说明
根据系统的总体功能,对系统、子系统和作业做出综合性的介绍,并用图表的形式给出系统主要部分的内部关系。
2.4 程序说明
说明系统中每个程序、分程序的细节和特性,以帮助维护人员理解各个程序及它们之间的关系。系统的专用维护程序将在第4.5节(专用维护程序)中说明。
2.4.1 程序1(标识符)说明
2.4.1.1 功能
说明程序的功能
2.4.1.2 方法
说明实现该程序的功能所使用的方法。
2.4.1.3 输入
说明程序的输入、所用介质、运行时用到的数据记录、运行开始时使用的输入数据的类
型及存放单元、与程序初始化有关的入口要求等。
2.4.1.4 处理
介绍程序维护人员需要了解的处理特点及目的,如:
a. 产要的运行,用图表说明该程序的一系列运行的逻辑流程,例如读一个输入,访问一个数据记录、一个判断和一次打印输出,这些运行可用程序内部的程序段或子程序来表示,也可用图表分别详细表示每个重要的运行;
b. 本程序的主要转移条件;
c. 对程序运行的约束条件;
d. 程序运行结束时的出口要求;
e. 与下个程序的通信和联接(运行、控制);
f. 由该程序产生并供处理程序段使用的输出数据类型及存放单元;
g. 程序运行需要的存储器容量、类型及存储位置等主要参数。
2.4.1.5 输出
用便于程序维护人员理解的方式说明该程序的输出。
2.4.1.6 接口
说明该程序与本系统其它部分的接口。
2.4.1.7 表格
说明程序内部的各种表、项的细节和特性,对每张表的说明至少包括:
a. 表的标识符;
b. 使用目的;
c. 使用此表的其它程序;
d. 逻辑划分,如块或部,不包括表项;
e. 基本结构,包括固定长或可变长、固定表目或可变表目;
f. 设计安排,包括表的控制信息、每类表目的结构细节、使用中的特有性质及表内各
项的标识符、位置信息、用途、类型及编码表示。
2.4.1.8 特有的运行性质
说明在操作手册中没有提到的运行性质。
2.4.2 程序2(标识符)说明
用与第2.4.1款相同的方法,说明第2个到第N 个程序。
3 操作环境
3.1
3.2
3.3
3.3.1 设备 逐项说明系统的设备配置及其特性。 支持软件 列出本系统使用的全部支持软件,包括它们的名称和版本号。 数据库 全面说明每个数据库的性质和内容,包括安全考虑。 总体特征
如:
a. 标识符;
b. 使用这些数据库的程序;
c. 静态数据;
d. 动态数据;
e. 数据库的存储介质(如磁带、磁盘和内存)的规格及容量;
f. 系统中程序使用数据库时受到的限制。
3.3.2 结构及详细说明
说明数据库的内部结构。
3.3.2.1 说明该数据库的结构,包括其中的记录和项。
3.3.2.2 说明一个物理记录是一个逻辑记录,还是组成一个逻辑记录的若干个物理记录之
一。说明一个记录的组成部分,如首部或控制段、记录体。
3.3.2.3 说明每个记录结构的域,需要时解释它的目的。对每个域应包括下述内容:
a. 标记或标号;
b. 指明每个数据域的字符长度和位数;
c. 指明该域的允许值范围。
3.3.2.4 扩充,说明为记录增添附加数据域的规定。
4 维护过程
4.1 约定
列出该软件系统设计中使用的全部规则和约定,包括:
a. 程序、分程序、记录、数据域和存储区的标识或标号助记符的使用规则;
b. 图表的处理和标准、卡片的连接顺序、语句和记号中使用的缩写、出现在图表中的符号名;
c. 使用的软件技术标准;
d. 标准化的数据元素及其特征。
4.2 验证过程
说明一个程序段修改后,对其性能进行验证的要求和过程(包括测试程序和数据)及程序周期性验征的过程。
4.3
4.4 出错及纠正方法 列出出错状态及其纠正方法。 专门维护过程
说明本文档其它地方没有提到的专门维护过程,例如:
a. 维护该软件系统的输入输出部分(如数据库)的要求、过程和验证方法;
b. 运行程序库维护系统所必需的要求、过程和验证方法;
c. 对闰年、世纪变更需要的临时性修改等。
4.5 专用维护程序
列出维护软件系统使用的后备技术和专用程序(如文件恢复程序、淘汰过时文件的程序等)的目录,并加以说明,内容包括:
a. 维护作业的输入输出要求;
b. 输入的详细过程及在硬设备上建立、运行并完成维护作业的操作步骤。
4.6
程序清单和流程图 引用资料或提供附录给出程序清单和流程图。
程序维护手册
1 概述 .................................................................................................................... 1
1.1 编写目的 ........................................................................................................ 1
1.2 参考资料 ........................................................................................................ 1
1.3 术语和缩写词 ................................................................................................. 1
1.4 开发单位 ........................................................................................................ 1
2 系统说明 ............................................................................................................. 1
2.1 系统用途 ........................................................................................................ 1
2.2 安全保密 ........................................................................................................ 1
2.3 总体说明 ........................................................................................................ 1
2.4 程序说明 ........................................................................................................ 1
2.4.1
2.4.2 程序1(标识符)说明 ......................................................................... 1 程序2(标识符)说明 ......................................................................... 2
3 操作环境 ............................................................................................................. 2
3.1 设备 ............................................................................................................... 2
3.2 支持软件 ........................................................................................................ 2
3.3 数据库............................................................................................................ 2
3.3.1
3.3.2 总体特征.............................................................................................. 2 结构及详细说明 ................................................................................... 3
4 维护过程 ............................................................................................................. 3
4.1 约定 ............................................................................................................... 3
4.2 验证过程 ........................................................................................................ 3
4.3 出错及纠正方法.............................................................................................. 3
4.4 专门维护过程 ................................................................................................. 3
4.5 专用维护程序 ................................................................................................. 3
4.6 程序清单和流程图 .......................................................................................... 3
范文五:同花顺软件程序编写
一个简单实例
同花顺公式系统:
公式系统可以编辑多种类型的公式, 且每个类型中又又若干分细, 分别是 1, 基本公式 (软件全部函数指标的集合) , 2, 技术指标 (已 自带公式的集合) 、 3,交易系统、 4,条件选股 ,5,五彩 K 线公式, 6,自用公式(自编的公式及以复制 /粘贴过来的他人的公式) 。技术指 标公式是最基本的公式,它用于指标曲线的绘制。技术指标公式是条件选股,交易系统的基础。结合选股条件逻辑判断表达式,即得到条件 选股公式,用于条件选股。技术指标公式结合买卖逻辑判断表达式,得到交易系统公式,用于交易系统指示。技术指标公式结合色彩逻辑判 断表达式,即得到 K 线模式公式,用于描述特定的 K 线模式。公式的编辑在公式编辑器中完成。
公式系统处理的原始数据的分析周期(即相邻两组数据间的时间间隔)可以从 1分钟到 1000天间的任意值,也可以是分笔成交数据, 改变分析窗口显示的分析周期,则公式处理新的分析周期的数据。
学习公式编写,使用的基本方法
基本捷径是从软件公式或他人公式入手,多看多动手边理解其写法,为什么调用这个函数,这个函数的意义是什么,这一句预要表达什么 意思等等。不动手永远不可能学会的。从简单公式入手,先弄懂一,两个公式。从修改公式加入自己的目标语句实现自己目标入手,几乎没 有一个公式是那一个人自己完成的,或多或少都使用了前人的成果。
在编写中多用“测试公式”按钮,让软件作判断,告诉你编写对错与否。
使用彩色编辑可事半功倍。
多用鼠标指针指向不懂的函数,软件马上会告诉你。
公式编写步骤
1.设定公式名称:每个公式都有自己的名称,它由字母或数字组成,最多可以有 9个字符。请注意,公式名称在同类公式中不能重复, 且不能为空。 2.描述公式:用于简单描述该公式的含义(可不填亦能通过) , 3.注释公式:用于描述一个公式如何使用、计 算方法等内容。输入后,在有关窗口按“用法注释”按钮可以查看公式注释(可省略) 。 4. 设计技术指标公式语句 : 公式的形式
则运算或逻辑运算而组成。函数是公式系统的基本成分,它是对数据做某种操作,如 CLOSE()函数表示调用该分析周期的收盘价。 函数由函数名称和参数组成, 参数用函数名后的括号括起来, 每个函数调用的参数可以是变量或常量, 变量是一个随着时间变化而变化的 数据,例如收盘价;常量是一个不随时间变化而变的数据。例如函数 REF(X,N)用于引用 N 周期前的 X 值, X 是一个变量, N 是一个常量, REF(close() ,1) 表示计算上一周期的收盘价。函数若需调用几个参数,则它们在括号内是有顺序的。若没有参数则可以省去括号,例如 CLOSE()函数没有参数,所以写成 CLOSE和 CLOSE()都可以。函数计算得到的结果是一个变量。
计算符将函数连接成为语句。计算符分为算术计算符和逻辑计算符。算术计算符有 +、 -、 *、 /,分别是对计算符两边的数值进行加减乘 除计算;逻辑计算符有 >、 <、>、><>、 >=、 <=、 =、="" and="" (与)="" 、="" or="" (或)="" ,分别是对计算符两边的数值做大于、小于、不等于、大于等于、="" 小于等于、="" 等于、="" 逻辑与、="" 逻辑或的逻辑运算,="" 如果逻辑条件成立返回的计算结果为="" 1,="" 否则为="" 0。="" 例如:2="">1的逻辑运算结果等于 1, 1>2的逻辑运算结果就等于 0。 语句得到的计算结果连成线就是所谓的指标线,不同的语句就得到不同的线,为了在指标图形中互相区 分,不同的线有不同的颜色,而且语句还可以有自己的名称,在指标图形中显示在左上角位置。语句名写在语句的前面,用一个冒号(“:” ) 将它与语句隔开。 语句 “上日收盘价:REF(close,1)” 就表示该语句 REF(close,1)的名称为 “上日收盘价” 。 该语句后而的语句若需引用它, 则写公式名即可,如 MA(上日收盘价 ,20) 意思是对上日收盘价求 20日平均。
设计中间语句:
一个语句将显示一条指标线,一个复杂的公式往往有很多语句,而且有些语句没必要显示出来。这时我们可以把不需要显示语句定义为 中间语句,中间语句的写法只需在一般语句的名称与语句之间的等号,即“ =”即可(亦可用通用的冒号加等于号“:=” ) 。例如,语句“上 日收盘价 =REF(close,1)”就表示该语句为中间语句。重复使用的语句也可以定义成中间语句。
设计其他公式语句:
其他类型的公式显示的不是指标线,而是相应的操作,如条件选股公式显示的是选股结果,交易系统公式显示的是交易指示(用
函数可以用简写,如收盘价开盘价分别用 C , O 来表示,在编写中往往可以自动变成大写字母,可以以此判断。函数名编写正确时字母变 为大写。编写中要用彩色编辑,这样可以指示出软件对于此函数是否认可--应变成彩色。
公式编写完测试公式通过后,还需进行曲线属性的设置,在“曲线属性” :如显示曲线的位置是主图,副图,成交量图等,还可以设置是 否显示曲线参数或只显示参数而不显示曲线,选择显示的图标,提供象箭头,圆,凌形(buy 红色向上箭头, buy1黄色箭头, 1空心三角 形, 2空心圆, 4空心菱形, 5星花 ... ) , 曲线颜色等 ... 最后再测试通过,确定退出编辑。
未来函数
公式系统对数据的运算是基于一系列函数,函数必须满足时间不变性,即时间靠后的数据不对时间靠前的结果产生影响(判断是否未来 函数的依据) 。这个很重要!对于未来函数可以理解为:某一量依赖另一量,如量 A和量 B , B 变化使 A 改变,那么 A 是 B 的函数,如果 B 是稍后的量, A 是稍早的量, A 跟着 B 变, A 是 B 的未来函数。未来函数是有时间周期的,在一个短的周期内可能是未来函数,但在稍长的 周期内就不是未来函数,比如
就是说你把周期设置得越长 , 被确认的时间就越长 (比如 ZIG(3,30)),如果把它设置的很短 (比如 ZIG(3,1)),那就跟
未来函数有:
zig
PEAK
PEAKBARS
TROUGH
TROUGHBARS
所以任何函数都具有未来函数特性,也没什么可怕。第一不要依据公式入市,第二还是不要依据公式入市!不要迷信公式。
公式只能给你一个信号,最终判断取舍要靠人。
关于未来函数的典型例子
有这么多人对一个叫鬼谷神算公式推崇,甚至将它说成 ' 极品‘。我感到吃惊。应该把此公式的本质性的东西反映出来才是 ; 该公式使用了未 来函数,因而有“很高” 的准确率 , 因为它是马后炮所以 100%准。这是需要大家十分注意的。
我不反对使用未来函数 , 但要充分认识其特有的“欺骗性”--已经出现的“结果
在此,我要说的是本来是一个及其简单的公式,故意弄成很复杂,高深,写了那么多行毫无相干的东西。是忽悠人的。我给“简化”了一下, 只剩下 6行。希望大家知道这样的公式人人可写。
这样的公式恐怕是别有用心之人忽悠卖钱的。
改成下面的公式,而且完全显示买卖两个信号。其核心是 Z 字转向于其他没关系。 Z 字转向即为未来函数
而 ZIG 函数的定义为 ,当前收盘价超过上次 ZIG 转向输出值的 N%,则输出当前收盘价并 ZIG 转向。对该公式为 50/5=10,即当价格变 化量超过 10%时转向。
对于下面的公式:
第一行, ZIG 函数,它输出的是就是价格,为了欺骗乘以 100;
第二行,是第一行的 2日平均;
第三行,第四行是第一行,第二行的金叉,死叉;
而买卖信号的出现就是在于金叉,死叉。
请大家试试看。
简化的公式 :
B:zIG(3,50/5)*100,colorwhite;
G:MA(B,2),coloryellow;
D:=CROSS(B,G)*1000,colorred;
W:=CROSS(G,B)*1000,colorblue;
DRAWTEXT(W=1000,B*1.05,'卖 ' ),colorgreen;
DRAWTEXT(D=1000,B*1.05,'买 '),colorred;
原公式
公式名称:鬼谷神算
VAR2:=HIGH-REF(HIGH,1);
VAR3:=REF(LOW,1)-LOW;
VAR4:=SUM(IF(VAR2>0 AND VAR2>VAR3,VAR2,0),25); VAR5:=SUM(IF(VAR3>0 AND VAR3>VAR2,VAR3,0),25); VAR6:=VAR4*100/VAR1;
VAR7:=VAR5*100/VAR1;
VAR8:=MA(ABS(VAR7-VAR6)/(VAR7+VAR6)*100,15); VAR9:=(VAR8+REF(VAR8,15))/2;
A:=(VAR7>VAR6 AND VAR7>25 AND VAR6<>
B:ZIG(3,50/5)*100,COLORWHITE;
G:MA(B,2),COLORYELLOW;
D:=CROSS(B,G)*1000,COLORRED;
W:=CROSS(G,B)*1000,COLORBLUE;
E:=REF(INDEXC,1);
F:=SMA(MAX(INDEXC-E,0),3,1)/SMA(ABS(INDEXC-E),3,1); VAR10:=F AND F<>
VAR11:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; VAR12:=SMA(VAR11,3,1);
VAR13:=SMA(VAR12,3,1);
VAR14:=VAR13 AND VAR13<>
MM:=A AND D AND VAR10 AND VAR14 ;
DRAWTEXT(W=1000,B*1.05,'卖 ' ),COLORGREEN;
DRAWTEXT(D=1000,B*1.05,'买 '),COLORRED;
[ 此文章的编辑者为 : BCXYMMLL, 2007-03-21 16:55 ] 语言规范:
在自定义公式里面的各种符号(如, “ ; ” )只能用半角不能用全角。 关键字 if else while break continue return (无大小写之分) 常数 浮点数、整数、字符串
分隔符 “ ” ‘ ’ ( ) ; { } 注释 /* */
标识符 由字母和数字组成,由字母开头,不分大小写
运算符(优先级从高到低排列,同级同行)
* /
+ -
!= > <>= <>
Or
语句 赋值 a = b
条件 IF (a==b) c=d;
循环 while a==b c=d;
函数调用 func(a,b)
赋值语句:
其一般形式为 :
a=b; 含义为将 b 的值付给 a 。
几个运算符“=”赋值、 “ :=” 赋值“ :”赋值并输出数值或字符串“ :>”赋值并输出图形。
注意:“=”和“ :=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软 件。
同花顺公式函数注释(常用部分)
逻辑函数:
1、条件函数:根据条件求不同的值。
用法:IF(X,A,B)若 X 不为 0则返回 A ,否则返回 B 。 例如:(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低 值。
引用函数:
1、满足条件的周期数:统计满足条件的周期数。
用法:COUNT(X,N),统计 N 周期中满足 X 条件的周期数,若 N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计 20周期内收阳的周期数。
2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。
用法:BARSSINCE(X):第一次 X 不为 0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过 10元时到当前的周期数。 3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。
用法:BARSLAST(X),上一次 X 不为 0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1, 1) 表示上一个涨停板到当前的 周期数。
4、有效周期数:求总的周期数。
用法:BARSCOUNT(X),第一个有效数据到当前的天数。
5、向前赋值:将当前位置到若干周期前的数据设为 1。
用法:BACKSET(X,N),若 X 非 0,则将当前位置到 N 周期前的数值设为 1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前 一周期数值设为 1,否则为 0。
6、求和:求总和。
用法:SUM(X,N),统计 N 周期中 X 的总和, N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近 5个交易日的 成交量之和。 SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成 交量之和。
7、移动平均:求移动平均。
用法:SMA(X,N,M),求 X 的 N 日移动平均, M 为权重。算法:若 Y=SMA(X,N,M)则 Y=[M*X+(N-M)*Y']/N,其中 Y' 表示上一周期 Y 值, N 必须大于 M 。例如:SMA(CLOSE,30,1)表示求 30日移动平均价。
8、向前引用:引用若干周期前的数据。
用法:REF(X,A),引用 A 周期前的 X 值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。
9、简单移动平均:求简单移动平均。
用法:MA(X,N),求 X 的 N 日移动平均值。算法:(X1+X2+X3+, , , +Xn)/N。例如:MA(CLOSE,10)表示求 10日均价。
10、最低值:求最低值。
用法:LLV(X,N),求 N 周期内 X 最低值, N=0则从第一个有效值开始。例如:LLV(LOW,0) 表示求历史最低价。
11、最高值:求最高值。
用法:HHV(X,N),求 N 周期内 X 最高值, N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求 30日最高价。
12、指数平滑移动平均:求指数平滑移动平均。
用法:EMA(X,N),求 X 的 N 日指数平滑移动平均。算法:若 Y=EMA(X,N)则 Y=[2*X+(N-1)*Y']/(N+1),其中 Y' 表示上一周期 Y 值。 例如:EMA(CLOSE,30)表示求 30日指数平滑均价。
13、动态移动平均:求动态移动平均。
用法:DMA(X,A),求 X 的动态移动平均。算法:若 Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中 Y' 表示上一周期 Y 值, A 必须小于 1。例 如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。
14、最高值周期数:求上一高点到当前的周期数。
用法 :HHVBARS(X,N):求 N 周期内 X 最高值到当前周期数, N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新 高到到当前的周期数。
15、最低值周期数:求上一低点到当前的周期数。
用法:LLVBARS(X,N):求 N 周期内 X 最低值到当前周期数, N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得 10日 最低点到当前的周期数。
16、加权移动平均:求加权移动平均。
用法:WMA(X,A),求 X 的加权移动平均。
算法:若 Y=WMA(X,A) 则 Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值, X1表示上 一周期值 ... 。
例如:WMA(CLOSE,20)表示求 20日加权均价。
17、求和:向前累加到指定值到现在的周期数。
用法:SUMBARS(X,A):将 X 向前累加直到大于等于 A, 返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周 期数。
时间函数:
1、总开盘分钟:求当前代码类型的开市交易时间。
用法:TRADETIME 。返回交易时间,单位为分钟。目前一般市场都返回 242,与日期或具体的股票无关。
2、距开盘分钟:求当前时刻距开盘有多长时间。
用法:FROMOPEN 。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回 31。
3、距午夜秒:求当前时刻距开盘有多长时间。
用法:FROMNIGHT 。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回 36000。
4、时间格式:转换时间格式。
用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:
(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。
5、时间差:计算两个时间之间的差。
用法:COUNTTIME (N,L,K ) 。 N 、 L 为时间,其格式为 YYYYMMDD 。 K 为 1、 2或者 3。当 K 为 1时返回第二个之间比第一个时间晚多 少年。当 K 为 2时返回第二个之间比第一个时间晚多少月。当 K 为 3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME (20000808, 19990606, 2)其返回值为 -2。注意:这里返回值有正负号。
算术函数:
1、绝对值:求绝对值。
用法:ABS(X)返回 X 的绝对值。例如:ABS(-34)返回 34。
2、介于:介于两个数之间。
用法:BETWEEN(A,B,C)表示 A 处于 B 和 C 之间时返回 1,否则返回 0
例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于 5日均线和 10日均线之间。
3、最大值:求最大值。
用法:MAX(A,B)返回 A 和 B 中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回 0。 4、最小值:求最小值。
用法:MIN(A,B)返回 A 和 B 中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。
5、求模运算:求模运算。
用法:MOD(A,B)返回 A 对 B 求模。例如:MOD(26,10)返回 6。
6、求逻辑非:求逻辑非。
用法:NOT(X)返回非 X ,即当 X=0时返回 1,否则返回 0。例如:NOT(5>3)返回 0。
7、范围:介于某个范围之间。
用法:RANGE(A,B,C)表示 A 大于 B 同时小于 C 时返回 1,否则返回 0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收 盘价大于 5日均线并且小于 10日均线。
8、求相反数:求相反数。
用法:REVERSE(X)返回 -X 。 例如 REVERSE(CLOSE)返回 -CLOSE 。
9、余弦值:求余弦值。
用法:COS(X)返回 X 的余弦值。
用法:SIN(X)返回 X 的正弦值。
11、平方根:开平方。
用法:SQRT(X)为 X 的平方根。例如:SQRT(CLOSE)收盘价的平方根。
12、上穿:两条线交叉。
用法:CROSS(A,B)表示当 A 从下方向上穿过 B 时返回 1, 否则返回 0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示 5日均线与 10日均线交金叉。
13、维持:两条线维持一定周期后交叉。
用法:LONGCROSS(A,B,N)表示 A 在 N 周期内都小于 B, 本周期从下方向上穿过 B 时返回 1, 否则返回 0。例如:
LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示 5日均线维持 5周期后与 10日均线交金叉。
14、空:判断是否为空。
用法:ISNULL(A)表示如果 A 为空(即没有数据)则返回 1, 否则返回 0。
15、幂:求幂。
用法:POW (X,Y ) 。求 X 的 Y 次幂。例如:POW (2,3)为 8。
绘图函数
位图
含义 :在图形上绘制位图。
用法 :
DRAWBMP(COND,PRICE,BMPFILE),当 COND 条件满足时 , 在 PRICE 位置画 BMPFILE 文件名指定的 BMP 位图 (缺省路径为软件安装目 录登录用户名 ) 。
例如:DRAWBMP(CLOSE>OPEN,LOW,'SUN') 表示当收阳时在最低价位置画软件安装目录登录用户名 Sun.BMP 位图。
※ BMPFILE 参数指定的 BMP 文件默认路径为当前用户目录,如果不带后缀名即表示 BMP 文件,也可带后缀名使用 JPG 和 GIF 文件。 也可不用用户目录而使用全路径,路径中的 '' 要写两个以下字符串作为参数都是合法的,如果文件存在的话:
填充背景
含义 :根据条件填充背景区域。
用法 :
DRAWGBK(COND,COLOR),填充满足 COND 条件的背景区域。 COLOR 可以为渐变颜色 STRIP , 也可以为 BMP 图形文件名 (缺省路径为
DRAWGBK(CLOSE>OPEN,'MyBMP');表示收阳时用软件安装目录登录用户名 MyBMP .BMP 填充背景。
画图标
含义 :在图形上绘制小图标。
用法 :
DRAWICON(COND,PRICE,TYPE),当 COND 条件满足时 , 在 PRICE 位置画 TYPE 图标, TYPE 是曲线标志的名称。
例如:DRAWICON(CLOSE>OPEN,LOW,
显示文字
含义 :在图形上显示文字。
用法 :
DRAWTEXT(COND,PRICE,TEXT),当 COND 条件满足时 , 在 PRICE 位置书写文字 TEXT 。
例如:DRAWTEXT(CLOSE/OPEN>1.08,LOW,' 大阳线 ') 表示当日涨幅大于 8%时在最低价位置显示 ' 大阳线 ' 字样。
RGB 颜色
含义 :指定颜色。
用法 :
RGB(R,G,B),表示用三原色红 (R)绿 (G)蓝 (B)混合组成指定颜色 , 每种颜色值可以设定为 0-255。
例如 RGB(255,0,0)表示红色, RGB(0,0,255)表示蓝色
画柱线
用法 :
STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY),当 COND 条件满足时 , 在 PRICE1和 PRICE2位置之间画柱状线,宽度为 WIDTH(10为标准间距 ),EMPTH 不为 0则画空心柱。
例如:STICKLINE(CLOSE>OPEN,CLOSE,OPEN,0.8,1)表示画 K 线中阳线的空心柱体部分。
提示文字
TIPTEXT(COND,PRICE,TEXT),当 COND 条件满足时 , 在 PRICE 位置显示图标,若 PRICE 为 0,则在图形底部显示图标。
例如:TIPTEXT(CLOSE/OPEN>1.08,LOW,' 大阳线, 股价为 :'+close)表示当日涨幅大于 8%时在最低价位置显示图标 , 鼠标移近时显示文 字 ' 大阳线 , 股价为 :15.88'字样。
※显示为三角图标
画垂直线
含义 :在图形上绘制垂直线。
用法 :
VERTLINE(COND,TYPE),当 COND 条件满足时 , 沿垂直方向绘制 TYPE 类型的线段 ,TYPE=0表示实线, 1表示虚线 '---' , 2表示点线 '...' , 3表示点划线 '-.-.-' , 4表示点点划线 '-..-..-' 。
例如:VERLINE(HIGH>=HHV(HIGH,20),1)表示在创 20天新高画垂直虚线
含义 :在图形上绘制水平线。
用法 :
HORLINE(COND,PRICE,TYPE,EXTEND),当 COND 条件满足时 , 在 PRICE 位置沿水平方向绘制 TYPE 类型的线段 ,TYPE=0表示实线, 1表示虚线 '---' , 2表示点线 '...' , 3表示点划线 '-.-.-' , 4表示点点划线 '-..-..-' 。 EXTEND=1 表示向左延长, =2表示向右延长, =3表示左 右
由简单的公式编写开始
这里举一些最简单的例子,有些只有一条语句且函数简单,较复杂的公式中函数复杂且语句较多。
收盘价线 CLOSE 均线的画法 计算 N 日内收盘价的算术平均值,公式为:MA(X,N)表示 X 的 N 日平均。 例 如: MA1: MA (CLOSE,5) , coloryellow ; 表示为:参数名 画一条 5日收盘价的均线 设置该线为黄色 MA2:MA(C,20),color0000ff(20日收盘价均线,颜色为红色)
MA3:MA(c,250),color00ff00(年线,绿色)
均线 :MA(c,N);(周期 N 可设置最大,最小,缺省)
换手率 换手率指当期的成交量占流通股本的比例。
公式:hs:VOL/CAPITAL; VOL为当期成交量, CAPITAL 为流通股本。
乖离率 当前股价与均线的偏差的程度
gl:(c-ma(c,20))/ma(c,20)*100;
量比 当期成交量与 5日均量的比
lb:vol/ma(vol,5);
涨幅 涨幅指今日收盘价相对于昨日收盘价的变动幅度,即(今日收盘价-昨日收盘价)/昨日收盘价 *100%,
昨日收盘价的公式为:REF(CLOSE,1),
涨幅的公式:(CLOSE-REF(CLOSE,1))/REF(CLOSE,1)
创新高 创新高指当日最高价是最近一段时间的最高价:HIGH=HHV(HIGH,N) 其中的 HIGH 为当期最高价, HHV(X,N)是求 N 周期内 X 最高值。因此该公式的含义是当日最高价创N日新高时返回值为1,否则为0。
横 盘 整 理 横 盘 整 理 指 最 近 一 段 时 期 价 格 在 一 定 幅 度 之 内 摆 动 : (HHV(CLOSE,10)-LLV(CLOSE,10))/CLOSE<0.05 其中的="" llv(x,n)是求="" n="" 周期内="" x="" 最低值。="" 因此该公式表示="" 10日收盘价振幅振="" 幅在="">0.05>
放量、缩量(成交量函数为 VOL )
A、放量
a.今天成交量较昨天增加了 1倍,表示如下: VOL/REF(VOL,1)>2 b.今天成交量较 10个交易日平均成交量放大了 1倍,表示如 下:
a:=ma(vol,10); Vol/a>2 或者直接用如下公式表示: vol/ma(vol,10)>2;
c.今日的 5日均量较 10个交易日平均成交量放大了 1倍,表示如下: a:=ma(vol,10); b:=ma(vol,5); b/a>2;
d.今日的成交量超过了整个流通盘的 5%,表示如下: vol/capital>0.05;其中 capital 代表流通盘。
B、缩量
a.今日成交量较昨日减少了一半,表示如下: vol/ref(vol,1)<>
b.今 日 成 交 量 较 10个 交 易 日 平 均 成 交 量 减 少 一 倍 , 表 示 如 下 : a:=ma(vol,10); vol/a<2; 或="" 者="" 直="" 接="" 用="" 如="" 下="" 公="" 式="" 表="" 示:="">2;><>
c.今日的 5日均量较 10个交易日平均成交量减少 1倍,表示如下: a:=ma(vol,10); b:=ref(a,5); a/b<>
d.今日的成交量低于了整个流通盘的 5%,表示如下: vol/capital<>
上涨、下跌
上涨 今天的涨幅达到 5%以上,表示如下: close>ref(close,1)>1.05;
5日均价连续上涨,表示如下: a:=ma(close,5); b:=ref(a,1);
下跌 今天的跌幅达到 5%以上,表示如下: close/ref(close,1)<>
5日均价连续下跌,表示如下: a:=ma(close,5); b:=ref(a,1); a<>
描述 K 线 阳线 close>open; 阴线 close< open;="" 高开="" open="">ref(close,1); 低开 open< ref(close,1);="" 跳空高开(high="" 为最高="" 价)="" open="">ref(high,1); 跳空低开(low 为最低价) open<>
引用大盘数据
INDEXDATA(“ N ” , &X, K) INDEXDATA 求某商品相关的数据
例:INDEXDATA(
个股于大盘的比较
CLOSE/INDEXDATA(
股价在 N 日线附近--这可是反映股价调整幅度的好公式(选股)
a:=MA(C,N); 选股时输入 20, 30, 60可选不同均线附近的股,
ABS(C-a)/C<=0.02; 在某均线的="">=0.02;>
只显示数值不显示曲线 在曲线属性-输出线形的勾去掉,在公式语句使用输出符出“:”
二,多语句的公式编写
均线多头排列
a1:=ma(c,5);
a2:=ma(c,10);
a3:=ma(c,20);
a4:=ma(c,30);
count(a1>a2 and a2>a3 and a3>a4,3)=3 and close>open; (conut 统计满足条件的周期数, 5, 10, 20, 30日均线呈多头排列) , 均线空头排列
a1:=ma(c,5);
a2:=ma(c,10);
a3:=ma(c,20);
a4:=ma(c,30);
count(a1< a2="" and="">< a3="" and="">< a4,3)="3" and="">< open);="" (5,="" 10,="" 20,="" 30日均线呈空头排列)="">
均线金叉
a;=ma(c,5);
b:=ma(c,10);
cross(a,b); (前二句是 5、 10日均线, cross 是交叉函数, cross(a,b)表示 5日均线上穿 10日均线金叉) 。
均线死叉
a;=ma(c,5);
b:=ma(c,10);
cross(b,a); (前二句是 5、 10日均线, cross 是交叉函数, cross(b,a)表示 5日均线下穿 10日均线死叉) 。
均线粘合
ma1:=ma(c,5);
ma2:=ma(c,10);
ma3:=ma(c,20);
p1:=abs(ma1-ma2)+abs(ma2-ma3);
p1/c< 2/100="" and="" ma1="">ref(ma1,1) and ma2>ref(ma2,1); (前三句是三根均线, p1是第一根均线减第二根均线差的绝对值与第二根 均线减第三根均线差的绝对值之和,最后一句是 p1与收盘价的比值小于一定比率 2%(一般该比率为 2%以下,同时前二均线今日比昨日上 翘 ) 。
在个股主图叠加(引用大盘数据的)线:
(HHV(H,n)-LLV(L,n))/(HHV(INDEXDATA(
*(INDEXDATA(
活跃度
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT)); 成交笔数
活跃度 :CJBS/CAPITAL*100,VOLSTICK;
MA13:MA(活跃度 ,13);
每笔均量
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
每笔均量 :VOL/CJBS*100,COLORYELLOW;
每笔均量 ,STICK,COLORRED;
MA5:MA(每笔均量 ,5),COLORWHITE;
MA13;MA(每笔均量 ,13),COLORMAGENTA;
MA60:MA(每笔均量 ,60),COLORGREEN;
每笔均额
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
每笔均额 :AMOUNT/CJBS,COLORYELLOW;
每笔均额 ,STICK,COLORRED;
MA5:MA(每笔均额 ,5),COLORWHITE;
MA:MA(每笔均额 ,13),COLORMAGENTA;
MA:MA(每笔均额 ,60),COLORGREEN;
交易强度
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
交易强度 :VOL*100/CJBS/CAPITAL*100,VOLSTICK;
三,公式函数的活用
剔除选定股票,选股时剔除 ST 股票
STRFIND(STRLEFT(STKNAME,2),\'ST\')=0; 字符串函数 , 符合条件时返回为 0。
获得成交笔数
MAX(0,SUBSAMEDAY(&VOLAMOUNT))
变色柱线(在个股于指数之间画不同颜色的柱线)
STICKLINE(个股 >指数 , 个股 , 指数 ,4,0),color6666ff;
STICKLINE(个股 <指数 ,="" 个股="" ,="" 指数="">指数>
变色曲线(符合条件时改变颜色,下为用于 KDJ 公式)
k:PARTLINE(k,k>d,RGB(255,0,0),k[ 此文章的编辑者为 : BCXYMMLL, 2007-03-17 15:26 ]
公式中引用其他公式
A2:=BARSLAST(REF(CROSS(KDJ.k,KDJ.d),1));引用 KDJ 公式的 K , D 并金叉
B2:=REF(C,A2+1)>C AND REF(KDJ.k,A2+1)DRAWTEXT(FILTER(B2>0,5),L+0.39,\'KDJ底背 \'),coloryellow;
=、>=m&&add[q+1]>