為啥這樣計算兩根K線之間的間距是錯的? [開拓者 TB]
- 咨詢內容:
我想計算當前bar與滿足條件的信號K線bar的索引號差值,即計算出滿足條件的K線bar與當前bar間隔有多少根K線。
因為每跟bar的索引值都會變動,所以我想使用一個邏輯變量來過濾滿足條件的K線bar的索引值的變動,即出現了信號K線,記錄下該K線bar的索引值后,就啟用過濾條件,使該信
號K線的索引值不受新出現的K的索引值的影響。設計了以下代碼
Vars
Numeric SignalEntryCurrentBar; //記錄滿足條件K線bar的索引值
Bool EntryCondition; //開倉條件
Bool EntrySignalFilter(False); //開倉信號條件的邏輯過濾變量,初始值為不啟用過濾
Numeric i; //記錄K線間距的變量
Begin
If(!EntrySignalFilter) //當不啟用信號過濾時
{
If(EntryCondition==True) //當滿足開倉條件時
{
SignalEntryCurrentBar=CurrentBar; //記錄滿足開倉條件的K線索引值
EntrySignalFilter=True; //啟用信號過濾,目的是使信號條件的K線的索引值固定,不隨之后每跟K線的索引值變動而變動
}
}
i=CurrentBar-SignalEntryCurrentBar; //記錄當前K線與滿足條件信號K線的間距
Commentary("CurrentBar:"+Text(CurrentBar));
Commentary("SignalEntryCurrentBar:"+Text(SignalEntryCurrentBar));
Commentary("i:"+Text(i));
End
我是想記錄了信號K線的索引值之后,改變EntrySignalFilter的值,使EntrySignalFilter=True,這樣回到If(!EntrySignalFilter)的判斷上,就會直接過濾掉中間的代碼,但是
這段代碼根本起不到想要的作用,不知道哪里出現了問題。 - TB技術人員:
多種方法可以實現。
- vars
- numericseries myflag;
- begin
- if(conditionbuy==true)
- {
- buy;
- myflag = currentbar;
- }
- currentbar - myflag //就可以得到當前bar與信號位置之間間隔了多少K線。
- vars
- numericseries myflag
- begin
- if(conditionbuy)
- {
- buy;
- myflag = 1;
- }else
- {
- myflag = myflag+1;
- }
- vars
- TB客服:
小米 發表于 2015-3-30 08:42
多種方法可以實現。
我就是使用第一種想法,但是沒有效果。currentbar會隨著每跟bar的更新而更新。比如說,均線的方向向上,這個條件在一定時間內都滿足,但不一定就要在這個條件滿足時就開始交易,還有其他的條件來控制交易。我是想要從一開始發生均線方向向上的時候,就記錄下這個條件的bar的currentbar,然后這個值是固定的,不隨著之后出現的bar的索引值的變動而變動(因為均線方向向上可能在第一次發生這個現象后都成立,而如果使用myflag=currentbar,每出現一根bar又滿足均線方向的條件,myflag就會隨著currentbar的變動而變動),我要用固定的myflag來計算之后的bar到第一次滿足均線方向向上的條件的bar的之間的間距。 - 網友回復:
stephen49 發表于 2015-3-30 11:20
我就是使用第一種想法,但是沒有效果。currentbar會隨著每跟bar的更新而更新。比如說,均線的方向向上, ...
需要多加一個變量來控制記錄的起始點就好。- vars
- numericseries myflag;
- numericseries startbar;
- begin
- if(condition==true && myflag==0)
- {
- startbar = currentbar;
- myflag =1;
- }
- //但是要注意,在這段條件結束后,需要將myflag清零的動作。
- vars
- 網友回復:
小米 發表于 2015-3-30 11:23
需要多加一個變量來控制記錄的起始點就好。
我從新寫了一下代碼:
Params
Numeric MAPeriod(10); //定義MA周期
Vars
NumericSeries MAValue; //定義MA變量
Numeric i; //儲存K線間距值
Numeric startbar(0);
Bool Condition;
numericseries myflag;
Begin
MAValue=Average(C,MAPeriod);
Condition = MAValue>MAValue[1];
If(Condition==True && myflag==0)
{
startbar=CurrentBar;
myflag=1;
}
i=CurrentBar-startbar;
Commentary("CurrentBar:"+Text(CurrentBar));
Commentary("startbar:"+Text(startbar));
Commentary("i:"+Text(i));
End
我試過了,startbar還是隨著每跟bar的變動而變動,i值永遠都是0.你可以在圖表上試一試。
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容