您現(xiàn)在的位置:程序化交易>> 期貨公式>> 交易開拓者(TB)>> 開拓者知識>>正文內(nèi)容

如何避免“FOR,WHILE,IF,ELSE中包含序列函數(shù),可能存在潛在的邏輯錯誤?!薄開拓者 TB]

  • 咨詢內(nèi)容: 如FOR,WHILE,IF,ELSE中包含序列函數(shù),導致條件不滿足時,序列函數(shù)的賦值就沒有被執(zhí)行,缺省繼承了上一個序列值即x=x[1]; 解決的方法是將序列函數(shù)放在FOR,WHILE,IF,ELSE之外賦值,而在FOR,WHILE,IF,ELSE語句內(nèi)引用相關變量。如:
    Vars
       NumericSeries myBar;
    Begin
       If (myBar/2==IntPart(myBar/2))
       {   myBar = CurrentBar;
           // 其他語句
       }
       Commentary ("myBay1 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum1: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
    End
    在這個程序中,由于myBar = CurrentBar; 語句是偶數(shù)時被賦值,因此顯示的是連續(xù)的偶數(shù)對。
    把賦值語句放到IF語句之前之外,則能解決不能每個Bar都賦值的問題,如下:
    Vars
       NumericSeries myBar;
    Begin
       myBar = CurrentBar;
       If (myBar/2==IntPart(myBar/2))
       {
           // 其他語句
       }
       Commentary ("myBay1 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum1: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
    End

     

  • TB技術人員: 如果函數(shù)中含有序列函數(shù),當有條件調(diào)用函數(shù)時,也會出現(xiàn)序列函數(shù)不完全賦值的情況,如:
    // 應用主程序 Test1
    Vars
       NumericSeries myBar;
    Begin
       myBar = CurrentBar;
       Commentary ("myBay1 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum1: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
       if (myBar/2==IntPart(myBar/2)) Test2(myBar); //調(diào)用函數(shù)Test2
    End

    / 函數(shù) Test2
    Params
       NumericSeries myBar;
    Vars
    Begin
       if (myBar/2==IntPart(myBar/2)) Return False;
       Commentary ("myBay2 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum2: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
       Return True;
    End
    此時,顯示如下圖:
    Test1.JPG (24.64 KB, 下載次數(shù): 0) 2013-9-14 08:11:22 上傳 下載次數(shù): 0

    如何將序列函數(shù)完整的傳遞給子函數(shù)呢?可把條件調(diào)用改為無條件調(diào)用,而把相應條件放入子函數(shù)中,如下示例:
    // 應用主程序 Test1a
    Vars
       NumericSeries myBar;
    Begin
       myBar = CurrentBar;
       Commentary ("myBay1 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum1: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
       test2a(myBar); //無條件調(diào)用test2a
    End

    // 函數(shù) Test2a
    Params
       NumericSeries myBar;
    Vars
    Begin
       if (myBar/2 ==IntPart(myBar/2)) Return False; //當條件滿足是返回
       Commentary ("myBay2 "+Text(myBar)+" "+Text(myBar[1])+" "+Text(myBar[2])+" "+Text(myBar[3])+" "+Text(myBar[4]));
       Commentary ("Sum2: "+ Text(myBar+myBar[1]+myBar[2]+myBar[3]+myBar[4]));
       Return True;
    End
    結果如下圖:
    Test2.JPG (25.66 KB, 下載次數(shù): 0) 2013-9-14 08:19:08 上傳 下載次數(shù): 0

     

  • TB客服: 仔細觀察這連個圖,發(fā)現(xiàn)有一個錯誤:第一個程序在偶數(shù)Bar上顯示,而第二個程序卻在奇數(shù)Bar上顯示,顯然邏輯上發(fā)生了錯誤。
    原因是小可在修改程序時疏忽而至。由于Test1a是有條件調(diào)用Test2a,因此把條件移到函數(shù)中時,要把邏輯值取反,即把
    if (myBar/2 == IntPart(myBar/2)) Return False;
    改為
    if (myBar/2 != IntPart(myBar/2)) Return False;
    是不是這樣?
    分享給大家,也借此經(jīng)常提醒自己,程序中盡量要避免編譯時出現(xiàn)“FOR,WHILE,IF,ELSE中包含序列函數(shù)......”的警示提示。

 

有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友

可聯(lián)系技術人員 QQ: 1145508240  有需要幫忙請點擊這里留言!?。? title=進行 有償 編寫!不貴!點擊查看價格!


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內(nèi)容
主站蜘蛛池模板: 欧美一级高清免费a| 97精品国产97久久久久久免费| 男人操女人的免费视频| 国产成人精品三级在线| 中国一级特黄aa毛片大片| 欧美精品blacked中文字幕| 国产一级在线视频| 91精品国产入口| 成人亚洲欧美日韩在线| 亚洲天堂中文字幕在线观看| 精品一区二区三区中文字幕| 国产午夜鲁丝片av无码免费| 69久久夜色精品国产69| 巨大欧美黑人xxxxbbbb| 久久大香伊人中文字幕| 狠狠综合久久久久尤物丿| 国产一区精品视频| 五月激情丁香网| 大量精子注入波多野结衣| 中文字幕永久免费| 日韩欧美亚洲中字幕在线播放| 伊人性伊人情综合网| 色偷偷亚洲综合网亚洲| 国产精品成年片在线观看| jlzzjlzz亚洲乱熟在线播放| 无码一区二区三区在线| 亚洲国产精品久久丫| 看全色黄大色大片| 国产2021中文天码字幕| 黄色激情视频在线观看| 国产精品日韩欧美| aⅴ在线免费观看| 性短视频在线观看免费不卡流畅| 亚洲国产一区二区三区在线观看| 精品视频一区二区| 国产人成视频在线观看| 日本色图在线观看| 国产精品视频二区不卡| bbbbbbbbb欧美bbb| 影音先锋在线免费观看| 久久精品国内一区二区三区 |