內建函數NthExtremes拷貝到自定義函數中后再編譯有警示 [開拓者 TB]
- 咨詢內容:
本帖最后由 china_lizhi 于 2016-3-9 13:05 編輯
把內建函數NthExtremes中的源代碼原封不動地拷貝到了自定義函數中了,然后編譯對如下兩行代碼有如下的警示:
NthMaxValue = Extremes(Price, Length, True, nMaxBar);
NthMinValue = Extremes(Price, Length, False, nMinBar);
這兩行提示:FOR、WHILE、IF、ELSE中包含序列函數,可能存在潛在的邏輯錯誤。 - TB技術人員:
懇請提供函數NthExtremes中的代碼的詳細注解,以幫助TB初學者入門。謝謝
懇請客服對于以下代碼給予詳細的注釋,以便于初學者入門
- TB客服:
本帖最后由 china_lizhi 于 2016-3-9 13:06 編輯
//------------------------------------------------------------------------
// 簡稱: NthExtremes
// 名稱: 求N極值
// 類別: 用戶函數
// 類型: 內建函數
// 輸出: 數值型
//------------------------------------------------------------------------
Params
NumericSeries Price(1);
Numeric Length(10);
Numeric N(5);
Bool bMax(True);
NumericRef NthExtremeBar;
Vars
Numeric nMaxBar;
Numeric NthMaxValue;
Numeric nMinBar;
Numeric NthMinValue;
Numeric TmpValue;
Numeric NthReturnValue;
Numeric nBetterCnt;
Numeric nEqualCnt;
Numeric nEqualIndex;
Numeric i;
Numeric j;
Numeric k;
Begin
if (Length > 0 && N>0 && N <= Length)
{
NthMaxValue = Extremes(Price, Length, True, nMaxBar);
NthMinValue = Extremes(Price, Length, False, nMinBar);
If(bMax)
{
For i = 2 To N
{
TmpValue = NthMinValue - 1;
nBetterCnt = 0;
nEqualCnt = 0;
For j = 0 To Length - 1
{
If ( Price[j] > NthMaxValue)
{
nBetterCnt = nBetterCnt + 1;
}else If ( Price[j] < NthMaxValue)
{
if (Price[j] > TmpValue)
{
TmpValue = Price[j] ;
nMaxBar = j;
}
}Else
{
nEqualCnt = nEqualCnt + 1;
}
}
if (nBetterCnt + nEqualCnt >= i)
{
nEqualIndex = 0;
for k = 0 To Length - 1
{
if (Price[k] == NthMaxValue)
{
nEqualIndex = nEqualIndex + 1;
if (nEqualIndex == (i - nBetterCnt))
{
nMaxBar = k;
}
}
}
}else
{
NthMaxValue = TmpValue;
}
}
NthExtremeBar = nMaxBar;
NthReturnValue = NthMaxValue;
}Else
{
For i = 2 To N
{
TmpValue = NthMaxValue + 1;
nBetterCnt = 0;
nEqualCnt = 0;
For j = 0 To Length - 1
{
If ( Price[j] < NthMinValue)
{
nBetterCnt = nBetterCnt + 1;
}else If ( Price[j] > NthMinValue)
{
if (Price[j] < TmpValue)
{
TmpValue = Price[j] ;
nMinBar = j;
}
}Else
{
nEqualCnt = nEqualCnt + 1;
}
}
if (nBetterCnt + nEqualCnt >= i)
{
nEqualIndex = 0;
for k = 0 To Length - 1
{
if (Price[k] == NthMinValue)
{
nEqualIndex = nEqualIndex + 1;
if (nEqualIndex == (i - nBetterCnt))
{
nMinBar = k;
}
}
}
}else
{
NthMinValue = TmpValue;
}
}
NthExtremeBar = nMinBar;
NthReturnValue = NthMinValue;
}
}Else
{
NthReturnValue = -1;
NthExtremeBar = -1;
}
Return NthReturnValue;
End
//------------------------------------------------------------------------
// 編譯版本 GS2010.12.08
// 版權所有 TradeBlazer Software 2003-2010
// 更改聲明 TradeBlazer Software保留對TradeBlazer平
// 臺每一版本的TradeBlazer公式修改和重寫的權利
//------------------------------------------------------------------------
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 511411198 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容