最大引用比數請益

  •   367 
  • 最後發表   小梯子  2024 十一月 20
小梯子 發文於   2024/11/11

1分K警示腳本

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

if currentdate <> date then return;  

settotalbar(3);

value1 = Round(average(c,5),4);

value2 = Round(average(c,10),4); 

value3 = Round(average(c,20),4); 

value4 = Round(average(c,50),4); 

value5 = Round(average(c,100),4); 

value6 = Round(average(c,200),4);

 

//1分K_MACD(18 32 12) 

SetTotalBar((maxlist(18,32,6) + 12) * 3 + 8);

variable:_dif(0),_macd(0),_osc(0);

macd(weightedClose(),18,32,12,_dif,_macd,_osc);

 

//1分K_5分K_MACD(15,19,10)

SetTotalBar(((maxlist(15,19,6) + 10) * 3 + 8)*5);

variable:_dif5(0),_macd5(0),_osc5(0);

xfmin_MACD("5",xfMin_weightedclose("5"),15,19,10,_dif5,_macd5,_osc5);

 

//1分K_10分K_MACD(8 20 12)

SetTotalBar(((maxlist(8,20,6) + 12) * 3 + 8)*10);

variable:_dif10(0),_macd10(0),_osc10(0);

xfmin_MACD("10",xfMin_weightedclose("10"),8,20,12,_dif10,_macd10,_osc10);

 

//1分K_15分K_MACD(15,19,10)

SetTotalBar(((maxlist(15,19,6) + 10) * 3 + 8)*15);

variable:_dif15(0),_macd15(0),_osc15(0);

xfmin_MACD("15",xfMin_weightedclose("15"),15,19,10,_dif15,_macd15,_osc15);

 

//1分K_30分K_MACD(18,32,12)

SetTotalBar(((maxlist(18,32,6) + 12) * 3 + 8)*30); //

variable:_dif30(0),_macd30(0),_osc30(0);

xfmin_MACD("30",xfMin_weightedclose("30"),18,32,12,_dif30,_macd30,_osc30);

 

//1分K_60分K_MACD(12,26,9)

SetTotalBar(18000);

variable:_dif60(0),_macd60(0),_osc60(0);

xfmin_MACD("60",xfMin_weightedclose("60"),12,26,9,_dif60,_macd60,_osc60); 

 

var:intrabarpersist bcostA(0);

if (    (_dif cross over 0)

    and (_dif5 cross over 0) 

    and (_dif10 cross over 0)

    and (_dif15 cross over 0)  

    and (_osc30 >0)

    and (_osc60 >0)  )

then ret= 1 ;

           

想在1分K頻率寫一個多週期MACD技術指標其DIF同時上0軸出現警示的程式,

1分K及跨頻率5分K的dif macd osc數值正確以外,跨頻率10分K 15分K 30分K 60分K的數值錯誤.以台積電為例.

 

正確數值如下

跨頻率10分K  dif 2.2197  macd 0.0781  osc 2.1416

跨頻率15分K  dif 0.0385  macd -0.2500  osc 0.2885

跨頻率30分K  dif 4.4476 macd 5.6688 osc -1.2212

跨頻率60分K  dif 8.2323 macd 8.8741 osc -0.6419

請問如何修正.

 

 

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/11/11

用公式計算的資料筆數不一定正確。我一般計算MACD用300筆,跨頻率乘以倍數。

10分鐘用3000筆。

15分鐘用4500筆。

30分鐘用9000筆。

60分鐘用18000筆。

這樣算出來的MACD就都正確。

小梯子 發文於   2024/11/12

好的,我來試一試.

小梯子 發文於   2024/11/12

 

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

if currentdate <> date then return;  

 

settotalbar(3);

value1 = Round(average(c,5),4); 

value2 = Round(average(c,10),4); 

value3 = Round(average(c,20),4); 

value4 = Round(average(c,50),4); 

value5 = Round(average(c,100),4); 

value6 = Round(average(c,200),4);

 

//1分K_MACD(18 32 12)

SetTotalBar(300);

variable:_dif(0),_macd(0),_osc(0);

macd(weightedClose(),18,32,12,_dif,_macd,_osc);

 

//1分K_5分K_MACD(15,19,10)

settotalBar(300*5);

variable:_dif5(0),_macd5(0),_osc5(0);

xfmin_MACD("5",xfMin_weightedclose("5"),15,19,10,_dif5,_macd5,_osc5);

 

//1分K_10分K_MACD(8 20 12)

settotalBar(300*10);

variable:_dif10(0),_macd10(0),_osc10(0);

xfmin_MACD("10",xfMin_weightedclose("10"),8,20,12,_dif10,_macd10,_osc10);

 

//1分K_15分K_MACD(15,19,10)

SettotalBar(300*15);

variable:_dif15(0),_macd15(0),_osc15(0);

xfmin_MACD("15",xfMin_weightedclose("15"),15,19,10,_dif15,_macd15,_osc15);

 

//1分K_30分K_MACD(18,32,12)

settotalBar(300*30);

variable:_dif30(0),_macd30(0),_osc30(0);

xfmin_MACD("30",xfMin_weightedclose("30"),18,32,12,_dif30,_macd30,_osc30);

 

//1分K_60分K_MACD(12,26,9)

SetTotalBar(300*60); 

variable:_dif60(0),_macd60(0),_osc60(0);

xfmin_MACD("60",xfMin_weightedclose("60"),12,26,9,_dif60,_macd60,_osc60);

 

以新復興(4909) 11/12 132900 為例, 除了1分K及跨頻率5分K的dif macd osc數值正確以外,跨頻率10分K 15分K 30分K 60分K的數值錯誤

正確數值如下

跨頻率10分K  dif -1.1208 macd -1.2412  osc 0.1204

跨頻率15分K  dif -0.7555  macd -0.8755 osc 0.1200

跨頻率30分K  dif -3.8804 macd -2.9699 osc -0.9105

跨頻率60分K  dif -5.1244 macd -3.3316 osc -1.7898

請問如何修正.

 

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

你的程式並沒有問題,可能是Print的程式碼沒寫好。我測試的結果與技術分析圖表的指標數值相同。程式碼如下:

SetTotalBar(300*60); 
//1分K_10分K_MACD(8 20 12)
//1分K_15分K_MACD(15,19,10)
//1分K_30分K_MACD(18,32,12)
//1分K_60分K_MACD(12,26,9)
variable:_dif10(0),_macd10(0),_osc10(0);
variable:_dif15(0),_macd15(0),_osc15(0);
variable:_dif30(0),_macd30(0),_osc30(0);
variable:_dif60(0),_macd60(0),_osc60(0);
xfmin_MACD("10",xfMin_weightedclose("10"),8,20,12,_dif10,_macd10,_osc10);
xfmin_MACD("15",xfMin_weightedclose("15"),15,19,10,_dif15,_macd15,_osc15);
xfmin_MACD("30",xfMin_weightedclose("30"),18,32,12,_dif30,_macd30,_osc30);
xfmin_MACD("60",xfMin_weightedclose("60"),12,26,9,_dif60,_macd60,_osc60);
print(datetostring(date),timetoString(time),
"dif10=",numtoStr(_dif10,2),"macd10=",numtoStr(_macd10,2),"osc10=",numtoStr(_osc10,2),
"dif15=",numtoStr(_dif15,2),"macd15=",numtoStr(_macd15,2),"osc15=",numtoStr(_osc15,2),
"dif30=",numtoStr(_dif30,2),"macd30=",numtoStr(_macd30,2),"osc30=",numtoStr(_osc30,2),
"dif60=",numtoStr(_dif60,2),"macd60=",numtoStr(_macd60,2),"osc60=",numtoStr(_osc60,2)
);

小梯子 發文於   2024/11/13

好的, 我來試試,謝謝.

小梯子 發文於   2024/11/13

盤中數據一直在跑,是否要等到盤後才能做測試.

小梯子 發文於   2024/11/13

 

這是我跑的警示腳本

if barfreq<>"Min" or barinterval<> 1 then raiseruntimeerror("腳本只適用於1分鐘線");

if currentdate <> date then return;

 

 

SetTotalBar(300*60); 

value1 = Round(average(c,5),4); 

value2 = Round(average(c,10),4); 

value3 = Round(average(c,20),4); 

value4 = Round(average(c,50),4); 

value5 = Round(average(c,100),4); 

value6 = Round(average(c,200),4);

 

//1分K_MaFourTangled(5 10 20 50) 

Var: _MaFourTangled(0);

_MaFourTangled = MaFourTangled(5,10,20,50);

 

//1分K_MaFiveTangled(5 10 20 50 100) 

Var: _MaFiveTangled(0);

_MaFiveTangled = MaFiveTangled(5,10,20,50,100);

 

//1分K_MACD(18 32 12) 

//1分K_5分K_MACD(15,19,10)

//1分K_10分K_MACD(8 20 12)

//1分K_15分K_MACD(15,19,10)

//1分K_30分K_MACD(18,32,12)

//1分K_60分K_MACD(12,26,9)

 

variable:_dif(0),_macd(0),_osc(0);

variable:_dif5(0),_macd5(0),_osc5(0);

variable:_dif10(0),_macd10(0),_osc10(0);

variable:_dif15(0),_macd15(0),_osc15(0);

variable:_dif30(0),_macd30(0),_osc30(0);

variable:_dif60(0),_macd60(0),_osc60(0);

 

macd(weightedClose(),18,32,12,_dif,_macd,_osc);

xfmin_MACD("5",xfMin_weightedclose("5"),15,19,10,_dif5,_macd5,_osc5);

xfmin_MACD("10",xfMin_weightedclose("10"),8,20,12,_dif10,_macd10,_osc10);

xfmin_MACD("15",xfMin_weightedclose("15"),15,19,10,_dif15,_macd15,_osc15);

xfmin_MACD("30",xfMin_weightedclose("30"),18,32,12,_dif30,_macd30,_osc30);

xfmin_MACD("60",xfMin_weightedclose("60"),12,26,9,_dif60,_macd60,_osc60);

 

 

print(datetostring(date),timetoString(time),

"5ma=",numtoStr(value1,2),"10ma=",numtoStr(value2,2),"20ma=",numtoStr(value3,2),

"50ma=",numtoStr(value4,2),"100ma=",numtoStr(value5,2),"200ma=",numtoStr(value6,2),

"4均糾結=",numtoStr(_MaFourTangled,2),

"5均糾結=",numtoStr(_MaFiveTangled,2),

"dif=",numtoStr(_dif,2),"macd=",numtoStr(_macd,2),"osc=",numtoStr(_osc,2),

"dif5=",numtoStr(_dif5,2),"macd5=",numtoStr(_macd5,2),"osc5=",numtoStr(_osc5,2),

"dif10=",numtoStr(_dif10,2),"macd10=",numtoStr(_macd10,2),"osc10=",numtoStr(_osc10,2),

"dif15=",numtoStr(_dif15,2),"macd15=",numtoStr(_macd15,2),"osc15=",numtoStr(_osc15,2),

"dif30=",numtoStr(_dif30,2),"macd30=",numtoStr(_macd30,2),"osc30=",numtoStr(_osc30,2),

"dif60=",numtoStr(_dif60,2),"macd60=",numtoStr(_macd60,2),"osc60=",numtoStr(_osc60,2));

接下則

 

小梯子 發文於   2024/11/13

 

以奇偶(3356) 132900 測試結果 與130000 30分K 60分K 技術分析圖表的指標數值 dif相同 macd與 osc不相同

132900 警示腳本測試結果  _dif30=-0.12   _macd30=-0.19   _osc30=0.07

133000 30分K技術分析圖表  dif=-0.12   macd=-0.26   osc=0.13

 

132900 警示腳本測試結果  _dif60=-0.33    _macd60=-0.30    _osc60=-0.03

 

133000 60分K技術分析圖表  dif=-0.33    macd=-0.48    osc=0.14

請指教哪裏做錯了.

 

 

 

附加文件

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

你跨的頻率參數都不同,比對技術分析圖表時,要留意技術分析圖表的參數是否一致。

XS小編 發文於   2024/11/20

Hello 小梯子,

 

小編補充,你可以參考內建選股腳本內相同函數關於資料讀取筆數的設定,並在跨頻率時乘上所需倍數。

另外當有多個settotalbar同時存在的時候,系統只會使用最大的那一個,所以其實只需要寫一個便足夠。

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

發表回覆
Close