紅三兵 (限用一分K)腳本修改問題

  •   699 
  • 最後發表   Alumi  2023 四月 26
Alumi 發文於   2023/03/02

 





您好感恩,請幫我~~修改紅三兵為限用一分鐘使用,這樣可以嗎??

我需要的紅三兵只要每根收盤大於開盤紅k實體漲1%即可 有上下引線也沒關系(如圖一有上下引線)~~~~~也不限定OPEN一定要前根CLOSE比還要高(如圖二這樣也可以)。

if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");

if close > close[1] * 1.01 then ret=1;

if  close > open *1.01  and  close[1] > open [1] *1.01 and close[2] > open [2] *1.01 
then ret = 1 ;





~~~~~~~~~~~~~~~~~~~~~~~~~

以下是紅三兵找的範例參考~~紅三兵是實體漲*0.75%並 close要大於前bar  close
紅三兵範例參考

[檔名:] 紅三兵 [資料夾:] 酒田戰法 [適用方向] 多

[說明:] 連續三根上漲實體K棒       [資料讀取] 10   [最大引用] 5

{判斷狀況}

condition1= ( close - open ) >(high -low) * 0.75 ;//狀況1: 實體上漲K棒

condition2= ( close[1] - open[1] ) >(high[1] -low[1]) * 0.75 ;//狀況2: 實體上漲K棒

condition3= ( close[2] - open[2] ) >(high[2] -low[2]) * 0.75 ;//狀況3: 實體上漲K棒

condition4= close > close[1] ;//狀況4: 上漲

condition5= close[1] > close[2] ;//狀況5: 上漲

{結果判斷}

IF   condition1   and condition2   and condition3   and condition4   and condition5    THEN RET=1;
-----------------------------------------------------------------------------------------------------------------------------------------

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

Hello Alumi,

 

您可以參考 trueall 函數,這樣就不用一個個向前檢查。

舉例來說:

condition1 = close > open * 1.01;  //收盤大於開盤1%

condition2 = close > close[1];    //收盤大於前根收盤

if trueall(condition1 and condition2, 3) thne ret = 1;   //連續3根都達成條件就警示。

 

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

Alumi 發文於   2023/03/07

真誠謝謝你的的回覆, 使用trueall函數,連續3根達成條件就警示

以下再請教分開為二個問題的警示腳本

問題一
連續三根每根收盤大於開盤 1%條件是condition1 = close > open * 1.01;  //收盤大於開盤1%
(條件二)再設一個條件三根的bar必須其中一根bar一定要帶量2%就警示通知。
ps請益怎麼增加條件?,謝謝您


問題二 

紅三兵不帶量條件是condition2 = close > close[1];    //收盤大於前根收盤

再增加一個條件~~15根bar內出現兩次紅三兵就通知我,要怎寫呢?

有什麼函數可以使用嗎?

 

 

 

XQ小幫手 發文於   2023/03/09

Hello Alumi,

 

1.如果是3根Bar內要有任一根Bar符合條件的話,可以參考 TrueAny 函數。

 

2.您可以用迴圈判斷近15根Bar condition2 是否有兩次成立,且彼此中間沒有相連。

舉例來說:

 

for value1 = 0 to 14 begin

    if condition2[value1] and not condition2[value1 + 1] then value2 += 1;   //當根condition2成立且前一根condition2不成立才計算次數

    end;

 

condition3 = value2 >= 2;    //近15根Bar有2次以上的紅三兵

 

Alumi 發文於   2023/03/09

(請益回覆的問題一)
請問,限使用1分k頻率   ,紅三兵修改條件警示通知我:
符合條件每根bar一定要上漲1%並且加上三根bar其中一根bar必須要有漲上2%。~~~~這樣修改對嗎?



if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("
請設定頻率為1分鐘");


condition1 = close > open * 1.01;  //收盤大於開盤1%

condition2 =close > open * 1.02; //
收盤大於開盤2%

condition3 = close > close[1];    //收盤大於前根收盤

if trueall(condition1 and condition3, 3) and trueany(condition2 and condition,3);
thne ret = 1;
   //連續3bar全部上漲1%且加上最近三根bar有任何一根bar有漲2%

 

 

 

 

Alumi 發文於   2023/03/09

請益回覆的問題二

非常感謝您的協助終於完成我要的警示腳本,請問限使用1k正確腳本這樣寫對嗎?
限用1分頻率使用條件通知:紅三兵不帶量收盤大於前根收盤,且近15bar2次以上的紅三兵
if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");
Condition1= close > close[1];  //收盤大於前根收盤
for value1 = 0 to 14 begin
if condition1[value1] and not condition1[value1 + 1] then value2 += 1;   //當根condition1成立且前一根condition1不成立才計算次數
end;
condition1 = value2 >= 2;    //15Bar2次以上的紅三兵
 
 

XQ小幫手 發文於   2023/03/13

Hello Alumi,

 

1.您可以在腳本中加上print檢查列印出來的數值看是否有如您所想的運行。

小幫手看您的腳本邏輯上是沒有問題,不過語法有點錯誤,應該要這樣寫:

if trueall(condition1 and condition3, 3) and trueany(condition2, 3) then ret = 1;  

且condition3因為已經在trueall 中檢查過了,trueany就不用再檢查一次。

 

2.不對,您的 condition2 只檢查了收盤大於前跟收盤,所以您的迴圈會在當根收盤大於前跟收盤,且前跟收盤不大於前前跟收盤時增加。

您的condition1應該修改為 condition1 = trueall(close > close[1], 3);,這樣才會是紅三兵。

 

如同小幫手上面所說,建議您使用print函數將數值印出檢查,這樣就容易看出問題所在。

Alumi 發文於   2023/03/13

真的很謝謝您的指導。從完全不懂,現在有基礎的語法概念。我來測試看看,謝謝你

Alumi 發文於   2023/03/19

不好意思,我用1分k,在20根bar有跑二次紅三兵通知我,我已測二天了。警示沒有一次是通知的。請問題哪裡出現的嗎?
是這問『condition2 = value2 >= 2;    //近15根Bar有2次以上的紅三兵』出現問題嗎?



if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");

Condition1= trueall(close > close[1],3);  //收盤大於前根收盤紅三兵

for value1 = 0 to 19 begin

if condition1[value1] and not condition1[value1 + 1] then value2 += 1;   //當根condition1成立且前一根condition1不成立才計算次數

end;

condition2 = value2 >= 2;    //近15根Bar有2次以上的紅三兵

XQ小幫手 發文於   2023/03/21

Hello Alumi,

 

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽,建議您可以先觀看該區的文章。

 

如果您的警示腳本就是上述這段的話,那麼自然不會警示,因為沒有 ret = 1 來讓警示觸發。

可以修改為:

if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");

Condition1= trueall(close > close[1],3);  //收盤大於前根收盤紅三兵

for value1 = 0 to 19 begin

if condition1[value1] and not condition1[value1 + 1] then value2 += 1;   //當根condition1成立且前一根condition1不成立才計算次數

end;

condition2 = value2 >= 2;    //近15根Bar有2次以上的紅三兵

if condition2 then ret = 1;   //如果condition2符合的話就警示

 

這樣警示才能夠觸發。(參考附圖)

 

您也可以將 value2 print 出來檢驗看是否有如您所想的運作。

 

附加文件

Alumi 發文於   2023/03/23

不好意思,謝謝你的回覆,早上測試啟動馬上警示一直秒叫。是哪裡出問題呢?



if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");

 

Condition1= trueall(close > close[1],3);  //收盤大於前根收盤紅三兵

 

for value1 = 0 to 19 begin

 

if condition1[value1] and not condition1[value1 + 1] then value2 += 1;   //當根condition1成立且前一根condition1不成立才計算次數

 

end;

 

condition2 = value2 >= 2;    //近15根Bar有2次以上的紅三兵

 

if condition2 then ret = 1;   //如果condition2符合的話就警示

 

附加文件

顯示更多回應 發表回覆
Close