金字塔决策交易系统

标题: 有没有类似switch的跳转语句 [打印本页]

作者: 103905    时间: 2023-7-6 08:43
标题: 有没有类似switch的跳转语句
帮我看一下怎么实现
有2段程序策略,不生效时2个策略平级,当一个策略生效时即定义为优先级只运行一个策略,另一个策略需要等到这策略释放权限后才有运行权限
策略如下

variable:多标志=1,空标志=0;
variable:                 空=0;


ma1:=ma(c,20);
//A策略-----做多-----
多:= C>MA1;  
均线最低20:=LLV(ma1,N20);
if C>均线最低20 then 多:=1;  
if ma5>ma6  then     多:=1;     
这里还有很多代码
if 多 then LL:=ma1*0.9;
if 多 then BEGIN 多标志:=多标志+1;空标志:=0;   //多方有3个标志可以代表A策略有效    ( 多>0 ;   多标志>0;  空标志<1)

//if 多 then GOTO 空方结束;  
//B策略---------做空----------
空:= 多<1;
均线最高20:=HHV(ma1,N20);
if C<均线最高20 then 空:=1;
if ma4<ma5  then     空:=1;        
这里有很多不同类别的处理程序
if 空 then LL:=MA1*1.1;
if 空 then BEGIN 空标志:=空标志+1;多标志:=0; END  //空方与多方一样也有3个标志可以用,(最好能用  空>0)

//空方结束@;

//下面的风控策略管理等其他
如果有C语言的switch这类应可以直接用,但好像这个没有只找到 GOTO,帮看一下怎么样实现更好一些




作者: 技术006    时间: 2023-7-6 08:52
没有这种结构。只能是用if语句段处理
作者: 103905    时间: 2023-7-6 09:01
刚才说还少说了,2个策略不是只运行一个,而是2个都要运行,只是一个与另一个运行顺序相当于反过来,如一开始先动行A策略再动行B策略,调转顺序后是先运行B策略再运行A策略
If不行吧,if里面大量程序电脑会有卡死的风险吧
帮写一个,看看怎么实现
作者: 103905    时间: 2023-7-6 09:06
有没有像call调用函数那样的指令,

作者: 技术009    时间: 2023-7-6 09:19
没有这种的,pel只是一个简易语言框架,没那么细致的。你只能使用if处理。而且不存在说使用if有什么风险的问题。
作者: 103905    时间: 2023-7-6 09:53
if里这有有警示

作者: 技术009    时间: 2023-7-6 09:56
把这些统计类的计算 直接拎出来 放到if外面 赋值给一个变量。然后在if内部使用就行了。


作者: 技术006    时间: 2023-7-6 09:58
这是模式限制。逐k模式要求每根K都要有数值,即序列变量和k线是意义对应的关系。
https://www.weistock.com/docs/PEL_Develop/notes/%E8%AF%AD%E6%B3%95%E5%85%A5%E9%97%A8/%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6.html#选择结构
作者: 103905    时间: 2023-7-6 10:03
这个参数查找有没有什么特别的使用方法,为什么我总是用不了查找,如打IF,这肯定是有的,但就是查不到相关

作者: 技术009    时间: 2023-7-6 10:05
在在线文档里找:
https://www.weistock.com/docs/

编译器里的不好用。

作者: 103905    时间: 2023-7-6 10:14
if里运行ma这种好像没发现问题,只是他提示了怕他出错,这个问题还好
就是用if后一个模块程序后,他没有反回,这个就难了,如果先A再B,可反过来先B再A,这没想明白怎么转
帮写一个这种打转的
作者: 技术006    时间: 2023-7-6 10:27
没明白您表述的意思,能否在详细些
作者: 103905    时间: 2023-7-6 10:57

帮我看一下怎么实现
有2段程序策略,不生效时2个策略平级,当一个策略生效时即定义为优先级运行完了再运行另一个策略,另一个策略需要等到这策略释放权限后才有运行权限
如:假如开始时运行A策略,那么运行完A策略后再运行B策略,如果A策略标志消失了,并让B策略抢到优先,那么程序就只能先运行B策略,再运行A策略     (这个的难点在于,这程序是流水式的,没有返回,要有返回就很容易,刚想到一个办法把策略打包成一个可以返回的程序块,这应可行)
策略如下

variable:多标志=1,空标志=0;
variable:                 空=0;


ma1:=ma(c,20);
//A策略-----做多-----
多:= C>MA1;  
均线最低20:=LLV(ma1,N20);
if C>均线最低20 then 多:=1;  
if ma5>ma6  then     多:=1;     
这里还有很多代码
if 多 then LL:=ma1*0.9;
if 多 then BEGIN 多标志:=多标志+1;空标志:=0;   //多方有3个标志可以代表A策略有效    ( 多>0 ;   多标志>0;  空标志<1)

//if 多 then GOTO 空方结束;  
//B策略---------做空----------
空:= 多<1;
均线最高20:=HHV(ma1,N20);
if C<均线最高20 then 空:=1;
if ma4<ma5  then     空:=1;        
这里有很多不同类别的处理程序
if 空 then LL:=MA1*1.1;
if 空 then BEGIN 空标志:=空标志+1;多标志:=0; END  //空方与多方一样也有3个标志可以用,(最好能用  空>0)

//空方结束@;
作者: 技术006    时间: 2023-7-6 11:18
你是想要两段代码之间产生互锁机制吧?pel没有程序块的概念,行不通的。

互锁机会的实现,需要产生闭环,你上面的描述没有闭环条件,需要你提供完善的过程。例如:什么时候解除A的优先级。是平仓后还是什么时候。

作者: 103905    时间: 2023-7-6 11:55
用GOTO调动程序顺序应可以吧,我用这个试了,老提示里面可能出错,
提供完善的过程这不行,这里面是打算做一个完整信号网路,会很大变化,程序量也会很多

是互锁机意思,多与空其实在运行完整个代码后是唯一个结果,要么1要么0,只是程序中间会不停的变动
作者: 103905    时间: 2023-7-6 11:59
解除A的优先级是B取得了优先级,这是独立的策略,所以关系只与A与B的0 与1,这0与1 的变化不用用理,A与B只有一个优先就可以,程序里面会定义级别,要是只是要锁定这个优先级
作者: 103905    时间: 2023-7-6 12:01
如果有CALL类的就可以这样,
当A等于1,那么先运行A,再运行B
当B等于1, 那么选动行B,再动行A
只是现在运行B后回来到A了

补充内容 (2023-7-6 12:01):
只是现在运行B后回不到A了
作者: 技术006    时间: 2023-7-6 13:17
抱歉,没有好的解决方法。即使是采用全局变量也不容易实现你这种既要又不要的特性。
使用goto语句也不现实,这种反复跳转存在不可控因素,以及序列变量计算不完整的情况。
作者: 103905    时间: 2023-7-6 13:36
不复杂,就是很普通的一个涵数调用而已
作者: 103905    时间: 2023-7-6 13:45
或者更简单
就是程序的写法是顺着写A,完了写B
执行一个if B等于1时先运行B,再运行A就可以

作者: 103905    时间: 2023-7-6 13:46
现在的问题是程序跑过去了,回不来

作者: 技术006    时间: 2023-7-6 13:59
程序的执行结果在编写时就是确定的。没办法动态调整顺序
作者: 103905    时间: 2023-7-6 14:35
算了,还真费脑,算了,再做一个程序就可以了
留个信吧,后面有更好的再说叫
程序顺序写成ABA,
当A有效时跑AB后跳走
当B有效时跑BA就可以了




欢迎光临 金字塔决策交易系统 (https://www.weistock.com/BBS/) Powered by Discuz! X3.4