注文をEXCELマクロで自動化 奮闘中

システムデイトレード日誌

株注文の自動化は、楽天証券のマーケットスピードできるようですが、これをEXCELのマクロ(VBA)でできないか、試行錯誤中です。


Sub 買注文()
Set ob = CreateObject("MSXML2.XMLHTTP")


'ログイン

X1 = "?loginid=XXXXXXXXXXX"
X2 = "&passwd=XXXXXXXXXXX"

param = X1 + X2
url = "https://member.rakuten-sec.co.jp/app/Login.do" + param

y = send_get(ob, url)
If InStr(y, "現在メンテナンス中のためシステムを使用できません。") > 0 Then
Stop
End If

'セッションID取得し、銘柄入力画面へ

p0 = InStr(y, "location.href = " + Chr(34) + "/app/com_page_template.do;BV_SessionID")
If p0 = 0 Then Stop: 'ログイン出来ない時
P1 = InStr(p0 + 1, y, ";")
p2 = InStr(P1 + 1, y, "?")
ses = Mid(y, P1, p2 - P1)

url = "https://member.rakuten-sec.co.jp/app/ord_jp_stk_search.do" + ses + "?eventType=init&trdKbn=10&gmn=H&smn=01&lmn=&fmn="
y = send_get(ob, url)



'銘柄CD入力から注文画面へ
url = "https://member.rakuten-sec.co.jp/app/ord_jp_stk_search.do" + ses + "?gmn=J&smn=05&lmn=01&fmn=01"
銘柄CD = "6740": 'ジャパンディスプレイのCD
X1 = "dscrCdNm=" + 銘柄CD
X2 = "&marketCd=0"
X3 = "&industryCd=0"
X4 = "&checkUnitLessReal=0"
X5 = "&checkUnitLess=0"
X6 = "&offsetRow="
X7 = "&trdKbn=10"
X8 = "&pageNo=1"
X9 = "&eventType=search"
X10 = "&type="
X11 = "&sub_type="
X12 = "&local="
X13 = "&searchLog="

param = X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 + X13
y = send_post(ob, url, param)
If InStr(y, "東証・名証で該当する銘柄はありませんでした。入力内容をご確認ください。") > 0 Then
Stop
End If

If InStr(y, "現物取引(買い注文 / 受付)") = 0 Then
Stop
End If



'注文画面から確認画面へ
url = "https://member.rakuten-sec.co.jp/app/ord_jp_stk_new.do" + ses + "?gmn=J&smn=05&lmn=01&fmn=01"

z = "marketOrderSubstitutePricePriority"
X1 = Mid(name_value(y, z), 2, 1000)

z = "marketOrderSubstitutePriceStkBuy"
X2 = name_value(y, z)

z = "marketOrderSubstitutePriceStkSell"
X3 = name_value(y, z)

z = "marketOrderSubstitutePriceMgnBuy"
X4 = name_value(y, z)

z = "marketOrderSubstitutePriceMgnSell"
X5 = name_value(y, z)

X6 = "&ordSetSorFlag=on"

株数 = "100"
X7 = "&orderValue=" + 株数


x = "<td class=" + Chr(34) + "price-01" + Chr(34) + "><nobr>"
p = InStr(y, x)
If p = 0 Then Stop
P1 = p + Len(x)
p2 = InStr(P1, y, "<")

指値 = Trim(Str(Val(Mid(y, P1, p2 - P1)) + 2)): '指値は現在値+2円でセット
X8 = "&marketOrderPrice=" + 指値

X9 = "&marketOrderKbn=0"
X10 = "&datepicker="
X11 = "&accountCd=1"
X12 = "&doSetOrder=0"
X13 = "&setOrderPriceKbn="
X14 = "&setOrderPrice="
X15 = "&setOrderPriceKbn="
X16 = "&profitMarginPrice="
X17 = "datepickerForSetOrder="
X18 = "&password=XXXXXXX"
x19 = "&checkbox=true"
X20 = "&dscrCd=" + 銘柄CD


z = "orderSequence"
X21 = name_value(y, z)

z = "dscrNm"
銘柄名称 = name_value(y, z)
x22 = 銘柄名称
X23 = "&hiddenMarketCd=1"
X24 = "&marketNm=東証"
X25 = "&stopOrderType=0"
X26 = "&tradeType=3"
X27 = "&lessUnitServiceKbn="
X28 = "&lessUnitCondKbn="
X29 = "&accountCd=1"
X29 = "&newStopOrderType="
X30 = "&priceFlag=1"
X31 = "&marketExecCond=1111111"
X32 = "&waitExecCond=1100100"
X33 = "&selMarketCd=1"
X34 = "&eventType=newCheck"
X35 = "&type=null"
X36 = "&sub_type="
X37 = "&local="
X38 = "&hiddenOrdSetSorFlag=1"
X39 = "&selMarketCd=1"
x40 = "&execCondCd=3": '寄付でセット
z = "<sselect name=" + Chr(34) + "ordValDate" + Chr(34)
日付 = Right(name_value(y, z), 10)
X41 = "&ordValDate=" + 日付
X42 = "&setExecCondCd=1"
X43 = 日付

param = X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + x19 + X20 + X21 + x22 + X23 + X24 + X25 + X26 + X27 + X28 + X29 + X30 + X31 + X32 + X33 + X34 + X35 + X36 + X37 + X38 + X39 + x40 + X41 + X42 + X43
y = send_post(ob, url, param)


If InStr(y, "現物対当取引(クロス取引)になる可能性がございますので、ご注文を受付けられません。") > 0 Then
Stop
End If

If InStr(y, "(買い注文 / 確認)") = 0 Then
Stop
End If




'確認画面で注文
以下は、まだ作成中。


End Sub



Function name_value(y, z)
P1 = InStr(y, z)
If P1 = 0 Then Value = "err"
p2 = InStr(P1, y, "value")
P3 = InStr(p2, y, Chr(34))
P4 = InStr(P3 + 1, y, Chr(34))
name_value = "&" + z + "=" + Mid(y, P3 + 1, P4 - P3 - 1)


End Function



Function send_get(ob, url)


ob.Open "GET", url, False
ob.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ob.send ("")

Do While ob.ReadyState < 4
DoEvents
Loop


send_get = ob.ResponseText



End Function



Function send_post(ob, url, x)

ob.Open "post", url, False
ob.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ob.send (x)
Do While ob.ReadyState < 4
DoEvents
Loop


send_post = ob.ResponseText

End Function

×

非ログインユーザーとして返信する