株の自動売買ツールを作る(12)
そういえば、おーじ様がGMOクリック関連で大変だったようですね、お疲れ様です汗
昨日はヒノカグ【ボラティリティ】を使われたとのことで、
3日前、2日前の相場の押しを考えますと昨日は逆張りがかなり機能したのではないかと思いますね〜。
実際のところ、ヒノカグ【上方ブレイク】やゴッドブレス2のようなブレイクアウト系の順張り買いですと昨日のようなリバウンドが、0ではないですがそこまでは取れない場合が多いため、
1つは逆張り買いがあると実際便利だと思っています笑
私自身トレード日記側に導入する逆張り系の買いを実際迷っておりまして、
最終的にはヒノカグ【上方ブレイク】やゴッドブレス2と最も曲線の違うものを採用する予定だったりします。
あと、ゴッドブレス2の威力が落ちているのでは?というご質問をいただきましたので、あくまで私の個人的な考えを書かせていただきますと(コラ、
正直全く落ちていないと考えています(ぇ
といいますのも、バックテスト段階の今年の期待値が伸びる一方のためですね笑
これは要するにもし全シグナルに仕掛けることができれば結構な利益になっていることを意味しまして、
もちろんそこからスリッページ分のオーバー分は引かれますが、全トレードの平均をとりますと、トレード日記側の同時逆指値検証でも分かりますとおり極端な数値にはなっていないとは思っています。
あとは資金量の問題となりまして、たとえば資金100万と500万だと500万の方が有利です。
といいますのも、500万の方がどうしても仕掛けられる銘柄が多いためですね〜苦笑
100万だと3銘柄、500万だと10銘柄といった感じで、
低資金ファイルの成績は引く銘柄によって結構ばらついてしまう形になります。
確率の観点でも、試行回数が多いほど戦略本来の実力と結果が近づくのが早いとは考えられますため、
低資金ファイルほど、結果が本来のものに近づくには日数を要するとは考えられるのかもしれませんね。
ランキングの上位であるスイングキュルLUの結果が抜けているのには変わりがないですが、
それ以外のところでいいますと、アベノミクス相場の恩恵が大きいとはいえ高資金ファイルですとどの買いも悪くないとは思っていたりします笑
…ちなみに売りはスイングキュルSUがいいです(ぇ
正直トレード日記側でも今年一番の稼ぎ頭はゴッドブレス2ですし、
個人的にも最も気に入っている戦略ですので、
今は資金移動中で一旦停止しておりましたが来週からまた主力として再稼働します笑
(停止したのはあくまで同時逆指値検証で各証券会社に分散している資金をまとめるという目的のためだけです笑)
結局のところ、戦略の成績は使う資金ファイルによっても結構差が出ます。
そのため、もし「パフォーマンスが落ちたのでは?」と感じられた際には、
・バックテスト段階の期待値の確認
・低資金ファイルと高資金ファイルの成績の比較
を行われるといいのではないでしょうか?
特に、「低資金ファイルでは結果がばらつく場合がある」と覚えておかれるといいのではないかと思っていますね〜。
あと、ライブスター用のUWSCの注文コードを変更しましたので以下に掲載させていただきます。
次はIFD注文に対応させる予定です汗
■更新箇所
・セッションが切れた際の処理への対応を追加
・受付時間外のエラー処理を追加
・シェルでオブジェクトが取得できない際の不具合を解消
■UWSC側(Dドライブ直下に「UWSC」フォルダを作り、その中にEXE化したorder.exeを保存)
----------------------------------------------------
Public LOGINURL = "https://lv01.live-sec.co.jp/webbroker3/44/i/WEB3Index.jsp?aa_odrdv=2" // ライブスターログインURL
Public LOGFILE = "./log.txt" // ログファイルへのパス
Public CONFIGFILE = "./config.txt" // 設定ファイルへのパス
Public IE = 0 // IEオブジェクト用
Public SLEEPTIME // 画面遷移時の休止時間
Public CHANGESG // 信用建禁止銘柄の場合現物で発注する場合:1 しない場合
Public TEST // テストの場合1 実際に発注する場合0
// 設定ファイル読み込み
fid = FOPEN(CONFIGFILE,F_READ)
SLEEPTIME = getNumber(FGET(fid, 1))*0.1
CHANGESG = getNumber(FGET(fid, 2))
TEST = getNumber(FGET(fid, 3))
FCLOSE(fid)
//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]: 逆指値
//PARAM_STR[12]: 注文ID
// IEのウィンドウが開いているかどうかチェック
flg = 0
Obj_Shell = CreateOleObj("Shell.Application")
for i = 0 to Obj_Shell.Windows.Count - 1
Obj = Obj_Shell.Windows.Item(i)
Try
ifB Obj > 0 and pos("iexplore.exe", Obj.Fullname) > 0
IE = Obj
IE.visible = True
flg = flg + 1
BREAK
Endif
Except
EndTry
NEXT
// IEのウィンドウが開いていない場合
ifB flg = 0
// ログイン処理へ
login(PARAM_STR[1], PARAM_STR[2], 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], PARAM_STR[12])
// IEのウィンドウが開いている場合はメインメニューにいるかどうか調べる
else
// メインメニューにいるかどうか調べる
ifB pos("メインメニュー",IE.document.body.innerText)
// ログイン中は何もしない
else
// ウィンドウを閉じてからログイン処理へ
IE.quit
login(PARAM_STR[1], PARAM_STR[2], 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], PARAM_STR[12])
Endif
Endif
order(PARAM_STR[1], PARAM_STR[2], 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], PARAM_STR[12])
//■数字を取得
Function getNumber(str)
Dim regex = CREATEOLEOBJ("VBScript.RegExp")
WITH regex
.Pattern = "\D" // 数字以外の文字に一致
.Global = TRUE // 全部が対象
str2 = .Replace(str, "") // 一致した文字を""に置き換える
ENDWITH
Result = str2
Fend
//■日付取得
Function getDateStr()
GETTIME()
Result = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2
Fend
//■指値文字列取得
Function getSashineStr(ls, how, sashine)
Dim sashineStr = ""
ifB how = "N" OR how = "H" OR how = "G"
sashineStr = ""
else
sashineStr = sashine + "円"
Endif
Result = sashineStr
Fend
//■逆指値文字列取得
Function getSashineGStr(ls, how, sashineG)
Dim sashineGStr = ""
ifB how = "G" OR how = "J"
ifB ls = "S" // 信用売り(逆指値)
sashineGStr = sashineG + "円以下"
else // 買い(逆指値)
sashineGStr = sashineG + "円以上"
Endif
else
sashineGStr = ""
Endif
Result = sashineGStr
Fend
//■スリープ
Procedure ieSleep(IE)
REPEAT
SLEEP(SLEEPTIME)
UNTIL !IE.busy AND IE.readystate=4
Fend
//■エラー時の処理
Procedure error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, ok, msg, oid)
Dim fid = FOPEN(LOGFILE, F_READ or F_WRITE)
FPUT(fid, getDateStr() + "," + sgStr + "," + lgStr + "," + mCode + "," + mName + "," + howStr + "," + kabusu + "株" + "," + getSashineStr(ls, how, sashine) + "," + getSashineGStr(ls, how, sashineG) + "," + ok + "," + msg + "," + oid)
FCLOSE(fid)
IESETDATA(IE,True,"","7.戻る")
ieSleep(IE)
IELINK(IE,"メインメニューへ")
ieSleep(IE)
EXITEXIT
Fend
//■信用→現物変更時の処理
Procedure orderChange(sgStr, lgStr, howStr, loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, ok, msg, oid)
Dim fid = FOPEN(LOGFILE, F_READ or F_WRITE)
FPUT(fid, getDateStr() + "," + sgStr + "," + lgStr + "," + mCode + "," + mName + "," + howStr + "," + kabusu + "株" + "," + getSashineStr(ls, how, sashine) + "," + getSashineGStr(ls, how, sashineG) + "," + ok + "," + msg + "," + oid)
FCLOSE(fid)
IESETDATA(IE,True,"","7.戻る")
ieSleep(IE)
IELINK(IE,"メインメニューへ")
ieSleep(IE)
order(loginId, loginPw, orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
Fend
//■発注時の処理
Procedure complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, ok, msg, oid)
Dim fid = FOPEN(LOGFILE, F_READ or F_WRITE)
FPUT(fid, getDateStr() + "," + sgStr + "," + lgStr + "," + mCode + "," + mName + "," + howStr + "," + kabusu + "株" + "," + getSashineStr(ls, how, sashine) + "," + getSashineGStr(ls, how, sashineG) + "," + ok + "," + msg + "," + oid)
FCLOSE(fid)
IELINK(IE,"メインメニューへ")
ieSleep(IE)
EXITEXIT
Fend
//■ログイン
Procedure login(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
sgStr = "現物" // 現物or信用
lgStr = "買い" // 買いor売り
howStr = "成行" // 仕掛け方法
ifB sg = "S"
sgStr = "信用" // 信用
ifB ls = "S" // 信用売り
lgStr = "売り" // 売り
Endif
Endif
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)
// 該当銘柄が存在しない場合
ifB pos("必須入力です",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "ログインID/パスワード未入力", oid)
elseif pos("正しくありません",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "ログインID/パスワードエラー", oid)
elseif pos("エラーが発生",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "ログインロック", oid)
Endif
IELINK(IE,"メインメニューへ")
ieSleep(IE)
Fend
//■発注
Procedure order(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
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)
// セッションが切れた場合
ifB pos("ログアウトされました",IE.document.body.innerText)
IE.quit
login(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
order(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
Endif
// 新規売をクリック
IELINK(IE,"新規売")
ieSleep(IE)
else // 信用買い
// 信用取引をクリック
IELINK(IE,"信用取引")
ieSleep(IE)
// セッションが切れた場合
ifB pos("ログアウトされました",IE.document.body.innerText)
IE.quit
login(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
order(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
Endif
// 新規買をクリック
IELINK(IE,"新規買")
ieSleep(IE)
Endif
else // 現物買い
// 株式現物をクリック
IELINK(IE,"株式現物")
ieSleep(IE)
// セッションが切れた場合
ifB pos("ログアウトされました",IE.document.body.innerText)
IE.quit
login(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
order(loginId, loginPw, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, oid)
Endif
// 買付をクリック
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, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "該当銘柄なし", oid)
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, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "注文時間外", oid)
elseif pos("正しくありません",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "売買単位エラー", oid)
elseif pos("不足しています",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "余力不足", oid)
elseif pos("超えています",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "値幅制限エラー", oid)
elseif pos("抵触",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "アップティックルール規制", oid)
elseif pos("受付時間外",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "受付時間外", oid)
elseif pos("制限されています",IE.document.body.innerText)
ifB sg = "S" AND ls = "L" AND CHANGESG = 1 // 現物で発注
orderChange(sgStr, lgStr, howStr, loginId, loginPw, orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用規制銘柄", oid)
else
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用規制銘柄", oid)
Endif
elseif pos("できません",IE.document.body.innerText)
ifB sg = "S" AND ls = "L" AND CHANGESG = 1 // 現物で発注
orderChange(sgStr, lgStr, howStr, loginId, loginPw, orderPw, "G", ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用不可", oid)
else
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "信用不可", oid)
Endif
Endif
// 発注
IESETDATA(IE,orderPw,"aa_pw")
ifB TEST = 0 // 実際に発注する場合
IESETDATA(IE,True,"","1.実行")
ieSleep(IE)
ifB pos("正しくありません",IE.document.body.innerText)
error(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "×", "取引パスワードエラー", oid)
Endif
complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "○", "発注完了", oid)
else // テストの場合
complete(sgStr, lgStr, howStr, orderPw, sg, ls, mCode, mName, how, kabusu, sashine, sashineG, "○", "発注完了(テスト)", oid)
Endif
Fend
----------------------------------------------------
■設定ファイル(Dドライブ直下に「UWSC」フォルダを作り、その中にconfig.txtという名前で保存)
----------------------------------------------------
SLEEPTIME = 1 // 画面遷移時の休止時間
CHANGESG = 1 // 信用建禁止銘柄を現物で発注する場合1 しない場合0(半角)
TEST = 1 // テストの場合1 実際に発注する場合0(半角)
----------------------------------------------------
■コマンドプロンプト側
----------------------------------------------------
"D:\UWSC\order.exe" "LS" "証券会社ログインID" "証券会社ログインパスワード" "証券会社取引パスワード" "G" "L" "4755" "楽天" "G" "100" "1101" "1102" "12345"
----------------------------------------------------
前々記事:UWSCでイザナミを自動的に操作する(1)
前の記事:UWSCでイザナミを自動的に操作する(2)
今の記事:株の自動売買ツールを作る(12)
次の記事:UWSCでイザナミを自動的に操作する(3)
次々記事:UWSCでイザナミを自動的に操作する(4)