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




