COCO研究院

 找回密碼
 註冊
搜索
查看: 8442|回復: 34

請問 bug 在那裡呀?

[複製鏈接]
發表於 12-10-28 10:32 | 顯示全部樓層 |閱讀模式
在下嘗試 從2000年到今天為止, 所有的結算日, 寫一指標, 在日K線上標出來,
結算日的函數是從 multicharts官網下載, 異常結算日(遇颱風或春節長假等)有修正.
結果全部正常, 唯有 2010年6月17日沒有標出來, 請問 bug 在那裡? 謝謝!


002.png

函數名稱:   _closedate  程式碼如下:
---------------------------------------------------------
var: pMon("");
var: pVar1(0);
pMon = MidStr(NumToStr(date,0),1,IFF(date < 1000101,4,5));
VALUE1 = StrToNum(pMon + "01");
VALUE2 = 3-DayOfWeek(VALUE1);
if VALUE2 < 0 then begin
VALUE2 = VALUE2 + 7;
end;
_CloseDate = StrToNum(pMon)*100 + (VALUE2 + 15);
pVar1 = StrToNum(pMon)*100 + (VALUE2 + 15);
switch pVar1 begin
case 990217:
_CloseDate = 990220;
case 1021016:
_CloseDate = 1021017;
case 1030115:
_CloseDate = 1030116;
case 1030521:
_CloseDate = 1030522;
case 1030618:
_CloseDate = 1030620;
case 1030917:
_CloseDate = 1030918;
case 1031015:
_CloseDate = 1031016;
case 1040121:
_CloseDate = 1040127;
case 1040721:
_CloseDate = 1040722;
case 1070221:
_CloseDate = 1070226;
case 1100217:
_CloseDate = 1100222;   
default:
_CloseDate = pVar1;
end;
-------------------------------------------------------

指標程式碼:
-------------------------------------------------------
var:NumberOfText(0);   
if  date= _closedate then begin
  ARW_new(date, time, low, false);  
  NumberOfText=NumberOfText+1;
  arw_setstyle(NumberOfText,14);
  arw_setsize(NumberOfText,20);
  arw_setcolor(NumberOfText,yellow);
  arw_settextbgcolor(NumberOfText,Blue);
  arw_settextcolor(NumberOfText,White);
  arw_settext(NumberOfText, MidStr(NumToStr(_closedate,0),2,6));
end;
----------------------------------------------------------
發表於 12-10-28 10:53 | 顯示全部樓層
本帖最後由 雙巴神 於 12-10-28 12:15 編輯

那是錯的

裡面沒有0617這個日期~

_CloseDate = 1100222;   
default:

他就只"人工"加到20100222

後面你要手動去補上

後面還有幾個日期要補

你仔細看到程式寫的邏輯,這是大錯特錯的

先視"正常結算日"為結算日

再將"非正常結算日"視為特殊函數

實際上不是這樣子來決定結算日的
如果所有結算日都能用"函數"決定出來,我服了他

你知道真正答案是什麼嗎?






























20100616 端午節 我記得很清楚,那天我還出來上班....

解決方法:那個函數可以丟了,我建議是用寫死日期的
不要以為想用函數解決結算日的問題,同理可證颱風天是"預定"的結算日時也是一樣(最近的日期好像有一個喔)
官網提供的函數...嗯...我自己寫好了
我只能說那個函數的寫法不是正確的   
自己設一個清單列表比較快









評分

參與人數 2金錢 +6 收起 理由
googleandy + 4 很棒的文章,感恩!
shex + 2 按一個讚!太強了

查看全部評分

 樓主| 發表於 12-10-28 11:34 | 顯示全部樓層
雙巴神 發表於 12-10-28 10:53
那是錯的

裡面沒有0617這個日期~

謝謝雙大回覆。

我現在不在電腦前,印象中,有20100617那根K棒,
但沒標示出來。

不過,全部結算日共一百多天而已,
用列舉的,不用函數,應是很好的主意。

謝謝!
 樓主| 發表於 12-10-28 11:46 | 顯示全部樓層
雙巴神 發表於 12-10-28 10:53
那是錯的

裡面沒有0617這個日期~

http://www.taifex.com.tw/chinese/5/FutIndxFSP.asp

交易所有2010•6•17
這天的結算資料,

那天應有上班。

發表於 12-10-28 12:07 | 顯示全部樓層
本帖最後由 雙巴神 於 12-10-28 12:11 編輯
googleandy 發表於 12-10-28 11:46
http://www.taifex.com.tw/chinese/5/FutIndxFSP.asp

交易所有2010•6•17

裡面沒有0617這個日期~
我指的是官網的程式裡面沒有標0617,不是指歷史資料SORRY沒說清楚
20100617當然有開市
case 990217:
_CloseDate = 990220;
case 1021016:
_CloseDate = 1021017;
case 1030115:
_CloseDate = 1030116;
case 1030521:
_CloseDate = 1030522;
case 1030618:
_CloseDate = 1030620;
case 1030917:
_CloseDate = 1030918;
case 1031015:
_CloseDate = 1031016;
case 1040121:
_CloseDate = 1040127;
case 1040721:
_CloseDate = 1040722;
case 1070221:
_CloseDate = 1070226;
case 1100217:
_CloseDate = 1100222;   



發表於 12-10-28 12:09 | 顯示全部樓層
沒有人可以預知未來那天有放國定假日,也不知那個結算日會碰到颱風假
正常結算日可以用算的,但是特殊結算日就必需自已去告知電腦
如果有人有更好的方式,麻煩告知~
發表於 12-10-28 12:10 | 顯示全部樓層
googleandy 發表於 12-10-28 11:34
謝謝雙大回覆。

我現在不在電腦前,印象中,有20100617那根K棒,

全都結算日都用人工填,會比只填特殊結算日來的好嗎?

發表於 12-10-28 12:55 | 顯示全部樓層
雙巴神 發表於 12-10-28 10:53
那是錯的

裡面沒有0617這個日期~

請問巴大手邊有台指期10年來每個月的結算日期嗎?
小弟也想一個一個加在程式中, 無奈網路上好像找不到完整的日期資料

 樓主| 發表於 12-10-28 12:57 | 顯示全部樓層
folkchen 發表於 12-10-28 12:10
全都結算日都用人工填,會比只填特殊結算日來的好嗎?

我不知咧,我才學MC power language 兩個月。
所以才請教各位前輩。

用列舉的不知會不會影響速度。
 樓主| 發表於 12-10-28 12:59 | 顯示全部樓層
bacardi 發表於 12-10-28 12:55
請問巴大手邊有台指期10年來每個月的結算日期嗎?
小弟也想一個一個加在程式中, 無奈網路上好像找不到完 ...

期交所就有了。

資料最完整。
發表於 12-10-28 13:02 | 顯示全部樓層
googleandy 發表於 12-10-28 12:59
期交所就有了。

資料最完整。

原來andy大上面期交所的連結就有了
真歹勢, 感謝andy大
發表於 12-10-28 13:09 | 顯示全部樓層
我剛剛去查了一下官網上的特殊結算日有不少是錯的
特殊結算日應該只有以下幾個才對

switch pVar1 begin
        case 990217:        _CloseDate = 990220;
        case 1040121:        _CloseDate = 1040127;
        case 1070221:        _CloseDate = 1070226;
        case 1100217:        _CloseDate = 1100222;
        case 1100616:        _CloseDate = 1100617;
        default:        _CloseDate = pVar1;
end;
 樓主| 發表於 12-10-28 13:20 | 顯示全部樓層
folkchen 發表於 12-10-28 13:09
我剛剛去查了一下官網上的特殊結算日有不少是錯的
特殊結算日應該只有以下幾個才對

是,
應該把MC官網,交易所官網,逐筆核對。

發表於 12-10-28 13:22 | 顯示全部樓層
http://www.multicharts.com.tw/di ... ;D_ID=2&SN=1697
剛剛去查了一下,原文的第6樓有提到0617的手動加上去
之後就沒有其他特殊結算日了,但他前面的結算日有抓錯,改用我的那五天特殊結算日應該就可以了

因為本文是五月發的
六月有碰到特殊日期
所以要自已手動加進去

end else if pVar1 = 1100616 then begin
_CloseDate = 1100617;
發表於 12-10-28 13:24 | 顯示全部樓層
googleandy 發表於 12-10-28 13:20
是,
應該把MC官網,交易所官網,逐筆核對。

我是沒有逐筆去對,寫個小程式去比對沒有K棒的結算日就可以了

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-25 04:00

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |