從最高價跌破5MA和均價線後的反彈警示

  •   406 
  • 最後發表   LUCY  2022 九月 26
LUCY 發文於   2022/08/28

小菜雞在這裡拼拼湊湊了下面的語法

邏輯是想要在1分K頻率下,從9點05分開始,

抓出當天最高價並且價格跌破5MA和均價線後,

從最低點反彈過半~

但是執行回測的時候,有個問題是反彈的位置卻不是最大的反彈

紅圈圈才是我想要的訊號

另外一個狀況是回測也會出現最高價的後面卻又創新高,訊號沒有更新

 

if barFreq <> "Min" or barinterval <> 1 then raiseRunTimeError("請使用1分鐘頻率");

if time > 090500 then begin 

 

condition1 = close > average(close, 5);  //close 小於 5MA

condition2 = close Cross Under GetField("均價");  //close跌破均價

 

if condition1 and condition2 then begin

 

value1 = highest(high,20);

// 最高點價格

 

value2 = lowest(low, value1);

// 從最高點往後的最低點價格

 

if value2 <= (value1 * (100 - 1) / 100) and close >= (value2 + ((value1 - value2) * 0.50)) then begin

//最高點向下修正超過1%,且最新的收盤價反轉向上超過 50%

 

ret = 1;

end;

end;

end;

 

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

Hello LUCY,

 

小幫手建議您可以先看看網站上的教學區,裡面有XS語法的基礎和應用。

且您在當天結束前也無法得知是否為最低價格。

 

condition1 = close > average(close, 5);  //close 小於 5MA

您寫反了,這是 close 大於 5MA

 

value1 = highest(high,20);

這是近20根Bar的最高價,不是當天最高價

 

value2 = lowest(low, value1);

這是 近20根Bar的最高價 變成期數的最低價。

 

小幫手會這樣寫:

 

var: _cond1(0), _cond2(0);

if issessionfirstbar then begin 

    value1 = high;

    _cond1 = 0;

    _cond2 = 0;

    value3 = 999999999;

    end;

 

if high > value1 then value1 = high;  //value1記錄當天最高價。

value2 = average(close, 5);   //計算5MA

 

condition1 = time >= 090500;   //9點05分以後i

 

if condition1 then begin   

    if close cross under value2 then _cond1 = 1;    //9:05以後若價格就向下跨越5MA的話就紀錄

    if close cross under getfield("均價") then _cond2 = 1;    //9:05以後若價格就向下跨越均價的話就紀錄

    end;

 

if _cond1 = 1 and _cond2 = 1 then begin

    if low < value3 then value3 = low;  //紀錄兩個條件達成後的最低價

    if close >= ((value1 + value3) / 2) then ret = 1;   //若價格跨越value1 和 value3 的一半就警示

    end;

        

        

LUCY 發文於   2022/09/04

謝謝小幫手詳細的分享!!

超級感謝您~

小陽 發文於   2022/09/19

您好 請問為什麼 value3=999999999 ?

XQ小幫手 發文於   2022/09/26

Hello 小陽,

 

這是因為 value3 是要用來記錄 _cond1 和 _cond2 達成後的最低價。

如果讓 value3 = 0 的話,那麼 low < value3 這條件就不會成立,value3也無法記錄相關數值。

讓 value3 = 999999999 可以確保在兩個條件達成後的時候 value3 會記錄當下的low,再以此值去和後面的low作比較。

發表回覆
Close