ブログジャンル

にほんブログ村 為替ブログ 100通貨単位・1000通貨単位へ
にほんブログ村の為替ブログランキングに参加中です。応援よろしくお願いいたします♪

検索フォーム


カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


リンク


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

マネーパートナーズFXnanoでリピート注文に挑戦!その1

こんにちわ!!

大変、お待たせ致しました。
本日よりマネパで使えるリピート注文ができるVBAを公開していきたいと思います。
8/19に「マネパ対応!リピート注文ができるVBA!!」と紹介してかなり日にちが経過してしまいましたね。
すみません^^;

このVBAはくるくるワイドのショートトラップを自動的にこなすことを目的に作っています。
くるくるワイドをご存知でない方はこちらからどうぞ。本家サイトへアクセスします。


コードが長いのでいつものように分割してお届けします。
多分、5回ほど記事を書くことになりそうです。
ちなみに全部のコードが揃わないと動きませんのでご了承ください。

全てのコードが入ったエクセルファイルのダウンロード先は最後の記事にて紹介致しますね。


今日、ご紹介するコードは一番始めに動作するものです。
全体の流れは下記のようになります。


0.注文表を作成する&手動でマネパにログインする
1.マネパの取引画面(ホーム)を表示する
2.本日の必要証拠金を取得する
3.約定照会(検索)をする
4.検索結果をエクセルシート(約定照会)に出力する


以上です。
基本的には約定照会の結果を一定の周期で確認し、決済注文が出たときにリピート注文するようになります。
んで、注意点がありまして今回のVBAはリピート注文する際にマネパの注文番号を使用しており、この番号がないとリピート注文ができません。
20110829-VBA7


このVBAを使って新規注文をした際は注文番号を管理しますが、過去注文した分で注文番号が管理されていないものは一度エクセルに入れる必要がありますので注意してください。
一応、自動で注文番号を読み込む機能も後ほど追加する予定です。



では、まずは注文表を作成してみましょう!

現在、IF-DONE注文のみ対応しています。
注文パターンという項目がありますが、現在は使えませんのでご了承ください。
内容は前回とほとんど変わっていませんね^^;


ショートトラップを仕掛けたい注文を作成します。
通貨ペア・売買・数量・注文レート・刻み幅・刻み幅B・有効期限を指定してください。
20110829-VBA


指定していくと自動的に注文表が出来ていくはずです。
20110829-VBA2
左側(A-Iセル)は新規注文分。
右側(K-Qセル)は(IF-DONE2次注文)決済注文分となります。


私は豪ドルのみしか取引しませんので、この表で対応できますが、
両建てや多通貨でくるくるワイドをする方は注文表のセルを直接書き換えして使用してください。

注文表が作成できたら、注文内容の確認を必ずお願いします。



次にIEのブラウザを起動させ、手動にてマネパにログインしてください。
(第10回 自動売買用プログラム - for ExcelVBA の ■プログラムを実行する前にブラウザを準備する必要がある。を参考にしてください。)
20110829-VBA3


んで、パートナーズFXnanoの「WEBでのお取引」をクリックし、取引画面まで進みます。
20110829-VBA4


このとき取引画面のほうは新しくブラウザが立ち上がって表示されたと思いますので、こちらのほうのみ一旦閉じます。
タブブラウザは使っていないので分かりません(><)
20110829-VBA5
この作業をしないと、VBAを起動したときにログイン状態を維持できないんです^^;


そして、エクセルの注文表シートの「実行ボタン」を押すとVBAが起動します。
20110829-VBA6


すると全体の流れで紹介したように1から4番までの処理が始まります。
この処理が終われば、次のコード(MP_Repeat_order2)へと続きます。

次回は「約定照会を書き出した後、決済注文があるか調べる。」を紹介いたします。


あっ、言い忘れていましたが、約定照会を参照する周期は5分で1サイクルとなっており、このVBAではリアルタイムに注文処理できません。予めご了承ください。


それでは、追記にコードを紹介してお別れしたいと思います。
さようなら~♪




-------------------- ここから --------------------
'2011/08/29 「マネーパートナーズFXnanoでリピート注文に挑戦!」

'ちょっとコードが多くなり過ぎて、自分でも混乱しています。
'ごちゃごちゃなコードや変なコメントがありますが、許してください。
'参考(引用):三流君VBAで楽しくプログラミング(http://www.ken3.org/vba/)


'1番目のコード
'約定照会のページを参照し、決済注文が出たか調べるコードです。
'現在は5分周期で1サイクルとなっております。リアルタイムには対応していません。
'マネパの取引画面(ホーム)→本日の必要証拠金→約定照会(検索)→検索結果をエクセルシートに出力 という流れになります。

Sub MP_Repeat_order1()

'プログラム停止用
fStop = False

'IE起動
Dim objIE As Object 'IE用の変数を定義します。
Set objIE = CreateObject("InternetExplorer.Application") 'IE用のオブジェクトを作成します。
objIE.Visible = True 'IEのウィンドウをTrueで可視状態にします。 Falseなら見えません。

'目的のページのURLを指定し、開きます。
objIE.Navigate "https://trade2.moneypartners.co.jp/fxcwebpresen/MainFrame.do"

'ページの表示完了を待ちます。
Call IE_Wait2(objIE)

'フレーム処理に使うドキュメント類
Dim objFRAME As FramesCollection
Dim objDOC As HTMLDocument
Dim objFDOC As Object
Dim kaisu As Long '約定照会を参照した回数

Set objFRAME = objIE.document.frames
kaisu = 1

'TABLEタグの処理用
Dim objTAG As Object
Dim strURL As String
Dim x As Integer, y As Integer, z As Integer
Dim objTableItem As Object 'TABLE内のITEM検索用
Dim strTAGNAME As String 'タグの名前保存用



'***** 本日の必要証拠金を調べる。 *****
'発注の際、注文にかかる証拠金を計算し、取引余力が残っているか確認するときに使います。

For Each objTAG In objIE.document.frames("main").document.body.all
'TABLEのタグを探す
If objTAG.tagName = "TABLE" Then
'TABLEの中、テキスト文字で「通貨ペア」があるか、子TABLEは無しかをチェックする。
If InStr(objTAG.innerText, "通貨ペア") > 0 _
And InStr(objTAG.innerHTML, "TABLE") = 0 Then 'タグ有り、無しか。
Worksheets("本日の必要証拠金").Activate 'エクセルのシートを指定し、選択する。
Range("1:100").Delete 'セルのデータを削除する。

y = 0 '行カウンタの初期化
'テーブル内のITEMでループする
For Each objTableItem In objTAG.all
strTAGNAME = objTableItem.tagName 'テーブル、タグ名を代入。
If strTAGNAME = "TR" Then
y = y + 1 '行カウンタを+1
x = 1 '列カウンタを1(左端にする)
End If
'↓THもセットするように変更 TD or THの時
If strTAGNAME = "TD" Or strTAGNAME = "TH" Then
'テキストデータをセットする
Cells(y, x) = objTableItem.innerText
x = x + 1 '列カウンタを+1(次にする)
End If
Next
End If
End If
Next

'***** 本日の必要証拠金を調べる。 *****



'***** 約定照会で決済注文があるか調べる。 *****
'誰かに止められるまで無限ループします(たまに自分勝手に止まることもありますw)

Do Until kaisu < 1

'プログラム停止用コード
DoEvents
If fStop = True Then
MsgBox "処理が中断されました"
Exit Do
End If



'***** 約定照会のページを開き、検索条件を入力する。 *****

Set objDOC = objFRAME("main").document
Do Until InStr(objDOC.URL, "ListExecution") > 0 '約定照会のページになるまで処理を続ける

Set objFDOC = objIE.document.frames("menu").document

'取引照会
For n = 0 To objFDOC.links.Length - 1
If objFDOC.links(n).href = "javascript:changeMenu(2)" Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n

'約定照会
For n = 0 To objFDOC.links.Length - 1
If InStr(objFDOC.links(n).href, "ListExecution.do") > 0 Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n

Loop

Sleep (1000)

'約定日(前)
'objIE.Document.frames("main").Document.all("executionFromDate").Value = "20110731"

'約定日(後)
'objIE.Document.frames("main").Document.all("executionToDate").Value = "20110731"

'売買(売りのみ表示する)
'objIE.document.frames("main").document.all("buySellType").Value = "BUY"

'注文区分(決済注文のみ表示する)
objIE.document.frames("main").document.all("isCloseOrder").Value = "true"

'検索ボタン
objIE.document.frames("main").document.all("doSearch").Click
Call IE_Wait2(objIE)

'***** 約定照会のページを開き、検索条件を入力する。 *****



'***** 約定照会の検索結果をエクセルに書き出す(本日の必要証拠金と同じコードです) *****

For Each objTAG In objIE.document.frames("main").document.body.all
If objTAG.tagName = "TABLE" Then
If InStr(objTAG.innerText, "注文番号") > 0 _
And InStr(objTAG.innerHTML, "TABLE") = 0 Then
Worksheets("約定照会").Activate
Range("2:100").ClearContents '注文番号は文字列で取り扱うので、数値や文字のみ削除して文字列の形式は残しておく。
y = 0
For Each objTableItem In objTAG.all
strTAGNAME = objTableItem.tagName
If strTAGNAME = "TR" Then
y = y + 1
x = 1
End If
If strTAGNAME = "TD" Or strTAGNAME = "TH" Then
Cells(y, x) = objTableItem.innerText
x = x + 1
End If
Next
End If
End If
Next

Range("1:1").Delete '余分な糖分(セル)はカットする

'***** 約定照会の検索結果をエクセルに書き出す(本日の必要証拠金と同じコードです) *****



Call MP_Repeat_order2 '約定照会を書き出した後、決済注文があるか調べる処理へ。
Call MP_auto_order(objIE) '発注(リピート注文)をする処理へ。



'建玉照会(特に必要はないが、自分がいつも見ているページなので開いておきますw)
For n = 0 To objFDOC.links.Length - 1
If InStr(objFDOC.links(n).href, "ListContract.do") > 0 Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n


'次の読み込みまで待機する(ESCキーでいつでも抜け出せるように小刻みでスリープをかけています)
For z = 1 To 300 '5分待ち(1秒*300回)
Sleep (1000) '1秒間のスリープ

DoEvents
If fStop = True Then
MsgBox "処理が中断されました"
Exit For
End If

Next z


Debug.Print "約定照会を取得中 " & kaisu & "周目"
kaisu = kaisu + 1


Loop

'***** 約定照会で決済注文があるか調べる。 *****



'処理が終わったので、IEを閉じます。
'objIE.Quit '.Quitで閉じる
'Set objIE = Nothing '使用したオブジェクト変数もキレイにする。



End Sub
-------------------- ここまで --------------------




スポンサーサイト

コメント

すごーい

公開はじまりましたか…わくわく
自分の考えていたのとまったく違う方法で面白いです。

>Range("1:1").Delete '余分な糖分(セル)はカットする

女性には嬉しい配慮ですw
「糖分」と「セル」というのを見て、セルライトを連想しました。

収支は種の力が大きいのでw
こちらは利率では負ける気がします。
2011-08-29 20:00 菜摘 #LjveDjGg URL [ 編集 ]

わ~い

毎日、公開を楽しみにしてました

VBAってよくわからないので、基本的なことをこれからお勉強して、使わせていただきます

くるくるワイド&nano寅リピ&坊主VBAで
行けそうな気がする
2011-08-29 23:36 優夢 #Ba2mBPDA URL [ 編集 ]

Re: すごーい

コード書くと個性が出てしまいますよね^^;
自分の場合、後のことは考えず一番やりやすい方法をとっているので、後々大変なことになりそうです。

セルライトですか、全く考えてもいませんでした。
確かに連想できますねw


種の力(複利の力)は凄いですよね。
FXやり始めて、節約ができるようになった気がしますw
2011-09-02 14:54 ヒゲ☆坊主 #mQop/nM. URL [ 編集 ]

Re: わ~い

はじめまして!
コメントありがとうございます♪

坊主VBAが役に立つといいのですが^^;


VBAは私もよく理解できていないので、一緒に頑張っていきましょう!!
2011-09-02 14:57 ヒゲ☆坊主 #mQop/nM. URL [ 編集 ]

コメントの投稿



管理者にだけ表示を許可する


トラックバック

http://fxbouz2011.blog67.fc2.com/tb.php/64-7243eedc

 | ホーム | 


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。