等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
- FireScript
|
楼主 |
发表于 2021-7-15 14:57
|
显示全部楼层
本帖最后由 技术009 于 2021-7-23 14:18 编辑
使用IF...THEN 跳过仅最后周期有效的代码
金字塔里某些函数是仅在最后周期有效。
例如下面的模型代码:
[PEL] 复制代码 SENDMAIL(多,'******@qq.com','+5 开多仓','开多仓');
SENDMAIL(多A,'******@qq.com','+5 A平多仓','A平多仓');
SENDMAIL(多B,'******@qq.com','+5 成本价平多仓','成本价平多仓');
这是一段在模型中定期向邮箱发送邮件的代码,由于SENDMAIL是最后一个周期有效的函数,那么我们可以使用IF THEN控制语句直接将非最后周期的运算直接跳过,这样效率也会增加很多的,改进代码如下:
[PEL] 复制代码 IF ISLASTBAR THEN
BEGIN
SENDMAIL(多,'******@qq.com','+5 开多仓','开多仓');
SENDMAIL(多A,'******@qq.com','+5 A平多仓','A平多仓');
SENDMAIL(多B,'******@qq.com','+5 成本价平多仓','成本价平多仓');
END
改进后的代码只会在最后K线是才进入IF 语句中执行邮件发送指令的处理, 省去了系统运行时再挨个判断的麻烦了。
上面的代码还有再进一步优化的空间,因为字符串的计算是非常低效的。尽管 "多A" 这个变量没有成立,但是系统解释这行代码时还是会去计算SENDMAIL函数参数里面的字符串的部分,
比如 '******@qq.com','+5 A平多仓','A平多仓' 这部分的字符串计算。 其实我们可以直接在控制语句中将变量控制好,如果没有条件满足,即便在最后K线也无需再进入邮件指令发送流程, 改进后的代码如下:
[PEL] 复制代码
IF ISLASTBAR THEN
BEGIN
if 多 then SENDMAIL(1,'******@qq.com','+5 开多仓','开多仓');
if 多A then SENDMAIL(1,'******@qq.com','+5 A平多仓','A平多仓');
if 多B then SENDMAIL(1,'******@qq.com','+5 成本价平多仓','成本价平多仓');
END
只要我们在平日的代码编写过程中,多好好利用IF THEN控制语句,还是可以节省出大量的计算时间的. 总之所有的运算和判断都尽量安排在必要的时候进行。这样才能规避不必要
的冗余计算。
|
|