1分k的8分鐘均線與17分鐘均線死亡交叉請問

  •   663 
  • 最後發表   阿哲DR5  2025 十月 03
阿哲DR5 發文於   2025/07/25

許老師和大家好!

我有一個做空的進場策略:在開盤後1分k的8分鐘均線死亡交叉17分鐘均線的時候我要進場做空,可是遇到一個問題是開盤17分鐘內發生的話我不知道如何使用XScript印出來。

截圖圖片

以這張圖為例,由於 9:14 的時候就已經觸發了,所以是在17分鐘以內。由於看盤軟體的線是延續昨天的,所以很清楚,想請問如何用XS取得值,謝謝大家!

value1 = getField("close", "1");
value2 = average(value1, 8);
value3 = average(value1, 17);

if value2 cross under value3 then print(date, time, value2, value3);

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/10/03

(1)數值變數與布林變數的差異在於數值變數只能接收數值,而布林變數只能接收True或False。加intrabarpersist宣告只是希望變數能保留上一次洗價的數值。

(2)你這篇貼文已經太長了。若與原本貼文主題不同時,請改發新的帖子。

阿哲DR5 發文於   2025/10/03

想請問老師 intrabarpersist 的宣告,數值型和布林型的差別在哪裡呢?
在這裡 hasCrossOver 是布林型態的。

虎科大許教授 發文於   2025/09/23

建議你在程式最後一行加上下列程式碼以驗證這102800是否有進場訊號:

print(date, time, condition1, condition2, condition3, value2 cross above value3, hasCrossOver);

按照你程式的邏輯,第一次進場之後,會讓hasCrossOver=true,代表第二次進場只需要position=0(第一次進場的部位已出場)及condtion1、condition2、condition3都是true,就會再進場,並不需要均線黃金交叉。

阿哲DR5 發文於   2025/09/23

截圖圖片

可是老師以回測結果來說第二次進場應該會是在 10:47 而不是報表的 10:28 對吧!?

 

 

虎科大許教授 發文於   2025/09/02

我測試了,程式是OK的。8/29進場兩次。

阿哲DR5 發文於   2025/09/02

老師我用這個程式碼還是不行,會出現跟上面一樣的情況。

請問關於補K的部分要如何 debug???

有辦法 print 出來嗎?還是要用其他的辦法?

虎科大許教授 發文於   2025/09/01

settotalBar(300);
var: intrabarpersist RetValue(0);
var: intraBarPersist hasCrossOver(false);
if getinfo("IsRealTime")=0 then return;
if isFirstCall("Date") then 
    begin
        value5=average(getField("成交量", "D")[1], 5);
        hasCrossOver=false;
    end;
value1 = getField("close", "1");
value2 = average(value1, 8);
value3 = average(value1, 17);
condition1 = value5 > 2000;
condition2 = value1 >= 100;
condition3 = value1 <= 500;
if time >= 093000 and time < 132400 then
    begin
        if condition1 and condition2 and condition3 then 
            if position=0 and (value2 cross above value3 or hasCrossOver=true) then
                begin                        
                    setposition(1);
                    RetValue = value2;
                    hasCrossOver=true;
                end;
        if position = 1 then 
            if value1 <= RetValue * 0.98 or value1 >= RetValue * 1.05 then setposition(0); 
    end
else if position > 0 and time >= 132400 then setposition(0);

阿哲DR5 發文於   2025/09/01

老師我確定是補K的問題,想請問老師那我要如何修正這個問題呢?

虎科大許教授 發文於   2025/09/01

進場的條件是condition1、condition2、condition3、position=0以及均線黃金交叉。從K線圖看來,均線有黃金交叉。請先確認condition1、condition2、condition3、position=0這四個條件是否為True。若確認為True,則只剩下一種可能,那就是補K。由於你使用1分鐘頻率,在1分K裡面,可能都沒有交易發生,這時,系統會進行補K。系統進行補K的K棒剛好黃金交叉,由於補K時不會執行交易指令,造成黃金交叉時沒有進場。下一根K可以下單時,卻不是黃金交叉。

阿哲DR5 發文於   2025/09/01

截圖圖片

老師比方說我上面的那一張圖他的進場明細是這樣子,那目前的程式碼是只會進場與出場一次而已。

那按照上面的 K 線圖在 10 點多的時候要再進場一次這樣子。再請老師幫幫忙了,非常謝謝老師!

 

 

顯示更多回應 發表回覆
Close