最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2016年7月16日 星期六

MultiCharts 與Excel:由日K棒價格看台指與摩台每月換倉成本

很多人常會在電視節目上看到分析師在講每個月台指期與摩台指換倉成本,但至今卻沒有一個比較標準的計算方式,這裡筆者僅提供自己使用的方法讓大家參考,並將內容轉成MultiCharts程式碼,大家可以自行參考。
以下內容僅供教學分享使用,請勿以此作為投資方法,如採用作為投資方法,盈虧自負,一概不負相關責任。
以下程式碼,請以MultiCharts指標來使用,台指期與摩台指的結算日、成本計算方法,請自行修改。
Inputs : iLineName1("Cost1"), iLineName2("Cost2");

vars : vDT1(0), vDT2(0), vDT3(0), vDT4(0), vDT(0), ii(0), 
       vDS1(0), vDS2(0), vDS3(0), vDS4(0), vDS(0), vThisdate(0), vNextdate(0),
       String1(""), String2("");

array : TXF[12](0), TW[12](0);

TXF[0]  = 1160120;
TXF[1]  = 1160217;
TXF[2]  = 1160316;
TXF[3]  = 1160420;
TXF[4]  = 1160518;
TXF[5]  = 1160615;
TXF[6]  = 1160720;
TXF[7]  = 1160817;
TXF[8]  = 1160921;
TXF[9]  = 1161021;
TXF[10] = 1161116;
TXF[11] = 1161221;

TW[0]  = 1160129;
TW[1]  = 1160225;
TW[2]  = 1160330;
TW[3]  = 1160428;
TW[4]  = 1160530;
TW[5]  = 1160629;
TW[6]  = 1160728;
TW[7]  = 1160830;
TW[8]  = 1160929;
TW[9]  = 1161028;
TW[10] = 1161129;
TW[11] = 1161229;

once cleardebug;

value1 = GetAppInfo(aiLeftDispDateTime);

vThisdate = 0;
vNextdate = 0;
for ii = 0 to array_getmaxindex(TXF) - 1 begin
 if TXF[ii] <= JulianToDate(computerdatetime) and JulianToDate(computerdatetime) < TXF[ii + 1] then begin
  vThisdate = datetojulian(TXF[ii]);
  vNextdate = datetojulian(TXF[ii + 1]);
 end;
end;

if D = JulianToDate(vThisdate - 2) then vDT1 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate - 1) then vDT2 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate)     then vDT3 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate + 1) then vDT4 = round(avglist(O, H, L, C), 0);
if D > JulianToDate(vThisdate ) and D <= JulianToDate(vNextdate) then begin
 vDT = round(avglist(vDT1, vDT2, vDT3, vDT4), 0);
 value2 = tl_new(d, t, vDT, d, t, vDT); 
 tl_setcolor(value2, RGB(0, 191, 255));
 tl_setextleft(value2, True);
 tl_setextright(value2, True);
 if D = JulianToDate(vThisdate + 2) then begin
  String1 = iLineName1 + Spaces(1) + NumToStr(vDT, 0);
  value2 = text_new(JulianToDate(value1 + 3), t, vDT + 40, String1);
  text_setattribute(value2, 1, True);
  text_setcolor(value2, RGB(0, 191, 255));
  text_setstyle(value2, 0, 2);
  text_setsize(value2, 16);
 end;
end;

vThisdate = 0;
vNextdate = 0;
for ii = 0 to array_getmaxindex(TW) - 1 begin
 if TW[ii] <= JulianToDate(computerdatetime) and JulianToDate(computerdatetime) < TW[ii + 1] then begin
  vThisdate = datetojulian(TW[ii]);
  vNextdate = datetojulian(TW[ii + 1]);
 end;
end;

if D = JulianToDate(vThisdate - 2) then vDS1 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate - 1) then vDS2 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate)     then vDS3 = round(avglist(O, H, L, C), 0);
if D = JulianToDate(vThisdate + 1) then vDS4 = round(avglist(O, H, L, C), 0);
if D > JulianToDate(vThisdate) and D <= JulianToDate(vNextdate) then begin
 vDS = round(avglist(vDS1, vDS2, vDS3, vDS4), 0);
 value3 = tl_new(d, t, vDS, d, t, vDS);
 text_setstring(value3, iLineName2);
 tl_setcolor(value3, RGB(191, 62, 255));
 tl_setextleft(value3, True);
 tl_setextright(value3, True);
 if D = JulianToDate(vThisdate + 2) then begin
  String2 = iLineName2 + Spaces(1) + NumToStr(vDS, 0);
  value3 = text_new(JulianToDate(value1 + 3), t, vDS + 40, String2);
  text_setattribute(value3, 1, True);
  text_setcolor(value3, RGB(191, 62, 255));
  text_setstyle(value3, 0, 2);
  text_setsize(value3, 16);
 end;
end;
程式碼說明:
第09~20行:台指期結算日。
第22~33行:摩台期結算日。
第   37  行:找出當前圖表視窗最左邊K棒的日期。
第39~46行:找出當月台指期結算日與次月結算日。
第48~51行:計算台指期可能的換倉成本。
第52~66行:畫台指期換倉成本趨勢線。
第68~75行:找出當月摩台期結算日與次月結算日。
第77~80行:計算摩台期可能的換倉成本。
第81~96行:畫摩台期換倉成本趨勢線。

在MC圖表視窗中設定中文字
Step 1. 在圖表視窗中右鍵、設定指標。

Step 2. 點選設定修改內容。

Step 3. 將"Cost1"、 "Cost2" 換成 "台指成本"、"摩台成本"。

Step 4. 設定為成後,回到設定物件對話框就可見到內容已改為中文。

最後MultiCharts的畫面。

參考資料: