大伊人青草狠狠久久-大伊香蕉精品视频在线-大伊香蕉精品一区视频在线-大伊香蕉在线精品不卡视频-大伊香蕉在线精品视频75-大伊香蕉在线精品视频人碰人

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

如何避免“FOR,WHILE,IF,ELSE中包含序列函數,可能存在潛在的邏輯錯誤。” [開拓者 TB]

  • 咨詢內容: 如FOR,WHILE,IF,ELSE中包含序列函數,導致條件不滿足時,序列函數的賦值就沒有被執行,缺省繼承了上一個序列值即x=x[1]; 解決的方法是將序列函數放在FOR,WHILE,IF,ELSE之外賦值,而在FOR,WHILE,IF,ELSE語句內引用相關變量。如:
    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; 語句是偶數時被賦值,因此顯示的是連續的偶數對。
    把賦值語句放到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技術人員: 如果函數中含有序列函數,當有條件調用函數時,也會出現序列函數不完全賦值的情況,如:
    // 應用主程序 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); //調用函數Test2
    End

    / 函數 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, 下載次數: 0) 2013-9-14 08:11:22 上傳 下載次數: 0

    如何將序列函數完整的傳遞給子函數呢?可把條件調用改為無條件調用,而把相應條件放入子函數中,如下示例:
    // 應用主程序 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); //無條件調用test2a
    End

    // 函數 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, 下載次數: 0) 2013-9-14 08:19:08 上傳 下載次數: 0

     

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

 

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

可聯系技術人員 QQ: 1145508240  有需要幫忙請點擊這里留言!!!進行 有償 編寫!不貴!點擊查看價格!


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

相關文章

    沒有相關內容
主站蜘蛛池模板: 九九99久久精品影视 | 亚洲久久久久 | 亚洲最大综合网 | 91亚洲精品久久91综合 | 欧美成人精品免费播放 | 亚洲日产综合欧美一区二区 | 免费国产成人高清在线观看视频 | 国产乱子伦一区二区三区 | 国产热re99久久6国产精品 | xxx中国毛茸茸| 欧美区一区二 | 日本高清中文字幕一区二区三区a | 精品免费视频 | 婷综合 | 久久国产视频网站 | 国内视频自拍在线视频 | 我想看一级毛片免费的 | 国产精品亚洲精品日韩已满 | 欧美性一区二区三区五区 | 九九九精品 | 青青草国产三级精品三级 | 亚洲综合色婷婷久久 | 日本狠狠干| 99精品视频在线观看 | 国产成人久久精品推最新 | 日日夜夜嗷嗷叫 | 天天干天天操天天干 | 热久久久久 | 日韩欧美中文字幕在线视频 | 男人的天堂一区二区视频在线观看 | 国产精品欧美一区二区 | 91成人国产网站在线观看 | 91国内精品久久久久免费影院 | 国产成人久久 | 9久9久热精品视频在线观看 | 桃子在线观看 | 91探花国产综合在线精品 | 亚洲视频区 | 在线观看免费精品国产 | 中文字幕日韩国产 | 在线观看日韩精品 |