以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 求助:简单循环的写法 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=184920) |
-- 作者:zhangcharlie -- 发布时间:2021/3/28 10:24:03 -- 求助:简单循环的写法 N2:=20; N3:=30; M2:=MA(CLOSE,20-i); M3:=MA(CLOSE,30-i); i不超过20 i=1 to 20; i 执行到多少,m2-m3=0{m2均线与M3均线相等,或者差额最小,两条均线最接近} 求i 的数值, 谢谢帮助 |
-- 作者:zhangcharlie -- 发布时间:2021/3/28 10:31:36 -- i 执行到多少,m2-m3=0{m2均线与M3均线相等,如果没有相等的可能性,那就输出无解,这样简单点 |
-- 作者:FireScript -- 发布时间:2021/3/29 9:36:51 -- mark:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); if m2=m3 then mark:=i; end show:mark; 或者 VARIABLE:x[20]:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); x[i]:=abs(m2-m3); end show:MFAMAX(x ,20);//这种可以找到绝对值最小位置的I值。 写倒是没啥吧,就是遍历下所以I情况下的均线值,再做个对比。但是这种循环运行起来会很卡的。
[此贴子已经被作者于2021/3/29 9:37:16编辑过]
|
-- 作者:zhangcharlie -- 发布时间:2021/3/29 10:20:20 -- 以下是引用FireScript在2021/3/29 9:36:51的发言:
mark:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); if m2=m3 then mark:=i; end show:mark; 或者 VARIABLE:x[20]:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); x[i]:=abs(m2-m3); end show:MFAMAX(x ,20);//这种可以找到绝对值最小位置的I值。 写倒是没啥吧,就是遍历下所以I情况下的均线值,再做个对比。但是这种循环运行起来会很卡的。 mark:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); if m2=m3 then mark:=i; end show:mark; 谢谢帮助,我表达得不精确,不是m2=m3,正好相等的可能性几乎没有,是m2,m3交叉的意思;如果不存在交叉就输出0,这样的情况怎么写,谢谢!
[此贴子已经被作者于2021/3/29 9:37:16编辑过]
|
-- 作者:FireScript -- 发布时间:2021/3/29 10:28:20 -- 后面一种写法就是取绝对值最小,也就是差值最小的位置的。 我也觉得相等不可能,所以才提供了后面的那种方式。 |
-- 作者:zhangcharlie -- 发布时间:2021/3/29 13:12:00 -- VARIABLE:x[20]:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); x[i]:=abs(m2-m3);/////修改成m2与m3一旦金叉或者死叉 就停止计算 end show:i; //m2与m3一旦金叉或者死叉的I值。 请FireScript老师再出手相助,谢谢!
|
-- 作者:FireScript -- 发布时间:2021/3/29 13:18:04 -- mark:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); if cross(m2,m3) then mark:=i; end show:mark; 判断条件改下就行了。但是如果有多个满足条件的I 只能输出最后一个。没办法都计算出来。 |
-- 作者:zhangcharlie -- 发布时间:2021/3/29 14:00:01 -- 想要输出第一个交叉时的 i 怎么办? |
-- 作者:FireScript -- 发布时间:2021/3/29 14:02:52 -- 这样试下。 mark:=0; for i=1 to 20 do begin m2:=ma(c,20-i); m3:=ma(c,30-i); if cross(m2,m3) then begin mark:=i; BREAK; end end show:mark; 如果不存在金叉的 mark值为0.
|
-- 作者:zhangcharlie -- 发布时间:2021/3/29 20:28:48 -- 谢谢FireScript老师! |