Thursday, May 30, 2019

批处理命令Start的使用介绍

启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口
Start
启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。

语法
start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]

参数
"title" 指定在“命令提示符”窗口标题栏中显示的标题。
/dpatch 指定启动目录。
/i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
/min 启动新的最小化窗口。
/max 启动新的最大化窗口。
/separate 在单独的内存空间启动 16 位程序。
/shared 在共享的内存空间启动 16 位程序。
/low 以空闲优先级启动应用程序。
/normal 以一般优先级启动应用程序。
/high 以高优先级启动应用程序。
/realtime 以实时优先级启动应用程序。
/abovenormal 以超出常规优先级的方式启动应用程序。
/belownormal 以低出常规优先级的方式启动应用程序。
/wait 启动应用程序,并等待其结束。
/b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
非执行文件只要将文件名作为命令键入,即可通过其文件关联运行该文件。有关使用 assoc 和 ftype 在命令脚本中创建这些关联的详细信息,请参阅“”。
在运行的命令的第一个标记为“CMD”字符串但不包括扩展名或路径限定符时,“CMD”将被 COMSPEC 变量的值取代。这样可以防止用户从当前目录选取 cmd。
当您运行 32 位图形用户界面 (GUI) 应用程序时,cmd 不会在返回到命令提示符之前等待应用程序退出。如果从命令脚本运行应用程序,则不会发生这种新情况。在运行的命令中第一个符号不包括扩展名的情况下,Cmd.exe 使用 PATHEXT 环境变量的值确定要查找的扩展名以及查找顺序。PATHEXT 变量的默认值为:COM;.EXE;.BAT;.CMD(语法与 PATH 变量相同,使用分号分开不同元素)。当您搜索可执行文件且在任何扩展名上都没有匹配项时,start 将搜索目录名。

具体例子:

说明:如果你所在程序的路径中带有空格,那么必须用“”把路径括起来,否则系统会提示找不到XX文件,另外,在运行某些程序时,需在路径的前面加一对空白的“”,表示创建一个空白的窗口,它指向的程序是XXXXXXXX。还有就是别忘了空格。

当我想运行位于“D:/draw/”的“photoshop.exe”使,应该使用以下命令:
start “”“D:/draw/photoshop.exe” 表示以常规窗口运行程序

如果想让程序以最大化窗口运行,则使用以下命令:

start /max“”“D:/draw/photoshop.exe” 表示以最大化窗口运行程序

最小化这是这样:

start /min "" "D:/draw/photoshop.exe" 表示以最小化窗口运行程序

等待某个程序允许完毕,也就是窗口关闭后,再打开下一个程序这可以这样:

start /w "" "D:/draw/photoshop.exe"
start "" cmd.exe
 https://www.jb51.net/article/43571.htm

Wednesday, May 29, 2019

雷电安卓模拟器扫一扫功能介绍

在使用模拟器时,需要扫描二维码的时候越来越多,现在很多模拟器都能扫描二维码,但是使用非常复杂,需要使用摄像头才能进行扫一扫操作,电脑没有摄像头的用户就无法使用扫一扫功能。雷电模拟器最新版支持扫一扫,无需摄像头,即开即扫,一秒识别。
如何在雷电模拟器使用扫一扫功能?
一、打开一个有扫一扫功能的应用或游戏(如下图)

雷电模拟器


二、开启扫一扫功能,在弹框中选择截取二维码
雷电模拟器

三、模拟器会弹出截取框,随意拖动截取框就能截取框内二维码并识别
雷电模拟器

注意:截取框会在打开扫一扫功能时自动弹出,可在屏幕中随意拖动。需要雷电模拟器3.0.7及以上版本才能使用。

Tuesday, May 28, 2019

快速准确地将CNKI数据导入Endnote --转自科学网

1 检索文献
打开www.cnki.net
在搜索框中输入检索词,例如“中国经济”,点击“检索”按钮。



3 导出题录数据
选择想要的文献,点击“导出、分析”按钮。

出现以下网页

点击“导出/参考文献”按钮。

则出现以下网页。

点击“EndNote”前的单选框选中Endnote。

则出现以下网页。

点击“复制到剪贴板”按钮。

则这些题录信息就全部复制到剪贴板中了,有提示。

新建一个文本文档,将这些题录信息复制进去。

需要注意的是,在这题录信息中,如果页码不连续,则表示为“64-76+221”的形式。这表示文献从64页到76页是连续的,还有一部分(通常是参考文献或英文题名、摘要)在221页,页码之间用“+”连接。而在GB 7714—2005《文后参考文献着录规则》中,这个连接符号应使用“,”。所以在这里,需要用“查找替换”功能把“+”替换成“,”。
完成后保存这个txt文档,例如保存为“2012-09-23.txt”。至此,题录数据的导出就完成了,接下来要做的是在endnote里导入这些题录数据。
4 在endnote里导入题录数据。
打开endnote X6,选择一个已存在的endnote library文档,或新建一个endnote library文档。在这里举例,就新建一个名为2012-0-13.enl的endnote library文档。

在菜单栏中依次选择“File”→“Import”→“File...”。

出现以下对话框,并确认Improt Option是“EndNote Import”,Duplicates为“Import All”,Text Translation为“Chinese Simplified (GB18030)”。

选择刚才生成的2012-09-13.txt文档。

这样就是选中了:

选中的效果是:

注意到现在所有的文献全部在左边栏的“Imported References”中。我们可以在这个分类下把导入的文献整理好后再分门别类的归入我们设好的Groups里,方便使用。
到此为止,题录数据的导入就完成了。接下来我们要做的是全文数据的导入(如果有全文的话)。
5 下载全文数据
回到查询文献的网页,在“下载”那一列有表示下载的图标,如果图标是绿色的,点此即可下载到全文文献。用这种方式下载到的是CNKI的文献格式,如caj、kdh等格式的文档。如果想下载pdf格式的文献,可以点开文献,找里面的pdf链接进行下载。下载的文献最好放在一个专用的文档夹里,按文档名排序,方便之后全文数据的导入。

6 将全文数据导入endnote
将导入的文献题录按Title排序,即:

选择第一个文献,在右边预览窗口中选中“Reference”选项卡,则所有的题录信息都显示出来。把滚动条向下滚动直到显示出“Fiel Attahments”条目。

将保存好的全文文档复制到“File Attachment”中。

点击“File”→“Save”或直接用“Ctrl+S”进行保存操作后,附件才正式加上。
 
重复以上的工作,直到大功告成。

http://blog.sciencenet.cn/blog-485-616151.html

Monday, May 20, 2019

LastactiviyView-能查看电脑所有的操作记录的小软件

下载:pan.baidu.com/s/1dGxbMC 密码:vbev
备用下载:url.cn/5VsbhRy

平时呢,小编也介绍过好多文件搜索的软件,今天推荐一个更厉害的,能查看你电脑平时访问哪些软件或进程,比如你的软件打开记录、视频播放记录等等,这个软件是读取系统log、注册表等日志信息,确实给力。

1、简介


LastactiviyView可以从正在运行的系统上的各种源收集信息,并显示用户执行的操作和此计算机上发生的事件的日志,包括:正在运行的exe文件打开/保存对话框、从资源管理器或其他软件打开文件/文件夹、软件安装、系统关机/启动、应用程序或系统崩溃、网络连接/断开等。

2、实测


下载,解压,直接打开,如下,就能看到小编最近干了写啥,比如看了部电视剧,打开了好多软件



进阶功能就是,我们可以查找指定格式的访问记录ctrl+F,开启如下窗口,比如搜索mp4格式的就能搜到此视频格式的所有访问记录,一览无遗。

话不多说,自行体会才是真,相信此软件肯定有适用于自己工作学习娱乐的地方。

Sunday, May 19, 2019

文华财经:多周期同列,如何取消副图指标


粉末XRD解单晶详细的测试条件及分析方法

【转】学研汇测试工程师与数据分析工程师,根据平时的测试与数据分析经验,倾力整理的关于粉末XRD解单晶的测试注意事项以及解结构的一些分析说明,希望对大家有所帮助,如有任何疑问或意见,请点击阅读原文对我们留言

--【背景提示】--

20世纪以来发展的单晶X-ray衍射技术,无疑对晶体分子结构的分析非常重要且非常有效。该项研究技术将会持续贯穿于现今的21世纪,特别是在中子光源、同步光源建立后,单晶衍射技术也将赢来新的契机。然而,单晶衍射在样品的选择上有要求,需要合适的尺寸、较好的品质,这同时也是培养质量好的单晶的重要难点。随着仪器设备的发展,计算机运行速度的加快以及数据分析方法的持续开发,使得我们能够通过收集高质量的粉末XRD衍射数据去解出精确的单晶结构。

1977年,Malmros和 Thomas Young等将H.M.Rietveld提出的全谱粉末衍射图最小二乘法拟合结构修正法(Rietveld法)引入到粉末XRD衍射分析中之后,该方法得到快速发展。Rietveld法在修正结构时对初始模型的选择非常重要,一些简单的物质通过合适的初始模型进行修正也能获得精确的就够。然而,对于一些新结构物质或者一些复杂结构的物质,基本不可能根据经验去选择合适的初始结构模型。由于现代计算机运算速度的大幅度提高,解析单晶的方法在粉末xrd衍射上也得到一些应用。将单晶解析的方法与Rietveld法结合,能够有效的解决粉末衍射解析单晶材料的结构,该方法也叫ab initio从头测定结构法。近年来运用该方法,以及同步/中子粉末衍射数据解出很多复杂结构,如下例:

--【过程详解】--

1.  数据采集

首先收集高质量的粉末衍射数据,通过查阅已发表的期刊论文中可以看出,运用同步辐射光源或者中子衍射得到的XRD数据能够较为有效的解出精确结构。当然也有研究者运用实验室的光源收集的XRD数据也能获得合理精确的结构,不同的样品在衍射质量上有差异。通常认为:

①  应采用步进扫描方式,步长不超过0.02°,主峰相对衍射强度大于1万,半高宽FWHM是步长的3-5倍以下较理想。(有些有机分子在空气中不太稳定,可适当控制扫描范围不低于60°,测样时间在30min内完成);

②  样品颗粒最好控制在10um左右(350-400目)或以下,理想的粒径大小为1~5um ,粒径不能太小,太多较小的纳米粒子易造成峰的宽化,而一颗大粒径的就能出现择优取向的问题,这在制样时都得注意;

③  未知全新结构的样品的结晶性或者纯度要高,可采用重结晶的方式提高结晶度和纯度。

根据文献资料记录以及个人解结构经验,在利用实验室光源收集数据时推荐以下的测样条件:

Quality of data
B/B+
A-/A
A++
Step(°)
0.01-0.02
0.01-0.02
0.01-0.02 or <0.01
Intensity
~10000 or above
~10000 or above
~10000 or above
Range (2θ)
5~60/80
5~130/150
5~60/80
5~130/150
5~130/150
Total time
~30 min
~ 1h
For hours
For days or no ceiling

总之,个人根据自己样品的质量和实际实验环境,选择合适的测样条件,样品质量越好且收集的数据越好的样品,解出来的结构也就越可靠,误差也越小。实验室的条件收集的数据分辨率相对较低,有实验条件的在放样前对样品进行压片,使测试面较为平整光滑,尽量收集到高角度的数据,提高步扫的停留时间,这些对于利用实验室光源测得的XRD数据来解全新结构而言尤为重要

2. 数据处理


第一步指标化,也就是根据衍射峰对应的晶面间距解晶格参数,从而进一步确定晶面指数(hkl),指标化的方程在数学上是多解的,人们通常用品质因子(FOM, Figure of Merit)来判断指标化结果的可靠性。现今开发的多种指标化程序,例如AUTOX, BH, CSD, DICVOL, ED, FZON, ITO, LATTPARM, POWDER, PROSZKI, TAK, TREOR, UNITCELL以及McMaille等,手动和自动寻峰指标的都有,其中最为流行的为Dicovel, Treor90和ITO。Dicvol是通过二分原理实现穷举过程的指标化程序,对输入的数据要求也很高,不能含有过多杂质峰。Treor采用试差法为原理的程序包,也能对低对称性晶系求解,速度比Dicvol快,但不能保证结果的准确性。


ITO是一个自动指标化程序包,主要用于正交晶系以及更低对称性的结构的求解过程。我在一些常见的精修相关软件如fullprof、cmpr等软件中能够看到可以附带运用这些子程序。我国中物院也研发了一款PowderX软件,功能强大,其中就包含了Treor90程序。对于指标化比较复杂的晶系所花费的时间较久,可用超级计算平台能较快得到满意结果。

第二步确定空间群,先利用程序进行峰型拟合提取衍射强度I,如中科院“十五”信息化建设重大专项项目资助完成的FPPF程序,在采用Pawley、Le Bail等方法分峰获得独立结构因子F,根据消光规律确定空间群,从而进一步可解得初始结构。其遵循的原理如下公式所示:



在确立空间群过程中,可能不止一种结构,当存在多种解时,需要考虑多种合适的结构,此时的工作量也会成倍增加。

第三步计算筛选可能的最优结构模型,在解结构确定模型过程中有Direct method, Direct space method (Monte Carlo method),Grid Search, Patterson method, Charge Flipping, Simulated annealing, Parallel computing, Genetic Algorithm等一些算法。Direct method会经历数据还原归一化、确定并推算相角,傅里叶变换计算E图并在E图中寻峰,再利用相关函数进行坐标修正,对简单的结构无机结构,该方法能较快算得较好结果,该算法对数据的要求也比较高。而对于复杂的无机和有机结构,可推荐用Direct-space算法等其他算法,该算法会去搜索试验结果中的最小误差结构,也就是下图所有搜索超曲面中的最小超曲面



不同未知结构的材料在计算可能的模型时用对合适的方法,能够较快获得精确结果。对于一些大分子复杂结构物质,解的过程花费时间较久,可运用超级计算机平台进行运算。中科院网络信息结构中心将优化的GetStructure程序集成到深腾6800超级计算平台,该程序使用遗传算法和正空间信息来大规模搜索合适的解,适合解决复杂的无机有机材料的结构。同时在解初始模型过程中,也有将多种算法运用到一起进行确定复杂结构的,这需要对各种算法的相关原理以及使用有一定了解。

第四步结构精修,无论是单晶衍射数据还是粉末衍射数据。都会运用精修程序进行对结构进一步精解,一些程序或者软件所搭配的Rietveld精修方法被认为是有效的确认以及修正结构的有效方法。现在比较流行的软件Fullprf, Gsas, Topas等都拥有Rietveld精修方法的程序。


在解完初结构后,也可用一些程序或者算法对结构进行几何优化,如Mopac优化,DFT-D优化。最后,也可对所解的结构去模拟理论XRD模型,进一步与试验结果比对

3. 结论


   对于用粉末XRD解未知结构材料来说,收集高质量的数据、确定材料结构式(例如苯的结构式是C6H6,而非简式CH)以及晶胞结构单元数也是关键。而后,通晓一些固体物理相关的晶体学知识以及粉末衍射知识,理解解析结构过程的步骤以及不同算法的原理,最后采用各种合适的程序软件,以期解得精确的结构。

相关阅读:

1、什么?还不会分析MOF拓扑?学研汇手把手教你!!
2、XRD精修系列一:根据粉末XRD数据分析晶体结构
3、XRD 精修技能,你get到了吗?

备注:
1. 由于小编学识有限,如有疏漏与谬误,恳请批评并留言指正!
2. 本文版权归学研加所有,投稿转载请与我们联系!(QQ/微信:3403474166)
3. 本文所涉及图文、视频仅用于科研交流,请勿作为商业用途,如涉及版权问题,请与我们联系!
4. 欢迎大家到学研加宣传相关科研成果,投稿邮箱tougao_xueyanhui@163.com

Friday, May 17, 2019

压敏电阻是如何防雷的

压敏电阻器相当于一个可变电阻,它是并联于电路中的。当电路在正常使用时,压敏电阻的阻抗很高,漏电流很小,可视为开路,对电路几乎没有影响。但当一很高的突波电压到来时,压敏电阻的电阻值瞬间下降(它的电阻值可以从MΩ(兆欧)级变到mΩ(毫欧)级),使它可以流过很大的电流,同时将过电压箝位在一定数值。由于压敏电阻的突波承受能力取决于它的物理尺寸,因而有可能获得不同的浪涌电流值。
以氧化锌为主要成分的金属氧化物半导体非线性电阻,当加在电阻两端的电压小于压敏电压时,压敏电阻呈高阻状态。如果并联在电路上同,该阀片呈断路状态。当加在压敏电阻两端的电压大于压敏电压时,压敏电阻就会击穿同,呈现低阻值,甚至接近短路状态。压敏电阻这种被击穿状态是可以恢复的,当高于压敏电压的电压被撤销以后,它又恢复高阻状态。当电力线被雷击时,雷电波的高电压使压敏电阻击穿,雷电流通过压敏电阻流入大地,使电力线上的类电压被钳制在安全范围内。

利用热敏电阻检测液位原理

热敏电阻采用电压源驱动时会发热。如果将其浸入冷却液体中,只要液体温度保持相对恒定,则热敏电阻的温度(因而其电阻)将保持相对恒定。但是,如果液位下降,致使热敏电阻暴露在外,则液体的散热效应将消失,热敏电阻的温度将上升,其电阻(对于正温度系数元件)将增大。

Wednesday, May 15, 2019

What causes the dielectric loss?

- Definition : Its the loss of electromagnetic energy propagating inside a dielectric.
-Why it happens? well two reasons, one is the relaxation effects, basically the oscillating electric field polarize the dielectric (that is why its "di"electric) and this creates a dipole that is also oscillating, this dipole absorbs and then rescatters the electric field . Of course this response is not instantaneous , the dipole's response is always delayed by some phase with respect to the field. Now what if the oscillation frequency increases to the extent that by the time the dipole starts to  respond in one direction the field switch its direction, well the momentum gained will be lost in the switch, imagine stirring a cup clockwise and then suddenly stir it anti-clockwise.
The second  reason is resonance, when the electric field's frequency resonates with the electronic/vibrionic/rotational transitions of the dielectric , the dielectric will "absorb" the energy in order to perform such transition and the energy will dissipate and you get losses (this is the physics behind the controversial issue of global warming :D seriously)
 https://www.quora.com/What-is-dielectric-loss

Which is the best book for solid state physics?

https://www.quora.com/Which-is-the-best-book-for-solid-state-physics
Felix Chen
Felix Chen, Ph.D., Materials Science and Engineering, University of California, Los Angeles
Asked to answer, so I’ll jump in here.
Kittel is probably the most popular out there. I don’t like it as much, though, because in my opinion Kittel’s style is a bit terse in that he doesn’t provide as much detail into deriving the equations as I’d like. So I’ll offer up a few alternatives including my favorite.
First, for an elementary introduction to the field covering crystal geometry, free electron theory, characterization, and physical properties, I like Simon:
It’s well written and presupposes a basic understanding of quantum mechanics, statistical mechanics, and thermodynamics. It’s less than 300 pages and thus slim, but it imparts the fundamentals clearly. I’d place this book squarely at the undergraduate level even though it does occasionally invoke more advanced material but nothing that should deter a determined student.
For a more in-depth treatment of electronic effects such as transport, scattering, and absorption, I find Bube quite readable:
I’d put its level at beginning graduate. For example, Bube uses perturbation theory in several places, but his prose is lucid such that you won’t feel left behind.
Finally, my favorite solid state physics text is McKelvey:
An advanced undergraduate who’s gone through McKelvey will gain a deep understanding of those aspects of solid state physics pertinent to, as the title states, materials science and also related fields such as electrical engineering thanks to the book’s emphasis on semiconductors. What makes this textbook particularly suitable for undergraduates is its two detailed introductory chapters on quantum mechanics and statistical mechanics. An example of the thoroughness of the quantum mechanics chapter is that it starts at the very beginning with Planck’s assault on modeling blackbody radiation and then goes on to cover operators, eigenfunctions, and eventually the solution to the hydrogen atom. You get a mini-course in quantum mechanics that prepares you well for the remainder of the text. Similarly, the chapter on statistical mechanics covers Fermi-Dirac statistics and the Boltzmann distribution, absolutely indispensable for understanding the ensuing material on semiconductor physics and devices. If your field of interest is semiconductors and devices, McKelvey would be my recommendation.

Tuesday, May 14, 2019

Tradeblazer策略易使用详解

https://wenku.baidu.com/view/6bb1bc0dad02de80d5d8405d.html

(TB)交易开拓者SetGlobalVar和SetTBProfileString函数

SetGlobalVar和GetGlobalVar函数可以读写全局变量,但程序的可读性差,老要注释,程序执行速度应该可以,但不能写字符串,读写小数也很麻烦.
SetTBProfileString和GetTBProfileString函数已放弃了参数文件的读写,改用读写数据库Data_Q,速度比读文件系统快,但保存数值也很麻烦,需要转换函数.
请管理员给我综合评估一下,是否要放弃使用全局变量,改用读写数据库.全局变量还要处理网络中断、程序重启等问题,也是麻烦的很。
谢谢了!
不是对性能特别敏感的代码段,能用SetTBProfileString还是用这个比较好。

毕竟这是写到数据库,比SetGlobalVar写在内存中要强。

也可以这样:
如果下次打开交易软件仍然需要的数据,用SetTBProfileString。
下次打开交易软件,就重新计算的数据,用SetGlobalVar。

可以使用TBProfileString的,p_b_yu 是指在短线的情况下,全局变量会被清空,和TBProfileString比,较不稳定,所以p_b_yu建议使用TBProfileString
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=6919
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=12419
2
关于断线重连的全局变量
如下:

If(BarStatus==0)//初始化
{
setGlobalVar(1,InvalidNumeric);
setGlobalVar(0,InvalidNumeric);
SetTBProfileString(Symbol,"sm",Text(0));
SetTBProfileString(Symbol,"buym",Text(0));
SetTBProfileString(Symbol,"bm",Text(0));
SetTBProfileString(Symbol,"sellm",Text(0));  
}

断线重连后全局变量是不是又被初始化?
4#
[转载](TB)SetGlobalVar和SetTBProfileString函数 发表于 2010-11-3 16:05:00 |只看该作者
本帖最后由 efrog 于 2010-11-3 16:12 编辑

错了!应该:
If( BarStatus==0 && getglobalvar(0)==InvalidNumeric )
{
//初始化
}
说明:第一个Bar是由于公共变量没有使用过,所以其值为InvalidNumeric,一旦初始化其值就有效了,以后即使遇行情中断,程序再次从BarStatus==0从新执行,由于getglobalvar(0)已经不为InvalidNumeric,所以不会被重新初始化。
上善若水,无欲则刚
1# jsz123

请教SetTBProfileString(Symbol,"sm",Text(0));是什么意思?问题弱了点。不好意思
文韦 发表于 2010-11-20 16:35

Symbol是返回图表的商品名函数,这里用作数据库的名称。
"sm”是关键字名,相当于变量名。
Text(0),将sm设置为"0"。必须转换成字符串,这是TB所谓“数据库”的弱点!
http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=10933
3

说简单一点:
第一、OpenD(0)在集合竟价的时候会不会把上一个交易日的Open当做今天的open?
第二、If(BarStatus==0)//初始化setGlobalVar
{
SetTBProfileString(Symbol,"s1",Text(0));
SetTBProfileString(Symbol,"buy",Text(0));
SetTBProfileString(Symbol,"bm",Text(0));
SetTBProfileString(Symbol,"sell",Text(0));
}
可不可以不要?不初始化。可以避免不小心归零,照成反复开平仓。可不可以不要?
发表于 2010-10-20 14:08:00 |只看该作者
1.集合竟价的时候OpenD(0)为昨日的开盘价
2.这个只在图上第一个bar的时候初始化,这段代码不会造成反复开平仓

http://bbs.tradeblazer.net/forum.php?mod=viewthread&tid=10755
4
回复 3# 文韦


使用的是否V4版本?
请在数据库中检查一下是否有20110817这个信息。
文件-数据管理-配置工具
5
帖前已专门就此问题搜索过论坛的相关帖子,采用全局变量控制发单次数,但重复发单的问题还是没有解决。代码如下:
vars
numeric  trn;

if (BarStatus==0) SetGlobalVar(5,1);   //或者 if (BarStatus==0) trn=1;

if (BarStatus==2 && GetGlobalVar(5)==1) {   //或者        if (BarStatus==2 && trn==1)       
  if (AccountDataExist && a_totalposition>=0)
      {
       SetGlobalVar(5,0);                                  //或者 trn=0;
       if (a_totalposition>0) A_SendOrder(enum_sell,enum_exit,1,close-6);
       A_SendOrder(enum_sell,enum_entry,1,close-6);                     
     }
                                                                                  

本意是想空头开仓1手,但实盘运行开仓不止1手。也曾试过采用序列变量的方式控制发单次数,问题依旧。疑问:1、全局变量和序列变量的赋值时间是否很长?以至于在一个tick周期内变量值来不及改变导致重复发单?2、如果不采用延时的方式,有无其他更好的方法避免重复发单?
5#
[转载](TB)SetGlobalVar和SetTBProfileString函数 发表于 2011-12-21 10:11:00 |只看该作者
你的5号全局变量只是在某指定条件下给其赋了值,赋值貌似没有与发单有关。
请叁考F1帮助文档--公式系统---公式的使用----策略进阶----A函数下撤单与全局变量的应用。
6
想在日内交易1分钟周期中,胶、白糖、豆油、PTA、股指,这五个品种必须全部满足(不一定要同时满足)收盘价在各自的MA(CLOSE,60)之上,才同时做多这五个品种,用公式要如何表达?thankU
用SetTBProfileString、GetTBProfileString吧
以上品种图表都打开,并用SetTBProfileString记录各个品种条件,供其他品种调用判断。
将收盘价大于MA(C,60)条件记录下来
if(close[1]>AverageFC(Close,60))
    settbprofilestring(symbol,"ma","true");
获取三个品种的条件,判断是否满足
rucon = gettbprofilesting("ru1205","ma");
tacon = gettbprofilesting("ta1205","ma");
ifcon = gettbprofilesting("if1205","ma");

if(rucon == "true" && tacon == "true" && ifcon == "true" )
{
    buy(1,close);
}
lh948 发表于 2012-5-11 14:31
将收盘价大于MA(C,60)条件记录下来
if(close[1]>AverageFC(Close,60))
    settbprofilestring(symbol,"ma ...


另外在公式前部加上
If(time<0.10) return;
 
 http://blog.sina.com.cn/s/blog_63ea37fc0101ey29.html

TB交易开拓者A函数和Q函数详解

//////////////////A函数详解///////////////
//A函数主要在端口上进行下单操作////////////////
A_AccountID
说明 返回当前公式应用的交易帐户ID。
语法 String A_AccountID()
参数 无
备注 返回当前公式应用的交易帐户ID,返回值为字符串,无效时返回空串。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:登录交易账号:Commentary("A_AccountID"+A_AccountID);

A_BrokerID
说明 返回当前公式应用的交易帐户对应的交易商ID。
语法 String A_BrokerID()
参数 无
备注 返回当前公式应用的交易帐户对应的交易商ID,返回值为字符串,无效时返回空串。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:登录交易账号:Commentary("A_BrokerID"+A_BrokerID);

A_BuyAvgPrice
说明 返回当前公式应用的帐户下当前商品的买入持仓均价。
语法 Numeric A_BuyAvgPrice()
参数 无
备注 返回当前公式应用的帐户下当前商品的买入持仓均价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:登录交易账号+添加交易策略:PlotNumeric("A_BuyAvgPrice",A_BuyAvgPrice);
A_BuyPosition
说明 返回当前公式应用的帐户下当前商品的买入持仓。
语法 Numeric A_BuyPosition()
参数 无
备注 返回当前公式应用的帐户下当前商品的买入持仓,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 登录交易账号+添加交易策略当前持多仓2手,A_BuyPosition返回2。
A_BuyProfitLoss
说明 返回当前公式应用的帐户下当前商品的买入持仓盈亏。
语法 Numeric A_BuyProfitLoss()
参数 无
备注 返回当前公式应用的帐户下当前商品的买入持仓盈亏,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:登录交易账号+添加交易策略:PlotNumeric("A_BuyProfitLoss",A_BuyProfitLoss);
A_CurrentEquity
说明 返回当前公式应用的交易帐户的动态权益。
语法 Numeric A_CurrentEquity()
参数 无
备注 返回当前公式应用的交易帐户的动态权益,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 登录交易账号+添加交易策略:
A_DeleteOrder
说明 针对当前公式应用的帐户、商品发送撤单指令。
语法 Bool A_DeleteOrder(String strContractNo = "")
参数 strContractNo 所要撤委托单的合同号。
strContractNo = "" 时撤该帐户,该商品所有未成交委托单。
备注 针对当前公式应用的帐户、商品发送撤单指令,发送成功返回True,发送失败返回False。
该函数可针对叠加商品进行处理,可用Data1.A_DeleteOrder(...)进行调用。
该函数直接发单,不经过任何确认,并会在每次公式计算时发送,一般需要配合着仓位头寸进行条件处理,在不清楚运行机制的情况下,请慎用。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 If (A_GetOpenOrderCount()>0)
{
A_DeleteOrder();
...
}
或者用如下方式撤最后发送的未成交单:
If(A_GetOpenOrderCount()>0) {
A_DeleteOrder(A_OpenOrderContractNo());
...
} //配合A_GetOpenOrderCount()函数和A_OpenOrderContractNo()函数一起使用;
A_FreeMargin
说明 返回当前公式应用的交易帐户的可用资金。
语法 Numeric A_FreeMargin()
参数 无
备注 返回当前公式应用的交易帐户的可用资金,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 登录交易账号+添加交易策略:
A_GetLastOpenOrderIndex
说明 返回当前公式应用的帐户下当前商品的最后一个未成交委托单索引,按输入参数为条件。
语法 Integer A_GetLastOpenOrderIndex(Integer BuyOrSell,Integer EntryOrExit)
参数 BuyOrSell 发送委托单的买卖类型,取值为Enum_Buy或Enum_Sell之一;
EntryOrExit 发送委托单的开平仓类型,取值为Enum_Entry,Enum_Exit,Enum_ExitToday之一;
备注 返回当前公式应用的帐户下当前商品的最后一个未成交委托单索引,按输入参数为条件,返回值为整型。
如果返回值不等于InvalidInteger,即为有效,可通过该索引获取相关的委托单状态,价格,数量等信息。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 LastIndex = A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry);
If(LastIndex != InvalidInteger)
{
orderPrice = A_OpenOrderPrice(LastIndex);
...
}
A_GetLastOrderIndex
说明 返回当前公式应用的帐户下当前商品的最后一个当日委托单索引,按输入参数为条件。
语法 Integer A_GetLastOrderIndex(Integer BuyOrSell,Integer EntryOrExit)
参数 BuyOrSell 发送委托单的买卖类型,取值为Enum_Buy或Enum_Sell之一;
EntryOrExit 发送委托单的开平仓类型,取值为Enum_Entry,Enum_Exit,Enum_ExitToday之一;
备注 返回当前公式应用的帐户下当前商品的最后一个当日委托单索引,按输入参数为条件,返回值为整型。
如果返回值不等于InvalidInteger,即为有效,可通过该索引获取相关的委托单状态,价格,数量等信息。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 LastIndex = A_GetLastOrderIndex(Enum_Buy,Enum_Entry);
If(LastIndex != InvalidInteger)
{
orderPrice = A_OrderPrice(LastIndex);
...
}
A_GetOpenOrderCount
说明 返回当前公式应用的帐户下当前商品的未成交委托单数量。
语法 Integer A_GetOpenOrderCount()
参数 无
备注 返回当前公式应用的帐户下当前商品的未成交委托单数量,返回值为整型。
该函数返回委托单数量中只包含未成交的类型:部分成交和已申报。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
nStatus = A_OpenOrderStatus(i);
...
}
A_GetOrderCount
说明 返回当前公式应用的帐户下当前商品的当日委托单数量。
语法 Integer A_GetOrderCount()
参数 无
备注 返回当前公式应用的帐户下当前商品的当日委托单数量,返回值为整型。
该函数返回委托单数量中包含所有的类型:全部成交,已申报,已撤单,部分成交等。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
nStatus = A_OrderStatus(i);
...
}
A_OpenOrderBuyOrSell
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的买卖类型。
语法 Integer A_OpenOrderBuyOrSell(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的买卖类型,返回值为整型。
该函数返回值可以与Enum_Buy、Enum_Sell等买卖状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
nBorS = A_OpenOrderBuyOrSell(i);
If (nBorS == Enum_Buy())
...
}
A_OpenOrderContractNo
说明 返回当前公式应用的帐户下当前商品的某个未成交的委托单的合同号。(本函数范围是所有未成交的委托单的合同号,有区别于A_OrderContractNo)
语法 String A_OpenOrderContractNo(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的合同号,返回值为字符串。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
strContractNo = A_OpenOrderContractNo(i);
...
}
A_OpenOrderEntryOrExit
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的开平仓状态。
语法 Integer A_OpenOrderEntryOrExit(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的开平仓状态,返回值为整型。
该函数返回值可以与Enum_Entry、Enum_Exit等开平仓状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
nEntryFlag = A_OpenOrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}
A_OpenOrderFilledLot
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的成交数量。
语法 Numeric A_OpenOrderFilledLot(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的成交数量,返回值为浮点数。
只有当前委托单为部分成交时,该函数才会返回有效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
OpenOrderFilledLot = A_OpenOrderFilledLot(i);
...
}
A_OpenOrderFilledPrice
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的成交价格。
语法 Numeric A_OpenOrderFilledPrice(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的成交价格,返回值为浮点数。
只有当前委托单为部分成交时,该函数才会返回有效值。该成交价格可能为多个成交价格的平均值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
OpenOrderFilledPrice = A_OpenOrderFilledPrice(i);
...
}
A_OpenOrderLot
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托数量。
语法 Numeric A_OpenOrderLot(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托数量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
OpenOrderLot = A_OpenOrderLot(i);
...
}
A_OpenOrderPrice
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托价格。
语法 Numeric A_OpenOrderPrice(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托价格,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
OpenOrderPrice = A_OpenOrderPrice(i);
...
}
A_OpenOrderStatus
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的状态。
语法 Integer A_GetOpenOrderStatus(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的状态,返回值为整型。
该函数返回值可以与Enum_Declared、Enum_FillPart委托状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
nStatus = A_OpenOrderStatus(i);
If(nStatus == Enum_FillPart)
...
}
A_OpenOrderTime
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托时间。
语法 Numeric A_OpenOrderTime(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的委托时间,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
OpenOrderTime = A_OpenOrderTime(i);
...
}
A_OrderBuyOrSell
说明 返回当前公式应用的帐户下当前商品的某个委托单的买卖类型。
语法 Integer A_OrderBuyOrSell(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的买卖类型,返回值为整型。
该函数返回值可以与Enum_Buy、Enum_Sell等买卖状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
nBorS = A_OrderBuyOrSell(i);
If (nBorS == Enum_Buy())
...
}
A_OrderCanceledLot
说明 返回当前公式应用的帐户下当前商品的某个委托单的撤单数量。
语法 Numeric A_OrderCanceledLot(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的撤单数量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderCanceledLot = A_OrderCanceledLot(i);
...
}
A_OrderContractNo
说明 返回当前公式应用的帐户下当前商品的某个委托单的合同号。(本函数范围是所有的委托单的合同号,有区别于A_OpenOrderContractNo)
语法 String A_OrderContractNo(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的合同号,返回值为字符串。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
strContractNo = A_OrderContractNo(i);
...
}
A_OrderEntryOrExit
说明 返回当前公式应用的帐户下当前商品的某个委托单的开平仓状态。
语法 Integer A_OrderEntryOrExit(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的开平仓状态,返回值为整型。
该函数返回值可以与Enum_Entry、Enum_Exit等开平仓状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
nEntryFlag = A_OrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}
A_OrderFilledLot
说明 返回当前公式应用的帐户下当前商品的某个委托单的成交数量。
语法 Numeric A_OrderFilledLot(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的成交数量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderFilledLot = A_OrderFilledLot(i);
...
}
A_OrderFilledPrice
说明 返回当前公式应用的帐户下当前商品的某个委托单的成交价格。
语法 Numeric A_OrderFilledPrice(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的成交价格,返回值为浮点数。
该成交价格可能为多个成交价格的平均值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderFilledPrice = A_OrderFilledPrice(i);
...
}
A_OrderLot
说明 返回当前公式应用的帐户下当前商品的某个委托单的委托数量。
语法 Numeric A_OrderLot(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的委托数量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderLot = A_OrderLot(i);
...
}

A_OrderPrice
说明 返回当前公式应用的帐户下当前商品的某个委托单的委托价格。
语法 Numeric A_OrderPrice(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的委托价格,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderPrice = A_OrderPrice(i);
...
}
A_OrderStatus
说明 返回当前公式应用的帐户下当前商品的某个委托单的状态。
语法 Integer A_OrderStatus(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的状态,返回值为整型。
该函数返回值可以与Enum_Declare、Enum_Declared、Enum_Filled等委托状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
nStatus = A_OrderStatus(i);
If(nStatus == Enum_Filled)
...
}
A_OrderTime
说明 返回当前公式应用的帐户下当前商品的某个委托单的委托时间。
语法 Numeric A_OrderTime(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个委托单的委托时间,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 nCount = A_GetOrderCount();
For i = 1 To nCount
{
OrderTime = A_OrderTime(i);
...
}
A_PositionProfitLoss
说明 返回当前公式应用的帐户下当前商品的持仓盈亏。
语法 Numeric A_PositionProfitLoss()
参数 无
备注 返回当前公式应用的帐户下当前商品的持仓盈亏,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_PreviousEquity
说明 返回当前公式应用的交易帐户的昨日结存。
语法 Numeric A_PreviousEquity()
参数 无
备注 返回当前公式应用的交易帐户的昨日结存,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_ProfitLoss
说明 返回当前公式应用的交易帐户的浮动盈亏。
语法 Numeric A_ProfitLoss()
参数 无
备注 返回当前公式应用的交易帐户的浮动盈亏,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_SellAvgPrice
说明 返回当前公式应用的帐户下当前商品的卖出持仓均价。
语法 Numeric A_SellAvgPrice()
参数 无
备注 返回当前公式应用的帐户下当前商品的卖出持仓均价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_SellPosition
说明 返回当前公式应用的帐户下当前商品的卖出持仓。
语法 Numeric A_SellPosition()
参数 无
备注 返回当前公式应用的帐户下当前商品的卖出持仓,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 当前持空仓3手,A_SellPosition返回3。
A_SellProfitLoss
说明 返回当前公式应用的帐户下当前商品的卖出持仓盈亏。
语法 Numeric A_SellProfitLoss()
参数 无
备注 返回当前公式应用的帐户下当前商品的卖出持仓盈亏,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_SendOrder
说明 针对当前公式应用的帐户、商品发送委托单。
语法 Bool A_SendOrder(Integer BuyOrSell,Integer EntryOrExit,Numeric Lot,Numeric Price,Numeric StopPrice,Numeric ProfitPrice)
参数 BuyOrSell 发送委托单的买卖类型,取值为Enum_Buy或Enum_Sell之一;
EntryOrExit 发送委托单的开平仓类型,取值为Enum_Entry,Enum_Exit,Enum_ExitToday之一;
Lot 委托单的交易数量;
Price 委托单的交易价格。
StopPrice 止损触发单触发价格。
ProfitPrice 止盈触发单触发价格。
备注 针对当前公式应用的帐户、商品发送委托单,发送成功返回True,发送失败返回False。
该函数可针对叠加商品进行处理,可用Data1.A_SendOrder(...)进行调用。
该函数直接发单,不经过任何确认,并会在每次公式计算时发送,一般需要配合着仓位头寸进行条件处理,在不清楚运行机制的情况下,请慎用。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 示例1:
If (A_BuyPosition()>0 && A_GetOpenOrderCount()==0)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
...
}
注意:A_SendOrder不同于Buy和Sell指令,A_SendOrder只适用于实时行情中发送委托单,不可以用于测试。
示例2:控制A_SendOrder发单配合全局变量示例(开多仓)
if( /*开仓条件*/ && A_BuyPosition()==0 && GetGlobalVar(0)==0)
{
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_AskPrice);
}
示例3:设置A_SendOrder止损止盈单触发价格(止盈触发价格7000,止损触发价格6000)
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_AskPrice,6000,7000);

A_TodayBuyPosition
说明 返回当前公式应用的帐户下当前商品的当日买入持仓。
语法 Numeric A_TodayBuyPosition()
参数 无
备注 返回当前公式应用的帐户下当前商品的当日买入持仓,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TodayDeposit
说明 返回当前公式应用的交易帐户的当日入金。
语法 Numeric A_TodayDeposit()
参数 无
备注 返回当前公式应用的交易帐户的当日入金,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TodayDrawing
说明 返回当前公式应用的交易帐户的当日出金。
语法 Numeric A_TodayDrawing()
参数 无
备注 返回当前公式应用的交易帐户的当日出金,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TodaySellPosition
说明 返回当前公式应用的帐户下当前商品的当日卖出持仓。
语法 Numeric A_TodaySellPosition()
参数 无
备注 返回当前公式应用的帐户下当前商品的当日卖出持仓,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TotalAvgPrice
说明 返回当前公式应用的帐户下当前商品的持仓均价。
语法 Numeric A_TotalAvgPrice()
参数 无
备注 返回当前公式应用的帐户下当前商品的持仓均价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TotalFreeze
说明 返回当前公式应用的交易帐户的冻结资金。
语法 Numeric A_TotalFreeze()
参数 无
备注 返回当前公式应用的交易帐户的冻结资金,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TotalMargin
说明 返回当前公式应用的交易帐户的保证金。
语法 Numeric A_TotalMargin()
参数 无
备注 返回当前公式应用的交易帐户的保证金,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
A_TotalPosition
说明 返回当前公式应用的帐户下当前商品的总持仓。
语法 Numeric A_TotalPosition()
参数 无
备注 返回当前公式应用的帐户下当前商品的总持仓,返回值为浮点数。
该持仓为所有持仓的合计值,正数表示多仓,负数表示空仓,零为无持仓。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无

///////////////Q函数详解////////////////
//Q函数返回端口API的相关订阅数据。
//Q函数除了tick级别的周期,在其他周期都可以调用,但是只在最后一根bar
的位置显示tick每次订阅发送的当前数据。Q函数当中大多都是tick级别显示
的订阅数据。
Q_AskPrice
说明 当前公式应用商品的最新卖盘价格。
语法 Numeric Q_AskPrice(Integer nIndex=0)
参数 nIndex 买卖盘数组的索引值,以0为基值递增,默认值为0。
备注 当前公式应用商品的最新卖盘价格,返回值为浮点数。如果Index小于0或者大于等于BidAskSize,则返回无效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:显示盘口的卖一的价格,或者有些软件中的盘口的卖出价位置的价格。
Q_AskPriceFlag
说明 当前公式应用商品的卖盘价格变化标志。
语法 Integer Q_AskPriceFlag()
参数 无
备注 当前公式应用商品的卖盘价格变化标志,返回值为整型,1为上涨,-1为下跌,0为不变。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_AskVol
说明 当前公式应用商品的最新卖盘量。
语法 Numeric Q_AskVol(Integer nIndex=0)
参数 nIndex 买卖盘数组的索引值,以0为基值递增,默认值为0。
备注 当前公式应用商品的最新卖盘量,返回值为浮点数。如果Index小于0或者大于等于BidAskSize,则返回无效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_AvgPrice
说明 当前公式应用商品的实时均价。
语法 Numeric Q_AvgPrice()
参数 无
备注 当前公式应用商品的实时均价,即结算价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_BidPrice
说明 当前公式应用商品的最新买盘价格。
语法 Numeric Q_BidPrice(Integer nIndex=0)
参数 nIndex 买卖盘数组的索引值,以0为基值递增,默认值为0。
备注 当前公式应用商品的最新最新买盘价格,返回值为浮点数。如果Index小于0或者大于等于BidAskSize,则返回无效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例:显示盘口买一的价格。或者有些软件中的盘口的买入价位置的价格。
Q_BidPriceFlag
说明 当前公式应用商品的买盘价格变化标志。
语法 Integer Q_BidPriceFlag()
参数 无
备注 当前公式应用商品的买盘价格变化标志,返回值为整型,1为上涨,-1为下跌,0为不变。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_BidVol
说明 当前公式应用商品的最新买盘量。
语法 Numeric Q_BidVol(Integer nIndex=0)
参数 nIndex 买卖盘数组的索引值,以0为基值递增,默认值为0。
备注 当前公式应用商品的最新买盘量,返回值为浮点数。如果Index小于0或者大于等于BidAskSize,则返回无效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_Open
说明 当前公式应用商品的当日开盘价。
语法 Numeric Q_Open()
参数 无
备注 当前公式应用商品的当日开盘价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_Close
说明 当前公式应用商品的当日收盘价。(当日未收盘则取得昨日收盘价。)
语法 Numeric Q_Close()
参数 无
备注 当前公式应用商品的当日收盘价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_High
说明 当前公式应用商品的当日最高价。
语法 Numeric Q_High()
参数 无
备注 当前公式应用商品的当日最高价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_HisHigh
说明 当前公式应用商品的历史最高价。(暂时不可用)
语法 Numeric Q_HisHigh()
参数 无
备注 当前公式应用商品的历史最高价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_HisLow
说明 当前公式应用商品的历史最低价。(暂时不可用)
语法 Numeric Q_HisLow()
参数 无
备注 当前公式应用商品的历史最低价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_InsideVol
说明 当前公式应用商品的内盘。
语法 Numeric Q_InsideVol()
参数 无
备注 当前公式应用商品的内盘,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_Last
说明 当前公式应用商品的最新价。
语法 Numeric Q_Last()
参数 无
备注 当前公式应用商品的最新价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_LastDate
说明 当前公式应用商品的最新成交日期。
语法 Integer Q_LastDate()
参数 无
备注 当前公式应用商品的最新成交日期,返回值为Date类型。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_LastFlag
说明 当前公式应用商品的最新价变化标志。
语法 Integer Q_LastFlag()
参数 无
备注 当前公式应用商品的最新价变化标志,返回值为整型,1为上涨,-1为下跌,0为不变。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_LastTime
说明 当前公式应用商品的最新成交时间。
语法 Numeric Q_LastTime()
参数 无
备注 当前公式应用商品的最新成交时间,返回值为Time类型。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_LastVol
说明 当前公式应用商品的现手。
语法 Numeric Q_LastVol()
参数 无
备注 当前公式应用商品的现手,返回值为浮点数,单位为手。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_Low
说明 当前公式应用商品的当日最低价。
语法 Numeric Q_Low()
参数 无
备注 当前公式应用商品的当日最低价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_LowerLimit
说明 当前公式应用商品的当日跌停板价。
语法 Numeric Q_LowerLimit()
参数 无
备注 当前公式应用商品的当日跌停板价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_OpenInt
说明 当前公式应用商品的持仓量。
语法 Numeric Q_OpenInt()
参数 无
备注 当前公式应用商品的持仓量,返回值为浮点数,单位为手。仅对期货有效,其他商品返回无效值。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_OpenIntFlag
说明 当前公式应用商品的持仓量变化标志。
语法 Integer Q_OpenIntFlag()
参数 无
备注 当前公式应用商品的持仓量变化标志,返回值为整型,1为增加,-1为下降,0为不变。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_Oscillation
说明 当前公式应用商品的振幅。
语法 Numeric Q_Oscillation()
参数 无
备注 当前公式应用商品的振幅,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_OutsideVol
说明 当前公式应用商品的外盘。
语法 Numeric Q_OutsideVol()
参数 无
备注 当前公式应用商品的外盘,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_PreOpenInt
说明 当前公式应用商品的昨日持仓量。
语法 Numeric Q_PreOpenInt()
参数 无
备注 当前公式应用商品的昨日持仓量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_PreSettlePrice
说明 当前公式应用商品的昨日结算价。
语法 Numeric Q_PreSettlePrice()
参数 无
备注 当前公式应用商品的昨日结算价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_PriceChg
说明 当前公式应用商品的当日涨跌。
语法 Numeric Q_PriceChg()
参数 无
备注 当前公式应用商品的当日涨跌,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_PriceChgRatio
说明 当前公式应用商品的当日涨跌幅。
语法 Numeric Q_PriceChgRatio()
参数 无
备注 当前公式应用商品的当日涨跌幅,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_TickChg
说明 当前公式应用商品的最新笔升跌。
语法 Numeric Q_TickChg()
参数 无
备注 当前公式应用商品的最新笔升跌,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_TodayEntryVol
说明 当前公式应用商品的当日开仓量。
语法 Numeric Q_TodayEntryVol()
参数 无
备注 当前公式应用商品的当日开仓量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_TodayExitVol
说明 当前公式应用商品的当日平仓量。
语法 Numeric Q_TodayExitVol()
参数 无
备注 当前公式应用商品的当日平仓量,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_TotalVol
说明 当前公式应用商品的当日成交量。
语法 Numeric Q_TotalVol()
参数 无
备注 当前公式应用商品的当日成交量,返回值为浮点数,单位为手。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_TurnOver
说明 当前公式应用商品的成交金额。
语法 Numeric Q_TurnOver()
参数 无
备注 当前公式应用商品的成交金额,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
Q_UpperLimit
说明 当前公式应用商品的当日涨停板价。
语法 Numeric Q_UpperLimit()
参数 无
备注 当前公式应用商品的当日涨停板价,返回值为浮点数。
注:不能使用于历史测试,仅适用于实时行情交易。
示例 无
QuoteDataExist
说明 当前公式应用商品的行情数据是否有效。
语法 Bool QuoteDataExist()
参数 无
备注 当前公式应用商品的行情数据是否有效,返回布尔值。如果数据已经准备好,返回True,则返回False。
示例 无
 https://www.cnblogs.com/noah0532/p/8878859.html

从一无所知开始学习TradeBlazer编程

http://bbs.tb18.net/thread-588-1-1.html
交易开拓者(TradeBlazer)是一款为中国期货市场专业投资用户开发的金融投资软件,它集中了实时行情,技术分析,快捷交易及程式化交易的功能。通过使用交易开拓者,用户可以简单,快速的将自己的交易思想转化为计算机代码,让计算机帮助用户实现价值。
我们致力于为期货行业的投资者提供一个实现盈利的工具,但并不保证该软件能为所有的使用者带来盈利,希望使用者能够通过使用系统,建立并优化自己的交易思想,形成自己的交易策略。
--写了一个小时,咔嗒一声,停电了! 呜呼,难道我写的文章质量就这样差吗?硬是不让我发表?
不管他,坚持做下去!休息一个晚上,重新开始!
坛子里经常会看到很多朋友问:帮我写个公式怎么样啊?帮我把某个公式改成TB的怎么样啊?
我想出现这种情况的原因有两种:
一是真的不会,毕竟做期货的会编程的不多;
二是自己如果多花点时间的话是弄的出来,但是有点懒;
我想无论是哪种原因,都应该好好的学习下TB,因为真正的你的交易思路只有你自己才清楚
而且也只有你自己去把你的交易思路用TB表现出来你才能更清楚的知道你的交易思维中有何缺点
但是编程不是一件很容易的事情,当然,如果您入门了,你会发觉TB编程其实和泡妞一样的简单,就看你敢不敢下手了
所以本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料,如果您是高手,请忽略此文,以免耽误您的时间.
我先不说那些专业术语,什么变量,函数和语法的,我们先不管他,以免看的头晕.
我想先说说在TB中代码的执行顺序,也就是说在TB的K线图(TB把K线叫做Bar)里面你写的公式或者指标是如何得到执行的;
我想这个东西是最重要而且也是最好理解的.
在其他的期货软件比如文华飞狐一类,我们是无法知道你写的公式是如何执行的,甚至我们不知道我们写出来的公式是不是真的
就体现出了我们的思想,因为你写的公式或者指标是被这些软件在幕后进行处理的,是黑箱操作!
而TB不同,我们能够清楚的看到你写的代码在任意一根K线上是如何得到执行的!!!!
好了,先说说在TB里面代码是如何得到执行的.
1,代码从第一根K线开始执行,一直到最后一根K线;
2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行;
明白了吧,是不是很简单,我们先看一个小例子,如果您还不明白,那只能说我完全没有任何能力写这文章,您就板砖吧
我们就写个输出每日的收盘价的例子;
打开TB,在左边的TB公式里面,点击新建技术指标,新建其他的也没有关系,然后在出来的对话框的简称里面填入名字,记住,这个名字只能是E文哦
在名字里面填入你喜欢的名字,点确定就OK了啊
然后在出来的公式编辑器里面输入
Begin
End
注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间
意思很简单
就是Begin后,你的代码就开始执行了,End了,你的代码就执行完毕拉
呵呵
我们再在Begin和End之间输入一些代码,完整的就是:
Begin
  FileAppend("c:\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");
  FileAppend("C:\a.log",Text(Close));
End
我们再说说这两行代码是什么意思
File就是文件,Append就是添加,现在明白了吧
FileAppend就是添加一个文件,文件名是什么呢?就是你后面写的a.log,这个文件的路径在哪里呢?就是c:\a.log里面的C盘,且在这个文件里面添加一行东西,
这行东西的内容就是你后面所写的Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于"
当然,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容
好了,再看看Text,Text的意思就是把那些不是字符串的东西如数字啊,等变成字符串.而Year,Month,Day就代表了
正在执行你写的代码的那一根K线的年,月,日,年月日是数字,我们当然要用Text把它搞成字符串,不然Windows会告诉你你犯了错误的
Close的意思我不说大家也明白了吧,就是代表了当前正在执行你的代码的那根K线的收盘价啊,呵呵,如果代码执行到最后的那根K线
且行情正在走动的时候Close代表的就是现在的最新价了咯.
好了
我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就OK了
我们在回到K线图里面,TB把K线图叫做超级图表,呵呵,有点不习惯
在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,当然,你可以搞成任意你喜欢的数字
你甚至可以从任意一个你喜欢的时间开始显示K线,我们选择5跟K线仅仅是为了测试的方便
点确定后,你就看到在K线图里面只显示了5跟K线,所以我们的代码也仅仅只在这5跟K线上执行了
当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的
先发表,以免再次停电
我们再在超级图表里面右键,选择插入技术分析,在出来的列表里面选择我们刚刚所写的技术指标,然后确定就OKl饿
晕死,现在怎么在K线图上没有任何变化啊?
呵呵
我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯?
FileAppend("c:\a.log",很明显,文件是在c盘的,文件的名字是a.log
好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:
2007年9月24日的收盘价等于
67280
2007年9月25日的收盘价等于
67800
2007年9月26日的收盘价等于
67160
2007年9月27日的收盘价等于
67300
2007年9月28日的收盘价等于
68020
我们现在来分析下:
首先你写的代码在第一根K线上执行,先执行第一行代码:
FileAppend("c:\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");
这行代码就输出了第一根K线的年,月,日,就在a.log文件里输出成"2007年9月24日的收盘价等于"
然后执行第二行代码:
FileAppend("C:\a.log",Text(Close));
折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了"67280"
好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码
.........
好了,现在代码在第二根,第三根,第四根K线上执行完毕,于是转到第五根也就是最后一根K线上执行第一行代码
再执行第二行代码
到此为止,所有的代码在所有的K线上执行完毕了,圆满的完成了党和祖国赋予他的神圣使命,于是也就有了我们上面所看到的结果:
2007年9月24日的收盘价等于
67280
2007年9月25日的收盘价等于
67800
2007年9月26日的收盘价等于
67160
2007年9月27日的收盘价等于
67300
2007年9月28日的收盘价等于
68020
OK,下回继续
=-----------------------------------
编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已
我们期货编程的目的是表现我们的交易思想
是为思想而编程,不是为编程而编程!
说起这点我想起了TB的伟大!
不管你用文华还是飞狐,当你把指标公式写完后
可能你自己的不是很清楚
你的代码所表现出来的东西到底是不是就是你的交易思想呢?
因为他们的代码是工作在后台的
我们在前面无法得知这些代码如何工作
而TB完全不同
你可以在任意时候知道你的代码在做什么!
所以你也就非常的清楚你的代码是不是真的表现了你的意思!
好了
现在开始写数据类型,变量和赋值.
这是些非常基本的概念,相信您一下就懂的
线说数据类型吧
数据类型和人的类型差不多
人不是分黄种人,白种人,黑种人么?
TB里面的数据也一样
分字符串类型,数值型,还有布尔型
字符串类型很简单,用分号""括起来的东西就叫做字符串类型的数据,如"I love you",如"3345",.....
数值型数据类型也同样的简单,数值大家知道吧,如1542啊,1.021啊....这些东西就是数值型的数据类型
当然,如果把一个数值型的东西用分号""括起来了那他就不再是数值型数据了,而是字符串类型的数据
如1688是数值型数据,但是"1688"就是字符串类型的数据了啊
还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思
说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.
比如2>1,这个东西就是布尔类型的数据,因为2是大于1啊,所以这个表达式返回True(真)
那么2<1,大家说这个表达式是不是个布尔类型的数据呢?
呵呵,也是的,因为2大于1啊,所以2<1是错误的,就返回False(假)咯
大家明白了吧,就这三个类型,其中最只要的就是数值型数据类型哦
用的最多的也是数值型数据类型
如果明白了,那么请您就记住在TB里面数值型的E文是Numeric吧
晕死,看下TB的帮助,数据类型里面还有个序列型,如果数值序列型,字符串序列型,布尔序列型
序列这个东西看起来很难理解
想个办法来理解他吧
比如我们的K线图上有10跟K线,Close大家知道吧,就是收盘价
但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价
也就是说序列型的数据在没根K线上都有一个值的
OK了吧?如果不OK也没有关系,慢慢的就懂了
再说说变量
顾名思义,变量就是一个可以改变的东西
现在这个变量的值是100,但是等下我可以把它改成20,只要您喜欢,你可以随心所欲的改变这个值
呵呵,能够修改他的值的东西就叫做变量了
记住:
在TB里面变量都是要先定义的!而且有着他独到的定义方法,而且这个定义必须放到Begin的前面
如我们定义一个数值型变量a.就应该这样
Vars
  Numeric a;
Begin
......
End
当然你也可以定义两个或者多个变量,如
Vars
  Numeric a;
  Numeric b;
  //.........更多变量定义
Begin
......
End
大家也许想到了
我定义这个变量a,我要让他等于2,这个东西很简单
你可以在变量定义的时候就给他赋初值让他一开始被定义就等于2,也可以在Begin下面写.如
Vars
  Numeric a(2);
  Numeric b;
  //.........更多变量定义
Begin
......
End
明白了么|?那么变量b呢?我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢?
很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0咯
好了
再看在Begin里面怎么修改这个变量的值
Vars
  Numeric a(2);
  Numeric b;
  //.........更多变量定义
Begin
  a = 3;
  b = 100;
End
很简单的
现在大家应该知道了变量是什么东西了吧
对了,忘记告诉大家了,在Begin下面给变量复制仅仅只对当前正在执行你的代码的K线有效咯,到下一根K线他就是初始值了啊
写个例子吧
Vars
  Numeric a(100);//定义一个变量,类型是数值类型,变量名字是a,变量的初始值是100
Begin
  if(CurrentBar == 0)//如果是第一根K线,就把变量a的值变为1
  {
      a = 1;
  }
  FileAppend("C:\a.Log",Text(a));
End
我们再来看看输出结果:
1
100
100
100
100
我们再来理解下这个结果(当然这个时候我们的K线图上面只有5跟K线啊,其实随便多少跟K线都一样)
首先代码在第一根K线上面执行,先执行if(CurrentBar == 0)这个东西,CurrentBar代表正在被执行的K线的索引
因为代码现在在第一根K线上执行,所以索引就是0拉,于是这个表达式就成立了啊,既然if(CurrentBar == 0)这个表达式
成立,那么他就会执行{}里面的东西a = 1;把1赋给变量a,也就是说吧变量a的内容改成1,
然后执行FileAppend("C:\a.Log",Text(a));
这个时候变量a的值是1,所以当然输出1了啊
代码执行完毕
然后转到第二根K线,
既然是第二根K线,那么这根K线的索引就是1了啊,1肯定不等于0啊
那么表达式if(CurrentBar == 0)就不成立了啊,既然不成立那么他也就不会执行{}里面的东西 a = 1;
于是就直接执行FileAppend("C:\a.Log",Text(a));
那么这个时候a的值是多少呢?
很明显是100,就是他的初始值,而不是上一根K线执行代码的时候改变了的a的值!这点千万注意啊
我相信好多朋友会在这里犯下错误的咯
再说给变量赋值
其实我们上面已经说了,记住=和==的区别吧
=就是把=右边的东西赋给=左边的东西
如a = 100;
就是把=右边的100赋给左边的变量a
如b = 9;
就是把9赋给变量b
我们在日常中一直把=当成等于,千万急着在TB里面=就是赋值!!!
真正的等于的符号是==
if(a==b)//就是如果a等于b
{
  //做某件事情
}
好了
下次见
----------------------------------
现在我们说说TB中的流程控制
流程控制就是控制代码执行的流程
还说的明白点就是如果满足什么阳的条件就做什么事情
或者不满足什么条件的时候做什么事情
简单说流程控制就是控制语句控制代码
控制语句中分为逻辑控制语句(就是条件控制语句)和循环控制语句
条件控制语句中大家记住If这个关键字,翻译成中文就是如果
循环控制语句中大家记住For,就是开始循环了
先说If.
假设一个这样的条件:
如果(收盘价>开盘价)
  则输出:今日收红阳线
我们先把这个东西翻译成TB
如果翻译成If
收盘价和开盘价大家都知道会翻译成Close和Open
输出语句就是FileAppend,则翻译成TB就是:
If(Close>Open)
  {
    FileAppend("c:\a.log","今日收红阳线");
  }
是不是很简单呢?
大家记住一点,凡是if(如果)语句中的代码,都给我用{}括起来
我们再把上面的条件加上一点:
如果(收盘价>开盘价)
  则输出:今日收红阳线
否则如果(收盘价==开盘价)
  则输出:今日收十字线
我们再翻译成TB,把否则翻译成Else,如果翻译成If
If(Close>Open)
  {
    FileAppend("c:\a.log","今日收红阳线");
  }
Else If(Close==Open)
  {
    FileAppend("C:\a.log","今日收十字线");
  }
同样的简单,我们可以再把上面的条件再加:
如果(收盘价>开盘价)
  则输出:今日收红阳线
否则如果(收盘价==开盘价)
  则输出:今日收十字线
否则
则输出:今日收绿阴线
上面的否则大家知道翻译成Else吧,有两种翻译方法,因为收盘价和开盘价的比较只存在着三种情况:
收盘价大于开盘价,收盘价等于开盘价,收盘价少于开盘价,我们先这样翻译:
If(Close>Open)
  {
    FileAppend("c:\a.log","今日收红阳线");
  }
Else If(Close==Open)
  {
    FileAppend("C:\a.log","今日收十字线");
  }
Else If(Close<Open)
  {
    FileAppend("c:\a.log","今日收绿阴线");
  }
上面的这个语句是很好理解的
但是大家想到了吗?开盘价和收盘价的比较,如果不满足Close>Open,也不满足Close==Open
那么肯定的一点就是:Close<Open,所以上面的语句可以写成:
If(Close>Open)
  {
    FileAppend("c:\a.log","今日收红阳线");
  }
Else If(Close==Open)
  {
    FileAppend("C:\a.log","今日收十字线");
  }
Else
  {
    FileAppend("c:\a.log","今日收绿阴线");
  }

再说For循环语句.
先记下For语句的语法格式:
For 循环变量 = 初始值 To 结束值
{
    TradeBlazer公式语句;
}
也就是(假如变量i已经定义,且循环5次)
For i = 0 To 4
{
    TradeBlazer公式语句;
}
for语句的理解稍微复杂点,但是大家不要怕,同样的很简单的,我们先看看For语句是如何执行的:
比如上面的例子
首先执行i=0,就是给变量i赋值让i等于0,然后判断i是不是少于等于4,这里i等于0,所以小于4,于是执行{}里面的TradeBlazer公式语句;
执行{}里面的TradeBlazer公式语句后,TB系统会自动给变量i加1,这个时候i就等于1了(上面刚刚开始的时候i等于0,加了1就是等于1了)
再判断i是不是少于等于To后面的4,1当然少于4,于是再执行{}里面的TradeBlazer公式语句;
执行完{}里面的TradeBlazer公式语句后,Tb系统又自动给变量i加1,上面i已经等于1了,加1,于是这个时候i等于2了,
于是再判断变量i的值2是不是少于To后面的4,当然少于拉,于是再执行{}里面的TradeBlazer公式语句;
....
以此执行,当i等于5的时候,再与To后面的4进行比较,当然5>4了,所以不满足条件了,于是不再执行{}里面的TradeBlazer公式语句;
而开始执行{}下面的语句拉
明白了么?
应该很清楚了
大家再研究下下面的HHV的写法,就会很明白了的:复制内容到剪贴板代码:
//------------------------------------------------------------------------
// 简称: HHV
// 名称: 求N周期的最高值
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
  NumericSeries Price(0);
  Numeric Length(5);
Vars
  Numeric highestValue(0);
  Numeric minDay;
  Numeric i;
Begin
  minDay = Min(CurrentBar,Length-1);
  for i=0 to minDay
  {
          highestValue=Max(highestValue,Price);
  }
  Return highestValue;
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/09/24 08:29
// 版权所有        pwqzc
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
-现在说说参数与函数,说完了这个东西,就要进入实践阶段了咯,就要准备开始实打实的独立编写指标了
首先我们必须明白,参数仅仅存在于函数里面,如果函数里面存在着参数,那么当你调用这个函数的时候必须要先传递参数给这个函数
看起来似乎有点深奥和晦涩,那么我们先来明白函数是什么就很容易明了
函数就是帮助我们完成某一件事情,并且完成这件事情以后会返回个东西给我们的一个方法.
比如一个这样的函数请注意,这仅仅是个假想的函数,仅为了帮助理解函数是什么):
GetCloseFromTrader
我们就很明白,这个函数就是帮助我们到交易所跑一趟,然后把收盘价返回给我们;
有点明白了吧,但是仔细一想,这个东西似乎有点问题,比如返回收盘价,晕死,交易所
那么多的品种,且每个品种都有那么多的月份,他到底返回的是什么东西的收盘价啊?
呵呵,那么我们这样写:
GetCloseFromTrader(Cu0801)
现在应该完全明白了,这个函数就是从交易所返回某个品种的收盘价,到底是什么品种什么月份的收盘价呢?
Cu0801就是拉.
其实,这里面的Cu0801就是这个函数所需要的参数!
我们于是就可以这样理解:函数是帮助用户完成某一件事情且返回用户所需要的数据的方法;
那么参数呢?参数就是参到函数里面去的数,也就是说必须要传递给函数的数;
我们现在不要求一定能够自己写函数,但是必须要懂得的是要看懂这个函数是做什么用的,且知道如何去调用这个函数!

Sunday, May 12, 2019

什么是有效状态密度?

(1)状态密度:
晶体电子的状态密度是指单位波矢空间中的状态数(即代表点的分布密度)。
因为晶体电子的状态不能采用坐标和动量来表征(不是经典电子之故),但是在自由电子近似下,可以采用晶体动量k(即波矢)来表征,波矢的大小|k|=1/λ,λ是电子波的波长。
由 晶体动量的三个分量可构成所谓k空间(波矢空间),该空间中的每一个点即代表晶体电子的一个状态。不过,由于晶体周期性势场的缘故,只需要k空间中的一个 对称性原胞——维格纳(Wigner)-赛兹(Seitz)原胞中的代表点即可(其中就包含了所有的电子状态),该维格纳-赛兹原胞往往被称为 Blliouin区。同时,这些代表点在Blliouin区中的分布是均匀的。而在晶体体积为V时,边界条件就限制了每一个代表点所占据的大小为1/V, 所以Blliouin区中代表点的分布密度即为V(即状态密度与晶体体积成正比),这就是晶体电子的状态密度。(注:若令|k|=2π/λ,则状态密 度=V/(2π)3 。)
(2)能态密度:
晶体电子的能态密度是指单位能量范围中的状态数。 把上述k空间中的状态密度概念转换到能量空间中来,即可得到能态密度。
从晶体能带来看,如果每一条能级有一个电子状态(即忽略电子自旋的状态),则能态密度也就是能带中的能级密度。由于能级在能带中的分布是不均匀的(即与能量相关),因此晶体电子的能态密度是能量的函数,故可称为能态密度函数。
在自由电子近似下,能态密度函数N(E)与能量E之间有亚抛物线关系:
该关系的比例系数是与晶体体积和电子有效质量有关的常数。在半导体的导带底和价带顶附近处载流子的能态密度就满足这样的关系。
(3)有效能级密度:
能带的有效能级密度(或者有效状态密度),是在简化讨论半导体载流子浓度时所引入的一个物理量。只要把上述的能态密度概念应用于半导体载流子的统计,即可得到有效能级密度。
半导体载流子也就是处于导带和价带中的电子和空穴,所以有效能级密度也就有导带有效能级密度和价带有效能级密度之分。
在 Boltzmann近似下,对于导带的电子来说,如果把导带中的所有可能占据的能级都归并到导带底(Ec)一条能级上(见图示),那么电子占据各条能级的 几率就都将一样(等于exp[-(Ec-EF)/(kT)]),于是就可立即写出导带电子浓度与Fermi能级EF的关系为
式中的Nc是归并到一起的、导带底Ec的能级密度,即单位能量范围内的能级数目(未考虑电子自旋状态),这就称为导带的有效能级密度。
可 见,有效能级密度就是把整个导带和价带分别归并为一条导带底和一条价带顶的能级时,其中所包含的等效能级(状态)的数目。它的特点是:①有效能级密度并不 是整个能带的、真实的能级密度,只是计入了能带中一部分能级之后的密度;②未考虑各条能级的能量差异,而是采用了一条能级来等效处理的结果;③温度越高, 电子的能量就越大,则在导带中可能占据的能级数目就越多,因此有效能级密度将会随着温度的升高而增大;④因为电子可能占据的能级数目以及用一条能级来等效 处理的结果,都与电子的有效质量和能带极值点的数目有关,所以有效能级密度与晶体的能带结构有关。总之,有效能级密度不同于上述的能态密度N(E)(即能 级密度),而是一个与能带结构和温度有关的常数。
同样,在Boltzmann近似下,对于价带的空穴,在估算空穴浓度时,也可以把价带中的所有可能占据的能级都归并到价带顶(Ev)一条能级上(见图示),该归并到一起的能级Ev的密度即为Nv,称为价带的有效能级密度。价带空穴的浓度可以给出为
在室温下,对于Si:Nc=2.8×10 19cm–3,Nv=1.0 4×10 19cm–3;对于GaAs:Nc=4.7×10 17cm–3,Nv=7.0×10 18cm–3。可见,不管是导带、还是价带,其有效能级密度都远小于晶体的原子密度(~5×10 22 cm–3)。这就表明,在Boltzmann近似适用的非简并情况下,导带电子只是占据导带中的很少一部分能级(这时电子基本上就处在导带底附近),空穴 也只是占据价带顶附近的一小部分能级。因此,在讨论半导体载流子的输运问题时,往往只考虑导带底和价带顶的状况即可。
注意:① 这里的有效能级密度概念只适用于非简并半导体。因为对于高掺杂和低温下的简并半导体,需要考虑Pauli原理和Fermi分布函数,则载流子浓度与 Fermi能级的关系就没有上述那么简单,从而也就不可能只是简单地采用有效能级密度来处理问题了。②在有效能级密度(Nc和Nv)中所牵涉到的载流子有 效质量与能带的有效质量有所不同,这里的有效质量往往称为状态密度有效质量(既计入了能带的有效质量,还计入了能带极值的情况)。
选自:http://www.zybang.com/question/9047b017f682734aa189516ba2dfa11c.html

关于德布罗意波中几个速度问题的讨论


西门子冰箱使用说明

https://www.doc88.com/p-9773337258654.html

Thursday, May 9, 2019

Sunday, May 5, 2019

四端电极法测试电阻为什么更准确?


https://www.zhihu.com/question/21266401

怎么在 Word 中方便地输入数学公式?

输入[ALT]+[=],然后就可以打代码了,格式可以在这里看(Linear format equations and Math AutoCorrect in Word)。
 https://www.zhihu.com/question/24613226

Endnote文献期刊全称与缩写如何转换

一个期刊通常有三种不同的名称表现形式(全称和两种缩写),以Advances In Physics为例,全称为Advances In Physics,缩写有两种Adv Phys和Adv. Phys.,不同期刊对于投稿论文中期刊名称有不同的要求,那么如何在不同名称之间自由切换呢?接下来就一步一步展示给大家。

方法/步骤

 
 首先,打开Endnote,选择tools->open term lists->Journals term list,点击“Journals term list”在“Term Lists”界面,选择“Lists”标签。在"Lists"界面中,点击“Journal List”。点击右侧第三项“Delete List”。

在上一步同一界面中,点击“Create List”。在输入栏中写入“Journal List”,注意输入栏下方Journal List前面一定要打√。点击“OK”。

在上步同一界面中,点击右侧第五项“Import List”,import txt文竭惮蚕斗件“endnote-jour荏鱿胫协nal-j.txt”(包含5746个期刊全称和缩写名称的文本)。点击“确定”,点击“Close”,完成包含全称和缩写名称文本的导入。

然后是如何选择用全称还是缩写。打开Endnote——点击工具栏“Edit/编辑”——下拉栏选择“Output Styles”——点击下拉菜单第二项“Edite “ICIC2017”,如图所示

然后,点击左侧菜单栏中第五项“Journal Names”,根据期刊要求选择右侧全称,缩写1,缩写2。最后保存修改格式。