觸發警示價紀錄變數

  •   175 
  • 最後發表   blue sky  2022 四月 07
blue sky 發文於   2022/03/14

小幫手您好:

我參考其他高手的發文,想改成策略A在當日有發生過且符合策略B的話就警示

也就是說策略A在觸發時用變數紀錄當下的觸發價

再來策略B在觸發時,策略B的觸發價<策略A的觸發價,就條件成立觸發警示

但目前上線測試,都沒有觸發警示過,再麻煩小幫手提點,謝謝

input:_Change(1,"門檻跌幅(%)");

condition1 = value1 = rateofchange(close,1);

condition2 = value1 < -_Change and volume > volume[1];

condition1 and condition2 then ret = value2 ;

 

condition3 = value3 = rateofchange(close,1);

condition4 = value3 < -_Change and volume > volume[1];

if condition3 and condition4 then ret = value4 ;

if value2 > value4 then ret = 1;

// 如果策略A在當日有發生過且符合策略B的話就警示

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

Hello blue sky,

 

ret = 1 是讓雷達警示的特殊用法,並不是用來紀錄當下的觸發價。

condition1 = value1 = rateofchange(close, 1);

這代表的是如果 value1 和 rateofchange(close, 1) 相等的話 condition1 為 True 否則 False。

但您的腳本內沒有指定 value1 為多少,所以 value1 一直會是預設值0。

建議您可以將相關運算資訊print出來檢查,就可以知道問題所在。

 

小幫手推測您應該是要這樣寫:

value1 = rateofchange(close,1);

condition1 = value1 < -_Change and volume > volume[1];

if condition1 then value2 = close;

但須注意下半部的腳本:

value3 = rateofchange(close,1);

condition4 = value3 < -_Change and volume > volume[1];

if condition4 then value4 = close ;

和上半部一模一樣,所以 value4 一定會和 value2 相等。

因為value1和value3都等於rateofchange(close,1) 且 condition1 和 condition4 也是相等的。

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。

 

blue sky 發文於   2022/03/23

小幫手您好:

我依照您的說明,將語法修改成如下,但仍無觸發,是否有那裡需要再修改,再麻煩小幫手提點

input:_Change(1,"門檻跌幅(%)");

value1 = rateofchange(close,1);

condition1 = value1 < -_Change and volume > volume[1];

if condition1 then value2 = close;

value3 = rateofchange(close,1);

condition4 = value3 < -_Change and volume > volume[1];

if condition4 then value4 = close ;

if value2 > value4 then ret = 1;

XQ小幫手 發文於   2022/03/28

Hello blue sky,

 

如同小幫手上面所說,您的 condition1 和 condition3 的條件是相同的。

所以取得的 value2 和 value4 也會是相同的。

那麼 if value2 > value4 then ret = 1; 就不會符合。

您可以實際print出來觀察相關數據即可得知。

簡單來說,您是用了兩個策略A,然後比較兩個的觸發價。

但這兩個觸發價會是相同的 (都是策略A),所以自然不會發生其中一個大於另一個的狀況。

或許您可以描述一下您想要的兩個條件為何會比較清楚些。

blue sky 發文於   2022/03/30

小幫手您好:

我參考其他高手的發文,想改成策略A在當日有發生過且符合策略B的話就警示

也就是說策略A在觸發時用變數紀錄當下的觸發價

再來策略B在觸發時,策略B的觸發價<策略A的觸發價,就條件成立觸發警示

但目前上線測試,都沒有觸發警示過,再麻煩小幫手提點,謝謝

input:_Change(1,"門檻跌幅(%)");

condition1 = value1 = rateofchange(close,1);

condition2 = value1 < -_Change and volume > volume[1];

condition1 and condition2 then ret = value2 ;

 

condition3 = value3 = rateofchange(close,1);

condition4 = value3 < -_Change and volume > volume[1];

if condition3 and condition4 then ret = value4 ;

if value2 > value4 then ret = 1;

// 如果策略A在當日有發生過且符合策略B的話就警示

 

小幫手您好:

我試著用今天的策略雷達來說明,

策略A跟B都是下殺1%觸發

以上表三晃來說09:05策略A觸發價為23.6,當下使用變數記錄三晃觸發價23.6

09:47策略B三晃觸發價為23.25

23.6>23.25,警示成立

上述說明,再麻煩小幫手提點策略是否可行,謝謝

XQ小幫手 發文於   2022/04/07

Hello blue sky,

 

您這是同一隻策略,上一次觸發和這次觸發的比較。

您可以令兩個變數來存取最近兩次的價格。

舉例來說:

var: price1(0), price2(0);

value1 = rateofchange(close,1);

condition1 = value1 < -_Change and volume > volume[1];

if condition1 then begin

    price2 = price1;    //price2用來記錄上一次成立的價格 (您所謂的策略A)

    price1 = close;    //price1用來記錄這一次成立的價格 (您所謂的策略B)

    end;

if price2 <> 0 and price1 < price2 then ret = 1;

有個類似功能的函數 BarsLast 也可以參考,不過須注意若當根Bar條件成立的話這函數回傳的是0而不是上次條件成立的相對位置。

發表回覆
Close