以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  求助:简单循环的写法  (http://weistock.com/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老师!