ブログジャンル

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

検索フォーム


カレンダー

09 | 2017/10 | 11
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でリピート注文に挑戦!その3

おはようございます♪
珍しく3日連続の更新です^^;
今日は全国で雨が降るでしょうw

本日は「注文表で発注予定となっている注文を発注する」を紹介いたします。
これは以前紹介した一括注文のコード MP_auto_order(objIE) とほとんど一緒です。
変更があった点は、、、


1.証拠金が足りない場合でも一定時間経過後に再度チャレンジするようになりました。
2.発注時に注文番号を取得するようになりました。


2番はすでにご存知だと思います。
1番はずっと自分が悩まされていたエラーでしたが、やっと対応できましたw

発注をかける際、注文に必要な証拠金を計算し、取引余力を調べてお金が足りているか確認します。
もし、足りなければ1分待ってから再度注文を試みます。それでも通られければ、また注文します。諦めません、発注できるまでは!!
こんな機能、貧乏な私にしか必要ないような気がしますがw


それでは、コードの流れです。


1.IEのデータを引き継ぐ
2.注文表より発注予定を探す
3.注文画面を開く
4.注文内容を入力する
5.取引余力を調べる
6.発注する
7.注文番号をエクセルに書き出す


といった感じになります。
まあ、目新しいものはないので説明を控えたいと思います。(コードの使いまわしばっかりしているので・・・)

あまり参考にならないかもしれませんが、ベースにしたものは「マネーパートナーズFXnanoで一括注文に挑戦!」で紹介したものになります。


次のコードは MP_Repeat_order3 ですね。
ここでは「新規注文後、注文番号を取得するための処理。」を行います。


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



-------------------- ここから --------------------
'2011/08/29 「注文表で発注予定となっている注文を発注する」

'3番目のコード
'前回の一括注文のコードから変更となった点があります。
'1つ目は「証拠金が足りない場合でも一定時間経過後に再度チャレンジするようになりました。」
'2つ目は発注時に注文番号を取得するようになりました。
'IEのデータを引き継ぐ→注文表より発注予定を探す→注文画面を開く→注文内容を入力する→取引余力を調べる→発注→注文番号をエクセルに書き出す という流れになります。

Sub MP_auto_order(ByRef objIE As Object)

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

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

'フレーム処理に使うドキュメント類
Dim objFRAME As FramesCollection
Dim objDOC As HTMLDocument

Set objFRAME = objIE.document.frames

'注文表を読み取り、注文を実行していく処理。
Dim yCNT As Integer 'セルの行数
Dim objFDOC As Object
Dim errorORDER As String

Worksheets("注文表").Activate



For yCNT = 11 To 310 '注文表の行数を設定
errorORDER = "on"

If Trim(Cells(yCNT, 1)) = "発注予定" Then '状況が「発注予定」となっている注文のみ処理を行う

Set objDOC = objFRAME("main").document
Do Until errorORDER = "off" '発注が完了するまで処理を続ける
'***** 注文画面(IF-DONE)を表示する *****
Do Until InStr(objDOC.URL, "doIfDoneOrder") > 0 'IF-DONE注文のページになるまで処理を続ける

'IF-DONEのページへ移動する。
Set objFDOC = objIE.document.frames("menu").document

'取引注文
For n = 0 To objFDOC.links.Length - 1
If objFDOC.links(n).href = "javascript:changeMenu(1)" 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, "EnterStreamingNettingOrder.do") > 0 Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n

'IF-DONE(新規 / 決済注文【リーブオーダー】)
Set objFDOC = objIE.document.frames("main").document
For n = 0 To objFDOC.links.Length - 1
If InStr(objFDOC.links(n).href, "doIfDoneOrder") > 0 Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n
Set objDOC = objFRAME("main").document

Loop
'***** 注文画面(IF-DONE)を表示する *****


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


'***** IF-DONE1次注文を入力する *****
'通貨ペア
objDOC.forms("LeaveOrderForm").Item("productId1").Value = "SPOT_" & Cells(yCNT, "C")

'注文区分
If Trim(Cells(yCNT, "D")) = "新規" Then
objDOC.forms("LeaveOrderForm").Item("closeOrder1").Value = "false"
ElseIf Trim(Cells(yCNT, "E")) = "決済" Then
objDOC.forms("LeaveOrderForm").Item("closeOrder1").Value = "true"
Else
MsgBox "注文区分を選択してください"
End If

'売買
If Trim(Cells(yCNT, "E")) = "売" Then
objDOC.forms("LeaveOrderForm").Item("buySellType1").Value = "SELL"
ElseIf Trim(Cells(yCNT, "E")) = "買" Then
objDOC.forms("LeaveOrderForm").Item("buySellType1").Value = "BUY"
Else
MsgBox "売買を選択してください"
End If

'数量
objDOC.forms("LeaveOrderForm").Item("orderAmount1").Value = Cells(yCNT, "F")

'執行区分
If Trim(Cells(yCNT, "G")) = "指値" Then
objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "LIMIT"
ElseIf Trim(Cells(yCNT, "G")) = "逆指値" Then
objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "STOP"
Else
MsgBox "執行区分を選択してください"
End If

'注文レート
objDOC.forms("LeaveOrderForm").Item("orderPrice1").Value = Cells(yCNT, "H")

'有効期限
If Trim(Cells(yCNT, "I")) = "DAY" Then
objDOC.forms("LeaveOrderForm").Item("expirationType").Value = "DAY"
ElseIf Trim(Cells(yCNT, "I")) = "WEEK" Then
objDOC.forms("LeaveOrderForm").Item("expirationType").Value = "WEEK"
ElseIf Trim(Cells(yCNT, "I")) = "GTC" Then
objDOC.forms("LeaveOrderForm").Item("expirationType").Value = "GTC"
Else
MsgBox "有効期限を選択してください"
End If

'スクリプトを有効にする
objDOC.forms("LeaveOrderForm").Item("productId1").onchange
objDOC.forms("LeaveOrderForm").Item("closeOrder1").onchange
objDOC.forms("LeaveOrderForm").Item("buySellType1").onchange
objDOC.forms("LeaveOrderForm").Item("expirationType").onchange

'2次注文簡易入力ボタンをクリック
objDOC.forms("LeaveOrderForm").Item("autoSecondaryOrderBtn").Click
Call IE_Wait2(objIE)
'***** IF-DONE1次注文を入力する *****


'***** IF-DONE2次注文を入力する *****
'執行区分
If Trim(Cells(yCNT, "N")) = "指値" Then
objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "LIMIT"
ElseIf Trim(Cells(yCNT, "N")) = "逆指値" Then
objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "STOP"
Else
MsgBox "執行区分を選択してください"
End If

'注文レート
objDOC.forms("LeaveOrderForm").Item("orderPrice2").Value = Cells(yCNT, "O")

'有効期限
If Trim(Cells(yCNT, "P")) = "DAY" Then
objDOC.forms("LeaveOrderForm").Item("expirationType2").Value = "DAY"
ElseIf Trim(Cells(yCNT, "P")) = "WEEK" Then
objDOC.forms("LeaveOrderForm").Item("expirationType2").Value = "WEEK"
ElseIf Trim(Cells(yCNT, "P")) = "GTC" Then
objDOC.forms("LeaveOrderForm").Item("expirationType2").Value = "GTC"
Else
MsgBox "有効期限を選択してください"
End If

'確認画面ボタンを押す
objDOC.forms("LeaveOrderForm").Item("confirmButton").Click
Call IE_Wait2(objIE)
'***** IF-DONE2次注文を入力する *****


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


'***** 執行区分エラーが出た場合の処理 *****
'執行区分エラーのため、内容を変更する。失敗した場合は注文が通るまで処理を続ける。
Dim strTEXT As String
strTEXT = objDOC.body.innerText '変数に代入高い注文レートを入れる

Do Until InStr(strTEXT, "レートチェック") = 0 '執行区分エラーがなくなるまで処理を続ける
If InStr(strTEXT, "IF-DONE1次注文") > 0 Then

If objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "STOP" Then
objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "LIMIT"
ElseIf objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "LIMIT" Then
objDOC.forms("LeaveOrderForm").Item("orderType1").Value = "STOP"
End If

objDOC.forms("LeaveOrderForm").Item("confirmButton").Click
Call IE_Wait2(objIE)
Debug.Print "IF-DONE1次注文エラー"


ElseIf InStr(strTEXT, "IF-DONE2次注文") > 0 Then

If objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "STOP" Then
objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "LIMIT"
ElseIf objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "LIMIT" Then
objDOC.forms("LeaveOrderForm").Item("orderType2").Value = "STOP"
End If

objDOC.forms("LeaveOrderForm").Item("confirmButton").Click
Call IE_Wait2(objIE)
Debug.Print "IF-DONE2次注文エラー"


End If

strTEXT = objDOC.body.innerText
Sleep (1000)

Loop
'***** 執行区分エラーが出た場合の処理 *****


'***** 注文を実行する前に取引余力を調べ、発注分の証拠金が足りているか計算する。足りない場合は時間を置いて再度実行する。 *****
'発注する分の証拠金を計算する
For n = 1 To Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count
If Worksheets("本日の必要証拠金").Cells(n, "A") = Worksheets("注文表").Cells(yCNT, "C") Then
Worksheets("本日の必要証拠金").Cells(n, "E") = Worksheets("本日の必要証拠金").Cells(n, "C") * Worksheets("注文表").Cells(yCNT, "F")
Exit For
End If
Next n


'取引余力を取得する
Worksheets("本日の必要証拠金").Cells(1, "G") = "取引余力"
Set objTAG = objIE.document.frames("header").document.all.tags("SPAN")
Worksheets("本日の必要証拠金").Cells(2, "G") = objTAG(3).innerText


'注文を実行する処理
If Worksheets("本日の必要証拠金").Cells(n, "E") < Worksheets("本日の必要証拠金").Cells(2, "G") Then
MsgBox "注文内容を確認の上、OKボタンを押してください。" & vbCrLf & "修正が必要な場合はページ上の「戻る」ボタンをクリックし、注文内容を修正してください。" & vbCrLf & "修正完了後はページ上の「確認画面へ」ボタンをクリックしてから、このメッセージボックスのOKボタンを押すと注文が実行されます。"
objDOC.forms("LeaveOrderForm").Item("orderButton").Click
Call IE_Wait2(objIE)
Else
Debug.Print "証拠金が足りません"
For n = 1 To 60
Sleep (1000)
DoEvents
If fStop = True Then
MsgBox "処理が中断されました"
Exit For
End If
Next n
End If
'***** 注文を実行する前に取引余力を調べ、発注分の証拠金が足りているか計算する。足りない場合は時間を置いて再度実行する。 *****


'***** 注文完了後はセルにコメントを入れ、注文番号を取得し、注文表シートに書き出す。 *****
'注文完了後の処理(一括注文表A列にコメントを入力する)
If InStr(objDOC.body.innerText, "ご注文を受付けました。") Then
Worksheets("注文表").Cells(yCNT, "A") = "発注済み"
Worksheets("注文表").Cells(yCNT, "Q") = ""
errorORDER = "off"

'注文照会のページへ移動する。
Set objFDOC = objIE.document.frames("main").document
For n = 0 To objFDOC.links.Length - 1
If InStr(objFDOC.links(n).href, "ListOrder") > 0 Then
objFDOC.links(n).Click
Call IE_Wait2(objIE)
Exit For
End If
Next n

'注文照会 - 先ほど注文した分の注文番号をエクセルに書き出す
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("1: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

Sleep (1000)
Range("1:1").Delete
Call MP_Repeat_order3
Worksheets("注文表").Activate


Else

Debug.Print "注文が正しく処理されませんでした。"
Sleep (1000)

End If
'***** 注文完了後はセルにコメントを入れ、注文番号を取得し、注文表シートに書き出す。 *****


Loop


Else
'Debug.Print "発注する注文はありませんでした"
End If


Next yCNT


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




スポンサーサイト

コメント

こんばんは。
 リンクされている菜摘さんのブログにもいってみました^^
 すんなり自分のモノにできておられるようで・・
 自分のふがいなさに落ち込みますが
 地道に頑張ります。
 ゆくゆくはアレンジできるようになりたいものです。
 ヒゲさんの仕掛けはずっとおなじままに設定されているのでしょうか?
2011-08-31 22:19 ねもどん #- URL編集 ]

自分でea作っているのですか?
凄いですね。

尊敬します。
2011-09-01 13:01 トレードしないで勝つ専業 #- URL編集 ]

Re: タイトルなし

返事が遅くなってすみません。

またVBAの動作チェックお願いしますね!
菜摘さん、凄いですよね!
私のコードなんて汚いので、分かりづらいはずなんですが・・・。
VBA一緒に頑張っていきましょう!


仕掛けは変更してますね。
ショートトラップは10pips刻みで20pips利食い中です。
取引量はそのときの余力によって変えており、基本300通貨で多くても500通貨くらいですね。
上昇トレンドが続くようなら、ロングのトラップを追加してみようかと検討中です。


お互い8月にはかなりの痛手を受けてしまいましたが、盛り返していきましょうね!!
2011-09-02 15:15 ヒゲ☆坊主 #mQop/nM. URL [ 編集 ]

Re: タイトルなし

コメントありがとうございます♪

自分は全然凄くないですよ!
くるくるワイドの生みの親、魚屋さんが凄すぎです^^;


ブログを見させて頂きましたが、素晴らしい成績ですよね!
私も早く同じ舞台に立てるようになりたいです!
2011-09-02 15:24 ヒゲ☆坊主 #mQop/nM. URL [ 編集 ]

コメントの投稿



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


トラックバック

http://fxbouz2011.blog67.fc2.com/tb.php/67-96ab7508

 | ホーム | 


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