以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 关于顾比倒数线策略的VALUEWHEN函数的用法 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=167350) |
-- 作者:m1978xz -- 发布时间:2018/12/26 11:31:46 -- 关于顾比倒数线策略的VALUEWHEN函数的用法 问题在这个系统自带策略我贴过来部分的最后一句(红色部分是在下写的注释 顾比倒数线策略
//定义参数 H11:=HIGH;//h11为本K线最高价 L11:=LOW;//L11为本K线最低价 A:=IFELSE(HIGH>=REF(HIGH,1)&&HIGH>=REF(HIGH,2)&&HIGH>=REF(HIGH,3) &&HIGH>=REF(HIGH,4)&&HIGH>=REF(HIGH,5),LOW,0); //定义A的计算公式为:如果(K线最高点≥前面第1根K线的最高价) 同时(高点≥前面第2根K线的最高价) 同时(高点≥前面第3根K线的最高价) 同时(高点≥前面第4根K线的最高价) 同时(高点≥前面第5根K线的最高价) 如果成立就返回本K线最低价,否则返回0 (这个返回零的情况,应该是后边有个判断是否大于零,如果大于零这根K线就参与比较,如果等于零这根K线就被忽略不参与后边的比较)
B:=IFELSE(LOW<=REF(LOW,1)&&LOW<=REF(LOW,2)&&LOW<=REF(LOW,3) &&LOW<=REF(LOW,4)&&LOW<=REF(LOW,5),HIGH,888888); //定义B的计算公式为:如果(K线最低点≤前面第1根K线的最低价) 同时(K线最低点≤前面第1根K线的最低价) 同时(K线最低点≤前面第2根K线的最低价) 同时(K线最低点≤前面第3根K线的最低价) 同时(K线最低点≤前面第4根K线的最低价) 同时(K线最低点≤前面第5根K线的最低价) 如果成立就返回本K线最高价,否则返回888888,这个888888貌似没啥用,返回>0的就行,貌似。
P1:=IFELSE(A>REF(L11,1),REF(L11,1),0); //p1的计算公式为:如果(A>前1K线最低点)则返回前1K线最低价,否则返回0.
P2:=IFELSE(A>REF(L11,2)&&A<=REF(L11,1),REF(L,2),0); //p2的计算公式为:如果(A>前2K线最低点) 同时(A≤前1K线最低点) 则返回前2K线最低价,否则返回0.
P3:=IFELSE(A>REF(L11,3)&&A<=REF(L11,1)&&A<=REF(L11,2),REF(L11,3),0); //p3的计算公式为:如果(A>前3K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 则返回前3K线最低价,否则返回0.
P4:=IFELSE(A>REF(L11,4)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3),REF(L11,4),0); //p4的计算公式为:如果(A>前4K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 则返回前4K线最低价,否则返回0.
P5:=IFELSE(A>REF(L11,5)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4),REF(L11,5),0); //p5的计算公式为:如果(A>前5K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 则返回前5K线最低价,否则返回0.
P6:=IFELSE(A>REF(L11,6)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4)&&A<=REF(L11,5),REF(L11,6),0); //p6的计算公式为:如果(A>前6K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 同时(A≤前5K线最低点) 则返回前6K线最低价,否则返回0.
P7:=IFELSE(A>REF(L11,7)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4)&&A<=REF(L11,5)&&A<=REF(L11,6),REF(L11,7),0); //p7的计算公式为:如果(A>前7K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 同时(A≤前5K线最低点) 同时(A≤前6K线最低点) 则返回前7K线最低价,否则返回0.
P8:=IFELSE(A>REF(L11,8)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4)&&A<=REF(L11,5)&&A<=REF(L11,6)&&A<=REF(L11,7),REF(L11,8),0); //p8的计算公式为:如果(A>前8K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 同时(A≤前5K线最低点) 同时(A≤前6K线最低点) 同时(A≤前7K线最低点) 则返回前8K线最低价,否则返回0.
P9:=IFELSE(A>REF(L11,9)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4)&&A<=REF(L11,5)&&A<=REF(L11,6)&&A<=REF(L11,7)&&A<=REF(L11,8),REF(L11,9),0); //p9的计算公式为:如果(A>前9K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 同时(A≤前5K线最低点) 同时(A≤前6K线最低点) 同时(A≤前7K线最低点) 同时(A≤前8K线最低点) 则返回前9K线最低价,否则返回0.
P10:=IFELSE(A>REF(L11,10)&&A<=REF(L11,1)&&A<=REF(L11,2)&&A<=REF(L11,3)&&A<=REF(L11,4)&&A<=REF(L11,5)&&A<=REF(L11,6)&&A<=REF(L11,7)&&A<=REF(L11,8)&&A<=REF(L11,9),REF(L11,10),0); //p10的计算公式为:如果(A>前10K线最低点) 同时(A≤前1K线最低点) 同时(A≤前2K线最低点) 同时(A≤前3K线最低点) 同时(A≤前4K线最低点) 同时(A≤前5K线最低点) 同时(A≤前6K线最低点) 同时(A≤前7K线最低点) 同时(A≤前8K线最低点) 同时(A≤前9K线最低点) 则返回前10K线最低价,否则返回0.
AA:=P1+P2+P3+P4+P5+P6+P7+P8+P9+P10; //AA等于这些的和,这个数值有啥用不太理解,应该不止一个是非零的。
PP1:=IFELSE(AA>REF(L11,1),REF(L11,1),0); //pp1的计算公式为:如果(AA大于前边第1根K线)就返回本周期K线最低点,否则返回0
PP2:=IFELSE(AA>REF(L11,2)&&AA<=REF(L11,1),REF(L11,2),0); //pp2的计算公式为:如果(AA大于前边第2根K线) 同时(AA≤前1K线最低点)
就返回前2线最低点,否则返回0
PP3:=IFELSE(AA>REF(L11,3)&&AA<=REF(L11,1)&&AA<=REF(L11,2),REF(L11,3),0); //pp3的计算公式为:如果(AA大于前边第3根K线) 同时(AA≤前1K线最低点) 同时(AA≤前2K线最低点)
就返回前3线最低点,否则返回0
PP4:=IFELSE(AA>REF(L11,4)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3),REF(L11,4),0); //pp4的计算公式为:如果(AA大于前边第4根K线) 同时(AA≤前1K线最低点) 同时(AA≤前2K线最低点) 同时(AA≤前3K线最低点)
就返回前4线最低点,否则返回0
PP5:=IFELSE(AA>REF(L11,5)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4),REF(L11,5),0); PP6:=IFELSE(AA>REF(L11,6)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4)&&AA<=REF(L11,5),REF(L11,6),0); PP7:=IFELSE(AA>REF(L11,7)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4)&&AA<=REF(L11,5)&&AA<=REF(L11,6),REF(L11,7),0); PP8:=IFELSE(AA>REF(L11,8)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4)&&AA<=REF(L11,5)&&AA<=REF(L11,6)&&AA<=REF(L11,7),REF(L11,8),0); PP9:=IFELSE(AA>REF(L11,9)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4)&&AA<=REF(L11,5)&&AA<=REF(L11,6)&&AA<=REF(L11,7)&&AA<=REF(L11,8),REF(L11,9),0); PP10:=IFELSE(AA>REF(L11,10)&&AA<=REF(L11,1)&&AA<=REF(L11,2)&&AA<=REF(L11,3)&&AA<=REF(L11,4)&&AA<=REF(L11,5)&&AA<=REF(L11,6)&&AA<=REF(L11,7)&&AA<=REF(L11,8)&&AA<=REF(L11,9),REF(L11,10),0); AAA:=PP1+PP2+PP3+PP4+PP5+PP6+PP7+PP8+PP9+PP10; //AAA等于这些的和,这个数值有啥用不太理解,应该不止一个是非零的。
C11:=VALUEWHEN(AAA>0,AAA); //C11的计算公式为:如果AAA>0,就返回AAA,否则返回VALUEWHEN的前一个值 --------------------------------------- 这句貌似是说如果AAA>0就返回AAA,否则返回VALUEWHEN的前一个值 问题是这个AAA是合计出来的值,比如是2485,那它前一个数字应该是2484?如果AAA是0,那前一个是-1? 但是我去掉这个C11:后边的等号让他的值在图左上方显示,当AAA为零是,C11是4位数,比如2485. 所以麻烦高手给讲下为啥会“否则返回VALUEWHEN的前一个值”这句话中的前一个值是怎么算出来的前一个。
|
-- 作者:m1978xz -- 发布时间:2018/12/26 11:39:21 -- 是不是说比如C11开始是0,之后AAA大于零了比如成了2573,C11也变成2573 之后,如果下一根K线出现,程序再运行一遍时,AAA为0,那这个C11就还是2573不变。 如果AAA再次非零,比如成2584了,那C11也重新赋值为2573?
|
-- 作者:FireScript -- 发布时间:2018/12/26 13:10:21 -- 前一个是指上次 aaa>0位置 对应的aaa的值。 你要在当前K位置看最近一次aaa>0的位置在在什么地方,然后取这个K位置的aaa值。 |
-- 作者:FireScript -- 发布时间:2018/12/26 13:19:56 -- 是的,三种可能的返回值,三选一。这里写-3后面的判断肯定也是和-3关联的,前后保持一致就行了。这就是一种标识而已。 |
-- 作者:m1978xz -- 发布时间:2018/12/26 13:24:45 -- 回复:(FireScript) 是的,三种可能的返回值,... 谢谢 版主指点 ![]() |
-- 作者:m1978xz -- 发布时间:2018/12/26 14:29:46 -- 回复:(FireScript) 是的,三种可能的返回值,... IF HOLDING=0 THEN BEGIN //若持仓为0 IF TMP<=0 THEN //且TMP<=0 BUY(1,1,LIMITR,CLOSE); //开多单(限价入场,按本周期收盘价来买) 请教版主:这个buy括号里边的第一个是cond的条件,这里边是个1应该怎么理解啊?就是说如果前边IF的那2个条件为true的话? 如果是这样。那不是条件写外边去了么? 还有那个close。我看是本周期收盘价,那买的时候这根K线还没走完的话怎么办?等最后几秒买?还是只前边那根K线的收盘价啊? |
-- 作者:FireScript -- 发布时间:2018/12/26 14:35:20 -- 1就是表示条件成立的意思。你如果是这里写c>o或者其他判断语句,那最后返回值也就是1或者0 表示是与否的意思了。closeK线如果是走完的话,自然表示收盘价,没走完其实就是当前最新价啊。 |
-- 作者:m1978xz -- 发布时间:2018/12/26 14:49:45 -- 回复:(FireScript) 1就是表示条件成立的意思。... 感谢版主回复,如果没您指导。这个问题会困扰我很久很久。 |