| 
 
 等级: 超级版主 
注册: 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控制语句,还是可以节省出大量的计算时间的. 总之所有的运算和判断都尽量安排在必要的时候进行。这样才能规避不必要
 的冗余计算。
 
 
 
 | 
 |