システムトレードブログ

株の自動売買ツールを作る(5)

トレシズ自動売買の開発方法

そういえば、トレード日記側で若干勘違いしていたのですが、

もはや今日からGWなんですね〜(コラ

4/30あたりからを指すのかと思っていたのですが、完全に盲点でした苦笑

こういう株がお休みの時期は、とにかく戦略のカスタマイズやポートフォリオのバランス調整、そして今は自動売買ツールと、

とにかく今後メリットがありそうな作業をすすめるに限りますね〜笑

個人的な考えですともちろん、

普段システムトレードを行っておりますと、

普段の相場や銘柄単位の値動き、DD等でやはり株をやっていない人に比べるとストレスは少なくないと思います。

…アベノミクス相場ですと利益が出やすかったとはいえるため、こういった利が乗りやすい相場ですとストレスがまったくなくなり、むしろプラスに作用するのが不思議ですが笑

いつもこういう相場だといいのですが基本はそうともいえないため苦笑、

やはりこういうお休みの時期は株を忘れてしっかり休む、というのもいいのかもしれませんね〜。

やはり

「システムトレードは人生を豊かにするツールの1つ」

ということで、そこに置く比重は人それぞれだと思っていたりします。

なお、私の場合ですとシステムトレードに対する比重は非常に大きいため(といいますか、システムトレードを超えるものがないため苦笑)、

アニメ以外ですとやはりシステムトレード関連を研究している時間が一番楽しかったりします笑

これはおそらく、好きなことをやっているのが一番いいということなんでしょうね〜。

ひとまず自動売買ツールですが、ライブスターにおける発注関連はほぼ完了しました。

ソースが汚い点と自己責任へのご了承、テストは最小限にしてほしいというのが相変わらずのお願いですが、

ただ以下ソースがご参考になれば幸いです笑

■UWSC側(order.uwsという名前で、Dドライブ直下に「UWSC」フォルダを作り保存)
----------------------------------------------------
Public LOGINURL = "https://lv01.live-sec.co.jp/webbroker3/44/i/WEB3Index.jsp?aa_odrdv=2" // ライブスターログインURL
Public SLEEPTIME = 0.1 // 画面遷移時の休止時間
Public IE = 0 // IEオブジェクト用
Public CHANGESG = 1 // 信用建禁止銘柄の場合現物で発注する場合:1 しない場合:0
Public TEST = 1 // テストの場合1 実際に発注する場合0

//PARAM_STR[0]: 証券会社 ライブスターLS
//PARAM_STR[1]: ログインID
//PARAM_STR[2]: ログインパスワード
//PARAM_STR[3]: 取引パスワード
//PARAM_STR[4]: 制度信用S 現物G
//PARAM_STR[5]: 買いL 売りS
//PARAM_STR[6]: 銘柄コード
//PARAM_STR[7]: 銘柄名
//PARAM_STR[8]: 成行N 引成H 指値S 寄指Y 引指I 不成F 逆指値G 逆指値(指値指定)J
//PARAM_STR[9]: 株数
//PARAM_STR[10]: 指値
//PARAM_STR[11]: 逆指値

login(PARAM_STR[1], PARAM_STR[2])

order(PARAM_STR[3], PARAM_STR[4], PARAM_STR[5], PARAM_STR[6], PARAM_STR[7], PARAM_STR[8], PARAM_STR[9], PARAM_STR[10], PARAM_STR[11])

//■スリープ
Procedure ieSleep(IE)
REPEAT
SLEEP(SLEEPTIME)
UNTIL !IE.busy AND IE.readystate=4
Fend

//■エラー時の処理
Procedure error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, ok, msg)
MSGBOX(sgStr + " " + lgStr + " " + mCode + " " + mName + " " + howStr + " " + kabusu + "株 " + " " + sashine + "円 " + ok + " " + msg)
IE.quit
EXITEXIT
Fend

//■信用→現物変更時の処理
Procedure orderChange(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, ok, msg)

which = ""
ifB how = "G" OR how = "J"
ifB ls = "S" // 信用売り(逆指値)
which = "以下"
else // 買い(逆指値)
which = "以上"
Endif
Endif

MSGBOX(sgStr + " " + lgStr + " " + mCode + " " + mName + " " + howStr + " " + kabusu + "株 " + " " + sashine + "円 " + sashineG + "円" + which + " " + ok + " " + msg)

IESETDATA(IE,True,"","7.戻る")
ieSleep(IE)

IELINK(IE,"メインメニューへ")
ieSleep(IE)

order(orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG)
Fend

//■発注時の処理
Procedure complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, ok, msg)

which = ""
ifB how = "G" OR how = "J"
ifB ls = "S" // 信用売り(逆指値)
which = "以下"
else // 買い(逆指値)
which = "以上"
Endif
Endif

MSGBOX(sgStr + " " + lgStr + " " + mCode + " " + mName + " " + howStr + " " + kabusu + "株 " + " " + sashine + "円 " + sashineG + "円" + which + " " + ok + " " + msg)
IE.quit
EXITEXIT
Fend

//■ログイン
Procedure login(loginId, loginPw)
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate(LOGINURL)
ieSleep(IE)

IESETDATA(IE,loginId,"aa_accd")
IESETDATA(IE,loginPw,"lg_pw")
IESETDATA(IE,True,"","1.実行")
ieSleep(IE)

IELINK(IE,"メインメニューへ")
ieSleep(IE)
Fend

//■発注
Procedure order(orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG)

sgStr = "現物" // 現物or信用
lgStr = "買い" // 買いor売り
howStr = "成行" // 仕掛け方法
pdcd = "eq_pdcd" // 銘柄検索
ttp_x = "eq_ttp_x" // 特定口座
odqt = "eq_odqt" // 株数
ectpodpdiv_x = "eq_ectpodpdiv_x" // 注文方法
lpr = "eq_lpr" // 指値
sodcpr = "eq_sodcpr" // 逆指値
ectpodpdiv_x = "eq_ectpodpdiv_x" // 逆指値の執行条件
edttp_x = "eq_edttp_x" // 当日限り

ifB sg = "S"

sgStr = "信用" // 信用
pdcd = "mr_pdcd" // 銘柄検索(信用)
ttp_x = "mr_ttp_x" // 特定口座(信用)
odqt = "mr_odqt" // 株数(信用)
ectpodpdiv_x = "mr_ectpodpdiv_x" // 注文方法(信用)
lpr = "mr_lpr" // 指値(信用)
sodcpr = "mr_sodcpr" // 逆指値(信用)
ectpodpdiv_x = "mr_ectpodpdiv_x" // 逆指値の執行条件(信用)
edttp_x = "mr_edttp_x" // 当日限り(信用)

ifB ls = "S" // 信用売り

lgStr = "売り" // 売り

// 信用取引をクリック
IELINK(IE,"信用取引")
ieSleep(IE)

// 新規売をクリック
IELINK(IE,"新規売")
ieSleep(IE)

else // 信用買い

// 信用取引をクリック
IELINK(IE,"信用取引")
ieSleep(IE)

// 新規買をクリック
IELINK(IE,"新規買")
ieSleep(IE)
Endif

else // 現物買い

// 株式現物をクリック
IELINK(IE,"株式現物")
ieSleep(IE)

// 買付をクリック
IELINK(IE,"買付")
ieSleep(IE)
Endif

// 銘柄検索
IESETDATA(IE,mCode,pdcd)
IESETDATA(IE,True,"","1.実行")
ieSleep(IE)

// 該当銘柄が存在しない場合
ifB pos("優先市場が設定されていません",IE.document.body.innerText)
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "該当銘柄なし")
Endif

ifB how = "G" OR how = "J" // 逆指値
howStr = "逆指値"
IESETDATA(IE,"逆指値S","jsp_cond_chg")
IESETDATA(IE,True,"","4.画面切替")
ieSleep(IE)
IESETDATA(IE,sashineG,sodcpr)
Endif

// 特定口座
IESETDATA(IE,1,ttp_x,"1")

// 株数
IESETDATA(IE,kabusu,odqt)

ifB how = "H" // 引成
howStr = "引成"
IESETDATA(IE,"引成",ectpodpdiv_x)
elseif how = "S" // 指値
howStr = "指値"
IESETDATA(IE,"指値",ectpodpdiv_x)
IESETDATA(IE,sashine,lpr)
elseif how = "Y" // 寄指
howStr = "寄指"
IESETDATA(IE,"寄指",ectpodpdiv_x)
IESETDATA(IE,sashine,lpr)
elseif how = "I" // 引指
howStr = "引指"
IESETDATA(IE,"引指",ectpodpdiv_x)
IESETDATA(IE,sashine,lpr)
elseif how = "F" // 不成
howStr = "不成"
IESETDATA(IE,"不成",ectpodpdiv_x)
IESETDATA(IE,sashine,lpr)
elseif how = "J" // 逆指値(指値指定)
howStr = "逆指値(指値指定)"
IESETDATA(IE,sashine,lpr)
IESETDATA(IE,"指値",ectpodpdiv_x)
Endif

// 当日限り
IESETDATA(IE,1,edttp_x,"1")

// 発注確認
IESETDATA(IE,True,"","1.実行")
ieSleep(IE)

// エラーチェック
ifB pos("売買単位が正しくありません",IE.document.body.innerText)
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "売買単位エラー")
elseif pos("不足しています",IE.document.body.innerText)
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "余力不足")
elseif pos("超えています",IE.document.body.innerText)
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "値幅制限エラー")
elseif pos("抵触",IE.document.body.innerText)
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "アップティックルール規制")
elseif pos("制限されています",IE.document.body.innerText)
ifB sg = "S" AND ls = "L" AND CHANGESG = 1 // 現物で発注
orderChange(sgStr, lgStr, howStr, orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用規制銘柄")
else
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "信用規制銘柄")
Endif
elseif pos("できません",IE.document.body.innerText)
ifB sg = "S" AND ls = "L" AND CHANGESG = 1 // 現物で発注
orderChange(sgStr, lgStr, howStr, orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用不可")
else
error(sgStr, lgStr, howStr, mCode, mName, kabusu, sashine, sashineG, "×", "信用不可")
Endif
Endif

// 発注
IESETDATA(IE,orderPw,"aa_pw")

ifB test = 0 // 実際に発注する場合
IESETDATA(IE,True,"","1.実行")
ieSleep(IE)
complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "○", "発注完了")
else // テストの場合
complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "○", "発注完了(テスト)")
Endif
Fend
----------------------------------------------------

■コマンドプロンプト側
----------------------------------------------------
"C:\Program Files (x86)\UWSC\UWSC.exe" "D:\UWSC\order.uws" "LS" "証券会社ログインID" "証券会社ログインパスワード" "証券会社取引パスワード" "G" "L" "4755" "楽天" "G" "100" "1101" "1102"
----------------------------------------------------

上記で基本的な注文には全て対応しています。

ただ、まだ未完成であり、以下の対応が求められます。

A. MSGBOXでエラー等を出力している箇所を、テキストファイルなどにログで保存
B. TESTなどの定数を外部ファイル化
C. IFD注文やOCO注文への対応
D. その他、まだ分かっていないエラーへの対応

とはいえ、今回はオーバーナイトブレイクを早く自動化することが目的のため(コラ、

A・Bの対応が終わり次第次は

・保有銘柄一覧取得
・手仕舞い
・もしくは一気に株価監視ツール側?

まで行きたいですね〜笑

トレシズの「自動売買の開発方法」の記事

前々記事:株の自動売買ツールを作る(3)
前の記事:株の自動売買ツールを作る(4)
今の記事:株の自動売買ツールを作る(5)
次の記事:同時逆指値検証で気づいたスリッページ以外の点
次々記事:株の自動売買ツールを作る(6)

おすすめ記事

今日は一日自動発注ツールの開発をしておりました苦笑

なぜ自動発注ツールを作っているのかといいますと、特にゴッドブレス2の個人用ファイ…

株の自動売買ツールを作る(15)

個人的な一括発注ツールのIFDO注文対応が完了しました笑これでおそらくは先日のエス…

> このページのURLをPCメールアドレスに送る