龙听期货论坛's Archiver

龙听 发表于 2021-9-2 16:24

【down-to loop循环语句】

使用PowerLanguage 中的for-to 循环多次重复编程代码直到某个值。但是,如果您想从最旧的价格条开始到当前的价格条循环遍历历史价格条怎么办?
[p=30, 2, left][b]向下循环[/b]执行多次的编程代码进行了一定的循环周期,从起始开始值[i]下降到[/i]一个最终值(MultiCharts维基,2012A)。[/p][p=30, 2, left]向下循环具有以下默认模式(MultiCharts Wiki,2012a):[/p][p=30, 2, left][code]for counter = beginValue downto endValue begin

    // Code to execute repeatedly

end;[/code]
[/p][p=30, 2, left][font=Georgia, Cambria, serif][color=#424242][size=21px]一个向下循环包含三个部分:[/size][/color][/font][/p][p=30, 2, left][font=Georgia, Cambria, serif][color=#424242]
[/color][/font][/p][p=30, 2, left][font=Georgia, Cambria, serif][color=#424242][size=21px]该counter变量包含循环计数。当循环开始时,该变量的值为beginValue;[/size][/color][/font][/p][p=30, 2, left][font=Georgia, Cambria, serif][color=#424242][size=21px]该beginValue设置环路的初始值。由于向下循环减少了每个循环的循环次数,因此该值需要大于endValue;[/size][/color][/font][/p][p=30, 2, left][font=Georgia, Cambria, serif][color=#424242][size=21px]并endValue设置循环停止的值。[/size][/color][/font][/p]

龙听 发表于 2021-9-2 16:24

因此,一个向下循环从 开始beginValue并继续,只要counter不小于endValue。在每个循环周期结束时,该counter变量减 1。

龙听 发表于 2021-9-2 16:24

PowerLanguage 向下循环的特征
向下循环具有以下规则和功能(MultiCharts Wiki,2012a):

该counter变量在每个循环周期结束时自动降低-这并不需要手动进行;
在begin和end关键字是不可选的:他们需要被包含在每一个向下循环;
counter始终需要包含该变量并为其分配beginValue,即使此变量已具有值。
除了一个重要区别外,向下循环类似于for-to 循环:向下循环在每个循环周期结束时减少计数器变量,而 for-to 循环增加它(MultiCharts Wiki,2012b) .

龙听 发表于 2021-9-2 16:25

深入到 PowerLanguage 循环示例
一个基本的向下循环如下所示:[code]Variables:
    counter(0);

for counter = 4 downto 0 begin

    Print("The value of 'counter' is ", counter);

end;
[/code]//> The value of 'counter' is    4.00
//> The value of 'counter' is    3.00
//> The value of 'counter' is    2.00
//> The value of 'counter' is    1.00
//> The value of 'counter' is    0.00

龙听 发表于 2021-9-2 16:25

这个循环从 4 开始,只要循环计数大于或等于 0,就会重复循环内部的编程代码。这使得循环运行了 5 次。

循环计数变量 ( counter) 在每个循环循环结束时自动减 1。这个变量可以在循环内部使用来访问当前循环计数,这是通过打印它的值来完成的。

龙听 发表于 2021-9-2 16:27

使用向下循环计算更高收盘价的数量


循环通常用于在历史价格柱上循环,例如在计算最近 10 个价格柱中有多少收盘价更高时:[code]Variables:
    y(0), higherClose(0);

higherClose = 0;  
   
for y = 9 downto 0 begin

    if (Close[y] > Close[y + 1]) then begin
        
        Print("This close (", NumToStr(Close[y], 5),
            ") is higher than the previous close (",
            NumToStr(Close[y + 1], 5), ")");
            
        higherClose = higherClose + 1;
        
    end;

end;

Print("A total of ", NumToStr(higherClose, 0),  " bars closed higher.");[/code]//> This close (1.29387) is higher than the previous close (1.29384)
//> This close (1.29461) is higher than the previous close (1.29387)
//> This close (1.29470) is higher than the previous close (1.29461)
//> This close (1.29474) is higher than the previous close (1.29426)
//> A total of 4 bars closed higher.

这个向下循环从循环计数 9 开始,以 0 结束,总共 10 个循环。循环计数变量 ( y) 用于在循环内访问历史价格柱的收盘价。这是通过将此变量放在关键字后面的方括号 ([和])之间来完成的Close。

if 语句检查y柱线之前的收盘价是否高于之前的收盘价( Close[y+1])。Print()在这种情况下输出文本并且higherClose变量增加 1。循环完成后,该higherClose变量保存较高收盘价的总数。

概括
向下循环重复从开始值到特定结束值的begin和end关键字之间的所有编程代码。在每个循环周期结束时,循环计数变量自动减 1。

页: [1]