求助死循環 [開拓者 TB]
- 咨詢內容: 我的用戶函數:
// 簡稱: NthCrossUpMAHighOverBarPos
// 名稱: 回溯第N個上纏繞MA頂值、收過MABar索引值
// 類別: 用戶函數
// 類型: 用戶函數
// 輸出: 數值型
//------------------------------------------------------------------------
Params
Numeric N(0);
Numeric Length(0);
NumericRef CrossUpMAOverBarPos;
Vars
Numeric ReBarsCrossOverMA(0);
Numeric ReBarsCrossOverMAplus(0);
Numeric ReBarsCrossUnderMA(0);
Numeric i;
Numeric CrossUpMAHigh;
Begin
ReBarsCrossOverMA=NthCon(CrossOver(C,AverageFC(C,Length)),N);
ReBarsCrossOverMAplus=NthCon(CrossOver(C,AverageFC(C,Length)),N+1);
ReBarsCrossUnderMA=NthCon(CrossUnder(C,AverageFC(C,Length)),N);
If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
{
For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
{
If (H[i] > CrossUpMAHigh)
CrossUpMAHigh = H[i];
}
CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;
}
Return CrossUpMAHigh;
End
//------------------------------------------------------------------------
我的公式應用:
// 簡稱: TproNthCrossUpMAHighOverBarPos
// 名稱: 驗證回溯遞增第N個上纏繞MA頂值、收過MABar索引值
// 類別: 公式應用
// 類型: 用戶應用
// 輸出:
//------------------------------------------------------------------------
Params
Numeric N(2);
Numeric Length(5);
Vars
Numeric CrossUpMAHigh;
Numeric CrossUpMAOverBarPos;
Numeric i;
Numeric j;
Numeric MyHigh;
Numeric MyBarPos;
Begin
i=2;
j=1;
CrossUpMAHigh=NthCrossUpMAHighOverBarPos(1,Length,CrossUpMAOverBarPos);
MyBarPos=CrossUpMAOverBarPos;
While ((j<N)&&(MyBarPos>0))
{MyHigh=NthCrossUpMAHighOverBarPos(i,Length,CrossUpMAOverBarPos);
MyBarPos=CrossUpMAOverBarPos;
i=i+1;
If (MyHigh>CrossUpMAHigh)
{CrossUpMAHigh=MyHigh;
j=j+1;
}
}
If (MyBarPos==0)
{CrossUpMAHigh=0;
}
Commentary("回溯遞增第"+Text(N)+"個上纏繞MA頂值"+Text(CrossUpMAHigh));
Commentary("回溯遞增第"+Text(N)+"個上纏繞MA收過MABar索引值"+Text(MyBarPos));
End
//------------------------------------------------------------------------
上述公式應用插入超級圖表,出現死循環,請教TB老師解決辦法,多謝! - TB技術人員: 應TB工程師的要求,發了上面的帖子,通了4次電話,過了4個小時,仍沒有回復,TB服務太差了!如果不想解決,為何要我發帖干等?
- TB客服: 用戶函數那 N的值應要大于等于1的自然數, 您初始付的值為0
- 網友回復: 本帖最后由 wwr_5817 于 2012-12-19 15:05 編輯
多謝LZ,LZ實在是高!不死循環了!可結果在N>1時恒為0,可否再指點指點? - 網友回復:
請管理員tradeblazer繼續解答我的問題!
我的用戶函數:
// 簡稱: NthCrossUpMAHighOverBarPos
// 名稱: 回溯第N個上纏繞MA頂值、收過MABar索引值
// 類別: 用戶函數
// 類型: 用戶函數
// 輸出: 數值型
//------------------------------------------------------------------------
Params
Numeric N(1);
Numeric Length(5);
NumericRef CrossUpMAOverBarPos;
Vars
Numeric ReBarsCrossOverMA(0);
Numeric ReBarsCrossOverMAplus(0);
Numeric ReBarsCrossUnderMA(0);
Numeric i;
Numeric CrossUpMAHigh;
Begin
ReBarsCrossOverMA=NthCon(CrossOver(C,AverageFC(C,Length)),N);
ReBarsCrossOverMAplus=NthCon(CrossOver(C,AverageFC(C,Length)),N+1);
ReBarsCrossUnderMA=NthCon(CrossUnder(C,AverageFC(C,Length)),N);
If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
{
For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
{
If (H[i] > CrossUpMAHigh)
CrossUpMAHigh = H[i];
}
CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;
}
Return CrossUpMAHigh;
End
//------------------------------------------------------------------------
我的公式應用1:
/ 簡稱: TproNthCrossUpMAHighOverBarPos
// 名稱: 驗證回溯遞增第N個上纏繞MA頂值、收過MABar索引值
// 類別: 公式應用
// 類型: 用戶應用
// 輸出:
//------------------------------------------------------------------------
Params
Numeric N(2);
Numeric Length(5);
Vars
Numeric CrossUpMAHigh;
Numeric CrossUpMAOverBarPos;
Numeric i;
Numeric j;
Numeric MyHigh;
Numeric MyBarPos;
Begin
i=2;
j=1;
CrossUpMAHigh=NthCrossUpMAHighOverBarPos(1,Length,CrossUpMAOverBarPos);
MyBarPos=CrossUpMAOverBarPos;
Commentary("While前CrossUpMAHigh="+Text(CrossUpMAHigh));
Commentary("While前MyBarPos="+Text(MyBarPos));
Commentary("While前j="+Text(j));
Commentary("While前N="+Text(N));
While ((j<N)&&(MyBarPos>0))
{Commentary("While中調用戶函數前i="+Text(i));
Commentary("While中調用戶函數前j="+Text(j));
Commentary("While中調用戶函數前MyBarPos="+Text(MyBarPos));
Commentary("While中調用戶函數前MyHigh="+Text(MyHigh));
MyHigh=NthCrossUpMAHighOverBarPos(i,Length,CrossUpMAOverBarPos);
Commentary("While中NthCrossUpMAHighOverBarPos(i,Length,CrossUpMAOverBarPos)="+Text(NthCrossUpMAHighOverBarPos(i,Length,CrossUpMAOverBarPos)));
Commentary("While中CrossUpMAOverBarPos="+Text(CrossUpMAOverBarPos));
MyBarPos=CrossUpMAOverBarPos;
Commentary("While中i+1前i="+Text(i));
Commentary("While中i+1前MyBarPos="+Text(MyBarPos));
Commentary("While中i+1前MyHigh="+Text(MyHigh));
i=i+1;
Commentary("While中i="+Text(i));
Commentary("While中MyBarPos="+Text(MyBarPos));
Commentary("While中MyHigh="+Text(MyHigh));
Commentary("While中CrossUpMAHigh="+Text(CrossUpMAHigh));
If (MyHigh>CrossUpMAHigh)
{CrossUpMAHigh=MyHigh;
j=j+1;
Commentary("While中j="+Text(j));
Commentary("While中MyBarPos="+Text(MyBarPos));
Commentary("While中CrossUpMAHigh="+Text(CrossUpMAHigh));
}
}
If (MyBarPos==0)
{CrossUpMAHigh=0;
}
Commentary("回溯遞增第"+Text(N)+"個上纏繞MA頂值"+Text(CrossUpMAHigh));
Commentary("回溯遞增第"+Text(N)+"個上纏繞MA收過MABar索引值"+Text(MyBarPos));
End
//------------------------------------------------------------------------
我的公式應用2:
// 簡稱: TNthCrossUpMAHighOverBarPos
// 名稱: 驗證回溯第N個上纏繞MA頂值、收過MABar索引值
// 類別: 公式應用
// 類型: 用戶應用
// 輸出:
//------------------------------------------------------------------------
Params
Numeric N(2);
Numeric Length(5);
Vars
Numeric CrossUpMAHigh;
Numeric CrossUpMAOverBarPos;
Begin
CrossUpMAHigh=NthCrossUpMAHighOverBarPos(N,Length,CrossUpMAOverBarPos);
Commentary("回溯第"+Text(N)+"個上纏繞MA頂值"+Text(CrossUpMAHigh));
Commentary("回溯第"+Text(N)+"個上纏繞MA收過MABar索引值"+Text(CrossUpMAOverBarPos));
End
//------------------------------------------------------------------------
您于3樓的答復,我在1樓的公式應用不死循環了,但其結果在N=2時恒為0。用公式應用2驗證,我的用戶函數NthCrossUpMAHighOverBarPos(2,5,CrossUpMAOverBarPos)正確,但在1樓的公式應用中加入Commentary語句的公式應用1中While內首次調用NthCrossUpMAHighOverBarPos(2,5,CrossUpMAOverBarPos)結果為0,不知何故?公式應用1中While行后第二行插入“Commentary("While中調用戶函數前j="+Text(j));”,再次陷入死循環!現在,用本層的用戶函數和1樓的公式應用仍然死循環!
另外,您于3樓的答復是否表明,用戶自編用戶函數中調用(系統自帶用戶函數)時,用戶自編用戶函數的參數默認值須不小于(系統自帶用戶函數)的參數默認值?
切盼盡快指教!多謝!
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 262069696 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容