Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    SaveToCsv EntryIDCollection
End Sub
'
Private Sub SaveToCsv(ByVal EntryIDCollection As String)
    Const AUTO_SAVE_TITLE = "受注メール" ' 自動処理するメールの件名
    Const CSV_FILE = "C:\Users\keita\Dropbox\RPA\OutlookVBA\Outlook_Log.csv" ' データを保存する CSV ファイルの名前
    Dim i As Integer
    Dim arrEntryId
    Dim myMsg
    Dim stmCsv
    Set stmCsv = Nothing
    arrEntryId = Split(EntryIDCollection, ",")
    For i = LBound(arrEntryId) To UBound(arrEntryId)
        Set myMsg = Application.Session.GetItemFromID(arrEntryId(i))
        If myMsg.Subject = AUTO_SAVE_TITLE Then
            Dim strCode
            Dim strName
            Dim strQuantity
            If stmCsv Is Nothing Then
                Dim objFSO
                Set objFSO = CreateObject("Scripting.FileSystemObject")
                Set stmCsv = objFSO.OpenTextFile(CSV_FILE, 8, True, 0)
            End If
            strCode = GetText("商品番号", myMsg.Body)
            strName = GetText("商品名", myMsg.Body)
            strQuantity = GetText("数量", myMsg.Body)
            stmCsv.WriteLine strCode & "," & strName & "," & strQuantity
        End If
    Next
    If Not stmCsv Is Nothing Then
        stmCsv.Close
    End If
End Sub
' 本文からデータを取得する関数
Private Function GetText(strName As String, strBody As String) As String
    Dim ls As Long
    Dim le As Long
    ls = InStr(strBody, strName) ' 指定されたフィールド名を検索
    If ls > 0 Then
        ls = ls + Len(strName) ' フィールド名の次の文字から
        le = InStr(ls, strBody, vbCrLf) ' 改行コードまでを取得
        GetText = Trim(Mid(strBody, ls, le - ls)) ' 前後の空白を削除
    Else
        GetText = ""
    End If
End Function

 

Function ExtractOrderTable(mail As Outlook.MailItem) As String
    Dim lines() As String
    Dim i As Long
    Dim line As String
    Dim collecting As Boolean
    Dim output As String

    lines = Split(mail.Body, vbCrLf)
    collecting = False
    output = ""

    For i = 0 To UBound(lines)
        line = Trim(lines(i))

        ' 空行はスキップ
        If line = "" Then GoTo NextLine

        ' ヘッダー行を検出して、そこから収集開始
        If InStr(line, "品番") > 0 And InStr(line, "数量") > 0 Then
            collecting = True
            output = output & "▼ 発注内容(ヘッダー検出)▼" & vbCrLf
            output = output & line & vbCrLf
            GoTo NextLine
        End If

        ' 発注データ行を収集
        If collecting Then
            ' データの終わり(空行など)で停止
            If  InStr(line, "以上") > 0 Then
                collecting = False
                GoTo NextLine
            End If
            output = output & line & vbCrLf
        End If

NextLine:
    Next i

    ExtractOrderTable = output
End Function

Python

Pythonは今、比較的新しいプログラム言語として利用者を増やしています。

では、このPythonとはどういった言語なのでしょうか?

 

Pythonとはさまざまな分野のアプリケーションで使われている、極めてパワフルな動的プログラミング言語です。Python自体は統計解析に特化しているわけではありませんが、その拡張性の広さから統計解析の目的にも十分にユーザーの要求を満たす働きをすることができ、様々な分野で利用されています。

 

PythonはCやJavaに比べると、同じ処理を短いプログラムで実現することができます。短いということを言い換えると、PythonはCやJavaより「簡単」な言語であり、またオープンソースなフリーウェアなので非常に門戸が広く、様々な拡張機能が作られています。PythonからCを利用できるCythonや、PythonからRを利用できるPypeRなどです。

 

Pythonの名前の由来は特に統計はもちろん、他のプログラム言語などに関連しているものではありません。(作者がとあるTV番組が好きでその名を取ったことによると言われています。)

 

 

 

High Frequency Trading(高頻度取引)について

High Frequency Trading、または高頻度(高速)取引という言葉は皆さんも聞いたことがあると思います。では、それは一体何なのか説明出来る方は少ないのかなとも思われます。

 

そこで、多少その分野に関わったことのある私が少しずつ小出しに紹介していきたいと考えています。

 

まず、Program Trading(プログラムトレーディング)との違いは何でしょうか?

 

プログラムトレードはある決まったアルゴリズムでトレードを行うやり方で、一定の価格に来たら買い・売り、損益がどれぐらいになったら損切り・利益確定など、そういった初歩的なものから、何日移動平均線を割ったら、VWAP(出来高加重平均価格)での取引など、多少のアドバンストな取引も含まれます。

 

一方、ハイフリークエンシートレードをその名の通り、頻度の高い取引を行います。頻度が高いとはどのくらいでしょうか?一つの銘柄だけで、一秒間に1000回以上オーダーを出すことが可能なのです。今や市場は場立ちのブローカーがハンドサインで取引している世界から、ミリセカンド、ナノセカンドで単位でオーダーを繰り返す世界へと進化してしまったのです。

 

 

f:id:anonymousquant:20150920000332j:plain

確率密度関数(Probability Density Function)

早速、何を書こうかと考えた結果、とりあえずBlogで数式を書いたりコードを書いたりすること自体が初めてなので、その練習としてこれを選んだ。

 

そもそも確率の基礎に正規分布がある。細かい定義は差し置いて、これを知っていなければクオンツ的なこともデータサイエンティスト的なこともできない。

 

ということで、正規分布確率密度関数は以下のようなものである。

 

 \frac1{\sqrt{2\pi\sigma^{2} } }\; \exp\left(-\frac{\left(x-\mu\right)^2}{2\sigma^2} \right)

 

※ちなみに、数式がどうしても不格好になるので、どなたか綺麗に書く方法をご存知の方がいらっしゃいましたら教えて下さい…