某技術指標柱狀體與股價背離

  •   610 
  • 最後發表   幽靈股堡  2024 十一月 06
幽靈股堡 發文於   2024/09/13

我想寫一個技術指標柱狀體與股價背離的警示,但回測結果都錯誤,我要的不是波峰或斜率比較,是要當下的柱狀體與前面幾根一根一根比,只要當下的柱狀體< 前面某根柱狀體(比如第五根[5])且 當下的股價收盤價比(比如第五根)的收盤價高則警示,程式如下

var: i(0);

 

value1 = 某技術指標值;

value2 = 某技術指標值;

 

value3 = value2 - value1; //技術指標柱狀體大小

 

for i = 1 to 19 begin

    if value3< value3[i] and close> close[i] then begin

        condition1 = true;

    end;

end;

 

if condition1 then ret=1;

 

不知道哪裡錯誤,依照以上寫法我應該是不斷的讓當下K棒與第一根[1]比 比完再跟第二根[2]比...比到第19根[19]判斷是否符合,符合就警示!

再麻煩高手幫我解惑,謝謝

 

排序方式: 標準 | 最新
幽靈股堡 發文於   2024/10/01

請求小編解惑><已經半個月了 我還是找不到原因

虎科大許教授 發文於   2024/10/01

由於變數會保留給後面的K棒使用,若你讓condition1=true,要有機會讓它恢復false,不然後面的K棒會一直延用,這樣就會有邏輯的問題。

幽靈股堡 發文於   2024/10/16

謝謝教授回答~~不過我自己試了幾次寫出來還是不行,想請問我這樣寫沒有重製嗎??

input: profit_point(30, "停利(點)");

condition1 = false;

 

var: i(0);

 

value1 = 某技術指標值;

value2 = 某技術指標值;

value3 = value2 - value1; //技術指標柱狀體大小

for i = 1 to 19 begin

    condition1 = false;  // 在每次迴圈重置 condition 為 false

 

    if value3[i] < value3[i+1] and close[i] > close[i+1] then begin

        condition1 = true;

        break;  // 一旦條件成立,退出迴圈

    end;

 

if condition1 then begin

    SetPosition(0, market);  // 進行交易

    condition1 = false;  // 重置 condition

end;

 

 

  if profit_point > 0 and Close >= FilledAvgPrice + profit_point then begin

{ 停利 }

SetPosition(0);

end;

end;

 

小弟對於程式還是初學,還懇請大大指教,謝謝

虎科大許教授 發文於   2024/10/16

這個問題可以不用那麼複雜地處理,也不需要跑迴圈。假設你想要從過去19期找出是否有指標背離,我以MACD指標為例撰寫5分鐘頻率的交易腳本給你參考:

setTotalBar(300);

if barfreq<>"Min" or barinterval<>5 then raiseRunTimeError("限用5分鐘");

input: N(19,"過去N期有指標背離");

var: dif5(0),macd5(0),osc5(0);

if date<>date[1] then condition1=false;

MACD(weightedClose,12,26,9,dif5,macd5,osc5);

condition1=trueAny(osc5[1]<osc5[2] and c[1]>c[2],N);

if position>0 and condition1 then setposition(0);

幽靈股堡 發文於   2024/10/16

謝謝教授 我晚點再試試看~~

幽靈股堡 發文於   2024/10/18

教授你好,請教一下 condition1=trueAny(osc5[1]<osc5[2] and c[1]>c[2],N); 這樣的寫法 是不是都是只有比前後兩根,就不會有前一根去跟前第三根或前第四根比較呢??不知道我的理解有沒有錯誤

謝謝

虎科大許教授 發文於   2024/10/18

假設N=2,則

condition1=trueAny(osc5[1]<osc5[2] and c[1]>c[2],N);

等同於下列有一者為真:

(1)osc5[1]<osc5[2] and c[1]>c[2]
(2)osc5[2]<osc5[3] and c[2]>c[3]

XS小編 發文於   2024/10/23

Hello 幽靈股堡,

 

小編補充,您可以XSHelp上查詢函數的相關說明,裡面有範例或許會比較好理解。

 

感謝 虎科大許教授 的熱心回覆。

幽靈股堡 發文於   2024/11/06

不好意思 請教一下,if date<>date[1] then condition1=false;

如果我不是日頻率,要改成2分鐘的頻率要怎麼修改呢

謝謝

虎科大許教授 發文於   2024/11/06

只要是分鐘頻率,不論幾分K,第一根K都可以用date<>date[1]抓到。

發表回覆
Close