2012年7月30日 星期一

台指壓力支撐計算教學

期貨操作時,大家都希望能在拉回支撐時買進、反彈高點壓力點賣出,而壓力與支撐的點位通常會如何判斷呢?最簡單的方法就是均價及三關價,本篇就先就三關價來做個介紹,最原始的三關價的計算方式是用開、高、收、低來計算隔日的上關、中關、下關三個價位,公式如下:
上關價:本日最低點 +(本日最高點 - 本日最低點)X 1.382
中關價:(本日最高點 + 本日最低點)X 0.5
下關價:本日最高點 -(本日最高點 本日最低點)X  1.382

    有些人會在上關價跟中關價加一個本日最高點當作另外一個關卡價,同理也會在下關價跟中關價之間加一個本日最低點,舉例2012627的開高收低是6918700568986986
上關價 = 6898 + (7005-6898) X 1.382 = 7045.87
上關價2(即昨日最高價) = 7005
中關價 = (7005+6898) X 0.5 = 6951.5
下關價2(即昨日最低價) = 6898
下關價 = 7005 – (7005-6898) X 1.382 = 6857.12

    而漸漸也有很多人改良關卡價的計算方式,有些人認為開盤價與收盤價的代表意義較高,計算時應該給予較高的權重,所以在中關價的地方公式改成:開盤價*2+最高價+最低價+收盤價*2,上關價2則改為:中關價+(中關價-最低價),上關價為則改為:中關價+(最高價-最低價),下關價2改為:中關價-(最高價-中關價),下關價改為:中關價-(最高價-最低價),以上例計算如下
上關價 = 6951.8 + ( 7005-6898) = 7058.8
上關價2= 6951.8 + (6951.8-6898) = 7004.8
中關價 = (6918*2+7005+6898+6986*2)÷6 = 6951.8
下關價2= 6951.8 – (6951-6898) = 6898.8
下關價 = 6951.8 – (7005-6898) = 6844.8

獲得最後一個非空儲存格

    獲得指定列(或欄)中最後一個非空儲存格,以下程式碼會尋找A欄的最後一個有內容的儲存格列號
Sub 找最後一個非空儲存格()
    Dim last As Range
    Set last = ActiveSheet.Range("A65536").End(xlUp)
    MsgBox last.Row
    Set last = Nothing
End Sub

複製儲存格範圍的值

    只複製儲存格範圍的值,以下的程式碼即可達成
Sub 複製儲存格範圍的值()
   Sheet2.Range("B2:C5").Value = Sheet1.Range("B2:C5").Value
End Sub

複製儲存格範圍

    在使用EXCEL時,我們經常需要複製指定的儲存格範圍到另一個儲存格範圍,要複製指定的儲存格範圍到其他的位置,可以使用Range物件的copy方法。
下列程式碼複製Sheet1Sheet2A1開始的位置
Sub 複製儲存格範圍()
   Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")
End Sub

    如果Sheet2目標儲存格原本是有內容的話,會跳出一個確認視窗,確認是否要取代目標儲存格的內容,若想略過這個內容可以使用以下語法
Sub 複製儲存格範圍2()
   Application.DisplayAlerts = False
   Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")
   Application.DisplayAlerts = True
End Sub
Application.DisplayAlerts = False是設定不出現對話方塊

    如果想要連同欄寬同時複製,則參考以下程式碼
Sub 複製儲存格範圍3()
   Application.DisplayAlerts = False
   Sheet1.Range("A1").CurrentRegion.Copy
   With Sheet2.Range("A1")
      .PasteSpecial xlPasteColumnWidths
      .PasteSpecial xlPasteAll
   End With
   Application.CutCopyMode = False
   Application.DisplayAlerts = True
End Sub

透過錄製巨集了解VBA程式碼

    很多人一聽到程式就會想到要學一堆程式碼,對於沒有程式設計基礎的人來說,學習一堆程式語法是非常痛苦的一件事,但其實說穿了,語法只是一種語言讓我們藉此命令電腦幫我們執行我們要做的動作。
    大家多多少少在平常的工作中都會使用到EXCEL吧!而經常使用EXCEL的人都會發現,我們經常在做很多重複的動作,VBA就可以讓我們把平常重複做的動作簡化,在我們開始學VBA前,我們先來講【巨集】,巨集是可以把我們平常做的重複性動作錄製起來,這樣以後只要呼叫錄製好的巨集,電腦就會幫我們執行一連串的動作,有點類似像按鍵精靈的感覺!
    舉個實際的例子,假設我們有一個表單如下

    我們希望排列的順序是依造總分由高至低,一般就是把要排序的資料選起來,然後按上方資料->排序,然後選總分(遞減)。這次在做這個動作前,我們先執行錄製巨集的動作,打開工具->巨集->錄製新巨集,然後執行資料排序的動作,錄製完後就會在VB編輯器內看到一個程序如下
Sub 總分排序()
'
' 總分排序 Macro
' tommy7568 2012/7/26 錄製的巨集
'
' 快速鍵: Ctrl+a
'
    Range("A2:E5").Select
    Selection.Sort Key1:=Range("E2"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
        :=xlStroke, DataOption1:=xlSortNormal
End Sub
這就是我們做資料排序實際的程式碼!

限制工作表捲動範圍

    限制工作表捲動範圍,參造以下程式碼
Sub 限制工作表捲動範圍()
   Worksheets(1).ScrollArea = "B4:H12"
End Sub
以上程式可使第一張工作表的可捲動範圍設定B4H12ScrollArea=””則可取消限制捲動範圍

    如果要限制可捲動範圍為使用中視窗的可視範圍,則用以下程式碼達成
Sub 捲動範圍為可視範圍()
   With Sheet1
        .Activate
        .ScrollArea = ActiveWindow.VisibleRange.Address
   End With
End Sub
ScrollArea屬性設定為使用中視窗的可視範圍位址

活頁簿中新增新的工作表

    要在活頁簿中新增新的工作表,可以用以下語法做到
Sub 新增工作表()
   Sheets.Add after:=Sheets(Sheets.Count)
   ActiveSheet.Name = "新的工作表"
End Sub
第一行程式碼使用Add方法新增一個工作表,並將其新增至所有工作表的後面。Sheets.Count傳回活頁簿中工作表總數