請問在5分K線如何寫15分K和30分K5MA 10MA 20MA 30MA均線上揚?

  •   1.4K 
  • 最後發表   阿博  2018 九月 17
阿博 發文於   2018/09/06

您好,目前遇到一個問題是如果我把程式碼的condition32 condition33的期數由1改成3回測就會測不到9/5號的標的6552照理說9/5 9點20分應該是會有訊號的但是期數只要改3就測不到,但是因為我想寫30分K的均線是上揚的,而我頻率昰5分K,所以照理說30分K的5MA 10MA 20MA 30MA均線要上揚是不是期數要設跟前6期的數值相比(我的想法是5分K裡面前6期應該就是前30分鐘)?可是只要期數改6就一堆標的不會觸發,現在狀況是65529/5號,我連期數改3也不會觸發

我也有把condition30~33的數據print出來看,但是都有符合程式的要求,下面有我print出來的數據圖

以下是我的程式碼,確定是condition30~33的問題,因為我有一個一個改過再回測過了

另外想在這邊也請教一下如果要再5分K裡面寫15分K的5MA 10MA 20MA 30MA還有30分K1的5MA 10MA 20MA 30MA上揚的話期數應該要如何設才正確?

 

再麻煩幫我看一下是哪邊有問題還是我哪邊誤會了,剛碰程式不久再麻煩指教了,非常感謝!

 

 

input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: Maxlength(30); setinputname(4,"最長期均線期數");
input: Percent(1.6); setinputname(5,"均線糾結區間%");
input: XLen(5); setinputname(6,"均線糾結期數");

variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: Maxaverage(0);

variable: shortaverage15(0);
variable: midaverage15(0);
variable: Longaverage15(0);
variable: Maxaverage15(0);

variable: shortaverage30(0);
variable: midaverage30(0);
variable: Longaverage30(0);
variable: Maxaverage30(0);


variable: AvgHLp(0),AvgH(0),AvgL(0),VOL1(0),VOL2(0),VOL3(0),MaxLow1(0),Maxlow2(0);
if barfreq= "Min" or barinterval= 5 then begin
VOL1 = GetField("Volume", "D")[1];//前日量
VOL2= GetField("Volume", "D")[2];//前二日量
VOL3= (VOL1+VOL2)/2;//前兩日均量


shortaverage = average(close,shortlength);//5分K5均線
midaverage = average(close,midlength);//5分K10均線
Longaverage = average(close,Longlength);//5分K20均線
Maxaverage = average(close,Maxlength);//5分K30均線


shortaverage15 = average(GetField("收盤價","15"),shortlength);//15分K5均線
midaverage15 = average(GetField("收盤價","15"),midlength);//15分K10均線
Longaverage15 = average(GetField("收盤價","15"),Longlength);//15分K20均線
Maxaverage15 = average(GetField("收盤價","15"),Maxlength);//15分K30均線

shortaverage30 = average(GetField("收盤價","30"),shortlength);//30分K5均線
midaverage30 = average(GetField("收盤價","30"),midlength);//30分K10均線
Longaverage30 = average(GetField("收盤價","30"),Longlength);//30分K20均線
Maxaverage30 = average(GetField("收盤價","30"),Maxlength);//30分K30均線

Maxlow1 = GetField("最低價","D")[1];
Maxlow2 = lowest(low[1],50); 
AvgH = maxlist(shortaverage,midaverage,Longaverage,Maxaverage);
AvgL = minlist(shortaverage,midaverage,Longaverage,Maxaverage);
AvgHLp = 100*AvgH/AvgL -100;

 
condition1 = trueAll(average(AvgHLp[1],5) < Percent,XLen) and AvgL > 40 and AvgL<100 ;
condition2 = low < AvgL and low*0.995 < Maxlow1 and low*0.995 < Maxlow2;
condition3 = VOL3 > 1500;//2日均量大於1500


condition15 = trueAll(shortaverage15 <= shortaverage15[1],2);//15K條件
condition16 = trueAll(midaverage15 <= midaverage15[1],2);//15K條件
condition17 = trueAll(Longaverage15 <= Longaverage15[1],2); //15K條件
condition18 = trueAll(Maxaverage15 <= Maxaverage15[1],2); //15K條件

condition30 = trueAll(shortaverage30 <= shortaverage30[1],3);//30K條件
condition31 = trueAll(midaverage30 <= midaverage30[1],3);//30K條件
condition32 = trueAll(Longaverage30 <= Longaverage30[1],1); //30K條件
condition33 = trueAll(Maxaverage30 <= Maxaverage30[1],1); //30K條件


ret = condition1 and condition2 and condition3 and  condition15 and condition16 and condition17 and condition18 and condition30 and condition31 and condition32 and condition33 ;

end;

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2018/09/06

Hi 阿博,

您好,請您提供回測設定畫面,以利小幫手查看問題的原因,謝謝。

阿博 發文於   2018/09/06

不好意思 因為不知道哪個畫面比較合適 所以我先拍一個是把期數設成1的回測結果 和期數設成2的回測結果 除了期數其他都沒有做更動  另外應該是9點5分會出訊號才對不過比較上面print出來的數值應該還是比前幾期大才對

XQ小幫手 發文於   2018/09/06

Hi 阿博,

您好,謝謝您提供相關資訊,

小幫手需要以下的回設定畫面,如下圖,再麻煩您提供,以利小幫手對照查看問題的原因,謝謝。

 

阿博 發文於   2018/09/06
XQ小幫手 發文於   2018/09/07

Hi 阿博,

您好,TrueAll 為判斷條件數列在指定期數內是否同時成立,

故您將 32、33 條件改為 3期時,代表要連續 3 期 Longaverage30 <= Longaverage30[1] 且 Maxaverage30 <= Maxaverage30[1],

小幫手查看後發現,沒有連續 3 期 Longaverage30 <= Longaverage30[1] 且 Maxaverage30 <= Maxaverage30[1],

所以回測時改為 3 期不會觸發。

condition32 = trueAll(Longaverage30 <= Longaverage30[1],3);//連續3期Longaverage30 <= Longaverage30[1] 才會Ture
condition33 = trueAll(Maxaverage30 <= Maxaverage30[1],3);//連續3期Maxaverage30 <= Maxaverage30[1] 才會Ture

 

另外想在這邊也請教一下如果要再5分K裡面寫15分K的5MA 10MA 20MA 30MA還有30分K1的5MA 10MA 20MA 30MA上揚的話期數應該要如何設才正確?

請您先確定您的上揚定義為何?(e.g. 要連續幾期均線上漲?)再去嘗試撰寫會比較妥當,

以上方向您參考,謝謝。

 

阿博 發文於   2018/09/08

不好意思 我最上面的程式碼貼錯了,因為有兩組貼到另一組了抱歉 (圖片中的昰對的昰>=才對)

我再貼一次

input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: Maxlength(30); setinputname(4,"最長期均線期數");
input: Percent(1.6); setinputname(5,"均線糾結區間%");
input: XLen(5); setinputname(6,"均線糾結期數");

variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: Maxaverage(0);

variable: shortaverage15(0);
variable: midaverage15(0);
variable: Longaverage15(0);
variable: Maxaverage15(0);

variable: shortaverage30(0);
variable: midaverage30(0);
variable: Longaverage30(0);
variable: Maxaverage30(0);

variable: AvgHLp(0),AvgH(0),AvgL(0),VOL1(0),VOL2(0),VOL3(0),Maxhigh1(0),Maxhigh2(0);
if barfreq= "Min" or barinterval= 5 then begin
VOL1 = GetField("Volume", "D")[1];//五日均量
VOL2= GetField("Volume", "D")[2];//五日均量
VOL3= (VOL1+VOL2)/2;

shortaverage = average(close,shortlength);//5分K5均線
midaverage = average(close,midlength);//5分K10均線
Longaverage = average(close,Longlength);//5分K20均線
Maxaverage = average(close,Maxlength);//5分K30均線


shortaverage15 = average(GetField("收盤價","15"),shortlength);//15分K5均線
midaverage15 = average(GetField("收盤價","15"),midlength);//15分K10均線
Longaverage15 = average(GetField("收盤價","15"),Longlength);//15分K20均線
Maxaverage15 = average(GetField("收盤價","15"),Maxlength);//15分K30均線

shortaverage30 = average(GetField("收盤價","30"),shortlength);//30分K5均線
midaverage30 = average(GetField("收盤價","30"),midlength);//30分K10均線
Longaverage30 = average(GetField("收盤價","30"),Longlength);//30分K20均線
Maxaverage30 = average(GetField("收盤價","30"),Maxlength);//30分K30均線

Maxhigh1 = GetField("最高價","D")[1];
Maxhigh2 = highest(high[1],50); 
AvgH = maxlist(shortaverage,midaverage,Longaverage,Maxaverage);
AvgL = minlist(shortaverage,midaverage,Longaverage,Maxaverage);
AvgHLp = 100*AvgH/AvgL -100;

 
condition1 = trueAll(average(AvgHLp[1],5) < Percent,XLen) and AvgL > 40 ;
condition2 = high > AvgH and high*1.005 > Maxhigh1 and high*1.005 > Maxhigh2;
condition3 =VOL3>1500;


condition15 = trueAll(shortaverage15 >= shortaverage15[1],2);//15K條件
condition16 = trueAll(midaverage15 >= midaverage15[1],2);//15K條件
condition17 = trueAll(Longaverage15 >= Longaverage15[1],2); //15K條件
condition18 = trueAll(Maxaverage15 >= Maxaverage15[1],2); //15K條件

condition30 = trueAll(shortaverage30 >= shortaverage30[1],3);//30K條件
condition31 = trueAll(midaverage30 >= midaverage30[1],3);//30K條件
condition32 = trueAll(Longaverage30 >= Longaverage30[1],2); //30K條件
condition33 = trueAll(Maxaverage30 >= Maxaverage30[1],2); //30K條件



ret = condition1 and condition2  and condition3 and  condition15 and condition16 and condition17 and condition18 and condition30 and condition31 and condition32 and condition33 ;  ;

end;

假設我是針對9點5分開始,如果要符合連續三期以最右邊那一行來看是不是

第一期9點5分的Maxaverage30 >=9點的Maxaverage30

第二期9點的Maxaverage30 >=13點25的Maxaverage30

第三期 13點25分的Maxaverage30>=13點20分的Maxaverage30

請問這樣我的理解有錯誤嗎?

但是我把數值print出來對著看 發現都應該有遵守條件才對 但是就是沒有觸發  一直到我期數改成1回測的時候才會觸發

 

XQ小幫手 發文於   2018/09/10

Hi 阿博,

您好,待小幫手查看後,再向您說明,謝謝。

XQ小幫手 發文於   2018/09/12

Hi 阿博,

您好,小幫手使用您 2018/09/08 提供的程式碼,將以下程式碼改為 1 期,再使用 2018/09/06 回測設定,跑完回測後,發現仍不會在 20180905 09:05:00 買進,

condition32 = trueAll(Longaverage30 >= Longaverage30[1],1); //30K條件
condition33 = trueAll(Maxaverage30 >= Maxaverage30[1],1); //30K條件

 

查看了一下,應該是 Condition2 在 20180905 09:00:00 為 False ,故不會在 20180905 09:05:00 買進,

 

若單只用回測功能,小幫手建議您升級至 6.41 / 2.41 版本,在 6.41 / 2.41 版本,回測有提供 Print 功能,比較好對照查找問題的原因,

以上說明,謝謝。

阿博 發文於   2018/09/12

以上是我用回測內建print指令print出來的數值

 

以上是我用同樣程式碼選擇指標針對標的6552 5分K print出來的數值

 

同樣的Longaverage30,Maxaverage30卻在同樣的時間得到不同的值,而且這個值還跟我最早發文print出來的值不一樣,同樣的程式碼過幾天讀出來的值怎麼會不一樣(我都是用一樣的程式碼去讀的)

請問如果是盤中即時讀取的時候,XQ讀取的方式應該是用第一種方法還是第二種方法判讀呢?

再麻煩了 感謝

XQ小幫手 發文於   2018/09/13

Hi 阿博,

同樣的Longaverage30,Maxaverage30卻在同樣的時間得到不同的值

這個問題,需要確認您執行的版號(確認XQ系統左上角是否為 2.41 20180903,若否請提供您的版號)為何?

以利小幫手對照查找問題的原因。


 

請問如果是盤中即時讀取的時候,XQ讀取的方式應該是用第一種方法還是第二種方法判讀呢?

都不是,回測僅能盡量模擬貼近盤中即時讀取的狀況,故皆不是用上述方法判讀,

關於策略雷達盤中即時讀取,可以參考 進階篇: 觸發設定方式的應用 有相關介紹,

以上說明,謝謝。

顯示更多回應 發表回覆
Close