請問策略模組中的警示語法?

  •   278 
  • 最後發表   Prokiss  2020 九月 01
Prokiss 發文於   2020/08/31

以下是我請朋友幫我寫的
但是他沒訂購策略模組 

所以他用盤後選股可以跑

我用盤中警示的方式編譯 就發現有些語法無法使用

像Outputname和Outputfield

請問 是否能幫忙看一下該怎麼修正

謝謝
--------------------------------------------------

 

//1、今天的即時行情 >= 10 20 60sma

input:Leng1(10),Leng2(20),Leng3(60);

 

variable: ma1(0), ma2(0), ma3(0);

 

SetInputName(1,"短均線");

SetInputName(2,"中均線");

SetInputName(3,"長均線");

 

settotalbar(3);

 

ma1 = average(close, Leng1);

ma2 = average(close, Leng2);

ma3 = average(close, Leng3);

 

condition1 = close >= ma1;

condition2 = ma1 >= ma2;

condition3 = ma2 >= ma3;

 

SetOutputName1("短均線");   

OutputField1(ma1);

SetOutputName2("中均線");   

OutputField2(ma2);

SetOutputName3("長均線");   

OutputField3(ma3);

 

//2.昨天的收盤價 或" 前天的收盤價 小於或等於 月線

condition4 = close[1] <= ma2[1];

condition5 = close[2] <= ma2[2];

condition6 = condition4 or condition5;

 

//3、MACD指標(12,26,9),今天盤中的DIF >=昨天的DIF and DIF>=0

value1 = MACD(WeightedClose,12,26,9,value2,value3,value4);       //計算MACD

//plot1(value2, "DIF");

//plot2(value3, "MACD");

//plot3(value4, "OSC");

condition7 = value2 >= value2[1];

condition8 = value2 >= 0;

condition9 = condition7 and condition8;

//4、股價>=10元

condition10 = close >= 10;

 

 

//5.10日平均成交量>=1000張

condition11 = average(volume[1],10) >= 1000;

 

//6.今日的盤中KD指標(9,3,3) K>=D

input: Length(9), RSVt(3), Kt(3);

variable: rsv(0), k(0), _d(0);

 

SetTotalBar(maxlist(Length,6) * 3+8);

 

SetInputName(1, "天數");

SetInputName(2, "RSVt權數");

SetInputName(3, "Kt權數");

 

if currentbar <> gettotalbar then return;

 

Stochastic(Length, RSVt, Kt, rsv, k, _d);

 

condition12 = k >= _d;

 

 

//7.今日的60ma>=昨日的60ma

condition13 = ma2 > ma2[1];

 

 

//選股條件:

if 

condition1 and condition2 and condition3 //1、站在三條均線之上

and condition6 //條件2

and condition9 //條件3

and condition10 //條件4

and condition11 //條件5

and condition12 //條件6

and condition13 //條件7

then 

ret = 1;

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2020/08/31

Prokiss大 您好

因為output 相關語法只支援選股中心,所以在策略雷達中無法使用

所以以下這段請您拿掉

SetOutputName1("短均線");   

OutputField1(ma1);

SetOutputName2("中均線");   

OutputField2(ma2);

SetOutputName3("長均線");   

OutputField3(ma3);

再者

settotalbar的部分,小幫手發現您重複宣告了兩次

settotalbar(3);

SetTotalBar(maxlist(Length,6) * 3+8);

建議您可以刪掉後,於策略雷達中設定資料讀取筆數就好

這樣比較直觀且不容易弄錯

感謝

附加文件

Prokiss 發文於   2020/08/31

我把您提到的都刪了 

但是實際執行的話 除了四筆是沒有60ma而失敗

還有很多發生錯誤訊息 我放在附檔

請問是哪邊要再修正呢

下面是改完的內容

---------------------------------

 

//1、今天的即時行情 >= 10 20 60sma

input:Leng1(10),Leng2(20),Leng3(60);

 

variable: ma1(0), ma2(0), ma3(0);

 

SetInputName(1,"短均線");

SetInputName(2,"中均線");

SetInputName(3,"長均線");

 

ma1 = average(close, Leng1);

ma2 = average(close, Leng2);

ma3 = average(close, Leng3);

 

condition1 = close >= ma1;

condition2 = ma1 >= ma2;

condition3 = ma2 >= ma3;

 

 

 

//2.昨天的收盤價 小於或等於 昨天的20ma "或" 前天的收盤價 小於或等於 前天的20ma

 

condition4 = close[1] <= ma2[1];

condition5 = close[2] <= ma2[2];

condition6 = condition4 or condition5;

 

 

//3、MACD指標(12,26,9),今天盤中的DIF >=昨天的DIF and DIF>=0

value1 = MACD(WeightedClose,12,26,9,value2,value3,value4);       //計算MACD

//plot1(value2, "DIF");

//plot2(value3, "MACD");

//plot3(value4, "OSC");

condition7 = value2 >= value2[1];

condition8 = value2 >= 0;

condition9 = condition7 and condition8;

 

 

//4、股價>=10元

condition10 = close >= 10;

 

 

//5.10日平均成交量>=1000張

condition11 = average(volume[1],10) >= 1000;

 

//6.今日的盤中KD指標(9,3,3) K>=D

input: Length(9), RSVt(3), Kt(3);

variable: rsv(0), k(0), _d(0);

 

SetInputName(1, "天數");

SetInputName(2, "RSVt權數");

SetInputName(3, "Kt權數");

 

if currentbar <> gettotalbar then return;

 

Stochastic(Length, RSVt, Kt, rsv, k, _d);

 

condition12 = k >= _d;

 

 

//7.今日的60ma>=昨日的60ma

condition13 = ma2 > ma2[1];

 

 

//選股條件:

if 

condition1 and condition2 and condition3 //1、站在三條均線之上

and condition6 //條件2

and condition9 //條件3

and condition10 //條件4

and condition11 //條件5

and condition12 //條件6

and condition13 //條件7

then 

ret = 1;

 

XQ小幫手 發文於   2020/08/31

Prokiss大 您好

主要是這段會影響到雷達的執行

if currentbar <> gettotalbar then return;

當資料讀取筆數於過往的時間點開始時,會不等於當前k棒導致無限終止

請把它去掉就ok了

請參考副圖與雷達匯出檔

感謝

附加文件

Prokiss 發文於   2020/08/31

感謝您的回答

還有兩點想要請教

1.我用這個執行警示選股 會發現仍有符合的股票無法被找到

有人告知說 我們寫的程式所呼叫的指標數值和看的實際數值不一樣

會有落差 所以即使邏輯和程式都沒錯 但是選出來的股票還是會有多有少

是這樣嗎?

 

2.上面那個程式 我在執行警示的頁面選擇指定頻率是還原日

如果我同時希望加入還原周線的條件 該怎麼撰寫?
能在一個程式中同時放入日和周的不同頻率嗎

例如 我希望加入 還原周線的股價能在20ma之上 

以及 還原周線的MACD的DIF要>=0

謝謝您的幫忙


XQ小幫手 發文於   2020/09/01

Prokiss大 您好

Q1: 會發現仍有符合的股票無法被找到?

A: 您可以使用PRINT功能來看看為何該檔股票在當時沒有觸發  相關介紹連結:PRINT

此功能可以讓您看出哪個條件未觸發

指標數值是會跟實際數值會是一樣的,

但是像是用到RSI 那類需要抓取大量過往數據的指標

才可能會發生些微誤差

Q2:跨頻率

A: 如果您要畫跨頻率的技術分析的話,可以使用此語法XF_MACD

他能夠達成在還原日下,跨頻率到還原周的應用。

發表回覆
Close