以下內容僅供教學分享使用,請勿以此作為投資方法,如採用作為投資方法,盈虧自負,一概不負相關責任。
以下程式碼,請以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的畫面。
參考資料: