スクリプト命令

自動売買用スクリプト
CSVファイルで設定する自動売買用スクリプト

開発用フォームテスト

開発用フォームテストで、スクリプトの動作を確認できます。

スクリプト命令

ProcessData.csvの証券会社「テスト」を例に解説します。

Check [名前1]
Check 開発用フォーム入力画面
[表示が完了するまで待つ秒数]分の間、IEの表示が完了するのを待ちます。表示完了後、[表示完了後の待機Ticks]分、念のために待ちます。
そして、[名前1]のテキストがIEに表示されているなら、次の処理に進みます。表示されていない場合、そのシグナル処理を中断します。
IEcheck
IEcheck
[表示が完了するまで待つ秒数]分の間、IEの表示が完了するのを待ちます。表示完了後、[表示完了後の待機Ticks]分、念のために待ちます。
画面が遷移出来なかった場合、そのシグナル処理を中断します。例えば、IEが閉じられていた場合などに、エラーになります。
原則、画面が遷移した後(例えばClickした後)は、CheckIEcheckを行い、表示が正しい状態にあるのを確認します。
EmailCheck
E-mailを受信し、売買中止キーワードの含まれている件名があったら、自動売買処理全体を中止します。タイマーもストップします。
Click [名前1]

Click 戻る
[名前1]のテキストのリンクをクリックします。

Click [名前1] [値1]

Click 戻る 1
[値1]に数字を指定すると、[値1]+1番目の[名前1]のテキストのリンクをクリックします。例では、1なので2つめの「戻る」をクリックします。

ClickNum [名前1]
ClickNum 1
[名前1]のIndex番号のリンクをクリックします。
ClickWait [名前1]

ClickWait クリック1
[名前1]のテキストのリンクをクリックし、その後IEcheckの処理を行います。ClickとIEcheckと2行に分けていたスクリプトを1行で行うことが出来ます。

ClickWait [名前1] [値1]

ClickWait 戻る 1
[値1]に数字を指定すると、[値1]+1番目の[名前1]のテキストのリンクをクリックします。例では、1なので2つめの「戻る」をクリックします。その後IEcheckの処理を行います。

Input [名前1] [値1]
Input fmInput1 <<Code>>
[名前1]のnameであるInputに、[値1]のテキストを入力します。
Mid [名前1] [値1] [名前2] [値2]
Mid <<変数A>> 4 現在値 13
[名前1]には変数を指定します。[名前2]のテキストの有る位置を仮にwordpositionとすると、Mid(IEのInnerText, wordposition + [値1], [値2])で計算した文字列を[名前1]の変数に代入します。
Mid2 [名前1] [値1] [名前2] [値2]

Ver 2.8以降に実装予定

Mid2 <<変数B>> 4 166 6
[名前1]には変数を指定します。[名前2]にはテキストの位置を数字で指定します。Mid(IEのInnerText, [名前2] + [値1], [値2])で計算した文字列を[名前1]の変数に代入します。
WordPosition [名前1]  [名前2] [値2]

Ver 2.8以降に実装予定

WordPosition <<変数B>>  現在値 1
[名前1]には変数を指定します。[名前2]には検索する文字列を指定します。[値2]には数字を指定し、([値2]+1)番目の文字列が検索されます。例えば、[値2]に、1を指定すると2番目の文字列(例では「現在値」)が検索されます。
IEのInnerTextの中で検索された文字列の開始位置が、[名前1]の変数に代入されます。見つからない場合は、0になります。

テストの例では、
WordPosition   <<変数B>>       現在値      1
Mid2           <<変数B>>   4   <<変数B>>   6

WordPositionで、2番目の「現在値」の文字列の位置が<<変数B>>に代入され、
Mid2で、<<変数B>>+4の位置から6文字を、<<変数B>>に代入します。

Val [名前1] [値1]
Val <<変数B>> <<変数A>>
[値1]のテキストから数字のみを返します。ただし途中で数字と「.」(ピリオド)以外の文字があると、そこまでの数字を返し[名前1]の変数に代入します。
VB.netのVal関数の処理で、Val([値1])を行っています。
Regex [名前1] [値1]
Regex <<変数B>> <<変数A>>
[名前1]には変数を指定します。[値1]のテキストから、- (ハイフン)、および . (ピリオド) 以外のすべての非英数文字を取り除いた文字列を返し、[名前1]の変数に代入します。
Cal [名前1] [値1] + [値2]
Cal <<変数C>> <<変数B>> + 100
[名前1]には変数を指定します。[値1]の数字と[値2]との数字を足して、[名前1]の変数に代入します。
Cal [名前1] [値1] - [値2]
Cal <<変数C>> <<変数B>> - 100
[名前1]には変数を指定します。[値1]の数字から[値2]の数字を引いて、[名前1]の変数に代入します。
Cal [名前1] [値1] * [値2]
Cal <<変数C>> <<変数B>> * 10
[名前1]には変数を指定します。[値1]の数字に[値2]の数字をかけて、[名前1]の変数に代入します。
Cal [名前1] [値1] / [値2]
Cal <<変数C>> <<変数B>> / 10
[名前1]には変数を指定します。[値1]の数字を[値2]の数字で割って、[名前1]の変数に代入します。
Cal [名前1] [値1] =
Cal <<変数C>> <<変数B>> =
[名前1]には変数を指定します。[値1]の数字を、[名前1]の変数に代入します。
Radio [名前1]  [名前2] [値2]
Radio FirstForm  Group1 B
[名前1]にはformのname、[名前2]には<input type="radio">のname、[値2]の<input type="radio">のvalueを指定します。一致するradioボタンをチェックします。
Select [名前1] [値1]
Select DropDown 選択肢2
[名前1]には<select>のname、[値1]には<select></select>で囲まれた中のテキストを指定します。一致する選択肢を選択します。
ver 2.7では、[名前1]の指定が有効になりません。最初にOptionで囲まれた文字と一致するのを選択します。次期バージョンで修正予定です。(2009-12-23)
Input_FormsNum [名前1]  [名前2] [値2]
Input_FormsNum 1  fmInput2 <<Name>>
[名前1]にはformのIndex番号、[名前2]には<input>のnameを指定します。一致するInputに[値2]を入力します。
Input_FormsNum_ItemNum [名前1]  [名前2] [値2]
Input_FormsNum_ItemNum 1  1 <<枚数>>
[名前1]にはformのIndex番号、[名前2]にはitemのIndex番号(この場合は、そのFORM内から数えて)を指定します。一致するInputに[値2]を入力します。
Radio_FormsNum [名前1]  [名前2] [値2]
Radio_FormsNum 1  Group2 B
[名前1]にはformのIndex番号、[名前2]には<input type="radio">のname、[値2]には<input type="radio">のvalueを指定します。一致するradioボタンをチェックします。
Radio_FormsNum_ItemNum [名前1]  [名前2]
Radio_FormsNum_ItemNum 1  7
[名前1]にはformのIndex番号、[名前2]にはitemのIndex番号(この場合は、そのFORM内から数えて)を指定します。一致するradioボタンをチェックします。
<<[項目]>>[種類]
Input order2 <<注文種類>>株注文種類
<<注文種類>>の後に続けて対応表.csv[種類]を指定すると、その[対応値]が代わりに利用されます。 例えば、このテストの場合、<<注文種類>>が"成行"なので<<注文種類>>株注文種類で"なりゆき"というテキストを返します。
Delay [名前1]
Delay 0:01:00
このシグナルの以降のスクリプト処理をスキップし、次のシグナルの処理を行います。全てのシグナルが処理された後、[名前1]で指定した時間が経過していたら、続きの処理を行います。
InputClick [名前1]
InputClick 送信
valueが[名前1]の<input>をクリックします。
InputClickNum [名前1] [値1]
InputClickNum 送信 1
[値1]番目(0からカウント)の、valueが[名前1]<input>をクリックします。
例えば、[開発用フォーム入力画面]には、
<input type="submit" name="送信" value="送信" />
<input TYPE="submit" VALUE="送信" />
の2つのvalueが[送信]のinputがあります。この場合、InputClickNum 送信 1では、2つめのinputをクリックすることになります。
AllData
開発用に、内部データをテキストファイルとして保存し表示します。マイ ドキュメント>Mtrading>AllDataListにテキストファイルが保存されます。
Log [名前1]
Log ログに表示
[名前1]をログに表示します。
LogRed [名前1]
LogRed ログに赤色で表示
[名前1]をログに赤字で表示します。
EmailSendLog
ログのデータをE-mailで送信します。
EmailSend [名前1] [値1]
EmailSend テスト株でエラー エラーが発生しました。
[名前1]を件名、[値1]を本文としてE-mailで送信します。
ClickName [名前1]
ClickName ACT_loginHome
nameが[名前1]のタグ(Inputなど)をクリックします。
Map_AreaNum [名前1] [値1]
Map_AreaNum tab_st 1
[名前1]には<map>のname、[値1]には<area>のIndex番号を指定します。
Call [名前1]
[名前1][処理]のスクリプトを呼び出します。呼び出した処理の後に、残りの処理が続きます。
Goto [名前1]
[名前1][処理]のスクリプトに移動します。
Exit
その銘柄のスクリプト処理を終了します。
Close
Ver 2.8で実装予定。
その銘柄のIEのウインドウを閉じます。
Navi  [値1]
ver 2.8で実装予定。
その銘柄のIEのウインドウで、[値1]のURLを表示します。

RangeCheck [名前1] [値1]  [値2]

ver 2.7で実装

RangeCheck RangeCheck>>G-2 3 4
RangeCheck RangeCheck>>G-2 3 4 TRUE
RangeCheck RangeCheck>>G-2 3 4  C:\Ticks2
RangeCheck RangeCheck>>G-2 3 4 TRUE C:\Ticks2

指定したセルの範囲の値が同じかどうかをチェックし、同じならエラーのメールを送ります。

[名前1]は、RangeCheck>>G-2 3 4のように、RangeCheck>>の直後に、>>M+1形式でセルを指定し、続けて、半角空白+行数+半角空白+列数のように指定します。
指定したセルの位置から、行数と列数の範囲のセルをチェックして、全て同じ場合、メールで「RangeCheck Error」のエラーを知らせるメールを送ります。

また、[値1]をTRUEにすると、タイマーをストップし、その後の処理をキャンセルします。

また、[値2]にフォルダのパスを設定すると、このRangeCheckエラーが発生した時に、CSV Data フォルダのパスを変更します。別の証券会社からティックやレートを収集しているなら、そのCSV Data フォルダに切り替えることが出来ます。

スクリプト設定例 スクリプト設定例
18005行にあるシグナルを実行する直前の画像 18005行にあるシグナルを実行する直前の画像

この例では、G-2は、その時点で自動売買処理を行うシグナルのある行の2行前のG列を示します。例えば、18005行のシグナルを実行する場合、G18003を示します。G18003から3行4列分のセル(G18003からJ18005)が同一であるかどうかをチェックします。画像では、全て「1」なのでエラーになります。

CSV Data フォルダ パス 切り替え 例

CSV Data フォルダ パス 切り替え 例

この例では、RangeCheckエラーが発生した時に、C:\Ticks2のフォルダに切り替えます。タイマーはストップしません。

Write [名前1] [値1]

ver 2.7で実装

Write A1  1
対象としているワークシートの[名前1]で指定したセルに[値1]を書き込みます。
この例では、「A1」セルに「1」を書き込みます。


CheckBox [名前1]  [名前2]

ver 2.8以降に実装予定

CheckBox FirstForm  CB2
  • [名前1]にはformのname
  • [名前2]には<input type="checkbox">のname
を指定します。一致するCheckBoxをチェックします。
また、[値1]にFALSEを指定すると、チェックをはずします。
CheckBox [名前1]  [名前2] [値2]
CheckBox FirstForm  CB4 B
  • [名前1]にはformのname
  • [名前2]には<input type="checkbox">のname
  • [値2]には<input type="checkbox">のvalue
を指定します。一致するCheckBoxをチェックします。
また、[値1]にFALSEを指定すると、チェックをはずします。
CheckBox_FormsNum [名前1]  [名前2]
CheckBox_FormsNum 1  CB6
  • [名前1]にはformのIndex番号
  • [名前2]には<input type="checkbox">のname
を指定します。一致するCheckBoxをチェックします。
また、[値1]にFALSEを指定すると、チェックをはずします。
CheckBox_FormsNum [名前1]  [名前2] [値2]
CheckBox_FormsNum 1  CB8 B
  • [名前1]にはformのIndex番号
  • [名前2]には<input type="checkbox">のname
  • [値2]には<input type="checkbox">のvalue
を指定します。一致するCheckBoxをチェックします。
また、[値1]にFALSEを指定すると、チェックをはずします。
CheckBox_FormsNum_ItemNum [名前1]  [名前2]
CheckBox_FormsNum_ItemNum 1  15
  • [名前1]にはformのIndex番号
  • [名前2]にはitemのIndex番号
を指定します。一致するCheckBoxをチェックします。
また、[値1]にFALSEを指定すると、チェックをはずします。

名前,値

Range>>M+1
>>M+1形式で、[名前1] [値1] [名前2] [値2]の値を指定できます。

スクリプト条件

(条件1a = 条件1b) and (条件2a = 条件2b) and (条件3a = 条件3b)

の条件を満たすとき、その行のスクリプトを実行します。

InnerText、InnerText除外

条件1a,2a,3aには、[InnerText]を指定できます。このInnerTextは、htmlの<body></body>で囲まれた範囲のタグを除くテキストを示します。このテキストに、条件1b,2b,3bで指定したテキストが含まれていれば、条件が満たされたと判断します。また、bodyで囲まれた範囲ですから、headで囲まれた範囲、例えば<title></title>の間のテキストは含まれません。逆に、[InnerText除外]は、指定したテキストが含まれていなければ、条件が満たされたと判断します。

Before、After

条件1a,2a,3aには、[Before] [After]を指定できます。条件1b,2b,3bで指定した時刻より、以前(Before)、以後(After)なら条件が満たされたと判断します。
例:条件1aAfter条件1bが「15:10」の場合、そのスクリプトを実行する段階のPCの時刻が15:10以後なら、実行されます。

<<>>で囲まれた文字

<<>>で囲まれた文字は、CSVファイルで設定した値が使われます。
名前1,値1,名前2,値2,条件1a,条件1b,条件2a,条件2b,条件3a,条件3bの項目で利用できます。

銘柄.csv

<<Name>>
<<Code>>
<<除数>>
<<注文数>>

証券会社.csv

<<Name>>
<<Target>>
<<URL>>
<<ID>>
<<ID2>>
<<LoginPassword>>
<<DealingPassword>>

注文対応表.csv

<<対象>>
<<日時>>
<<シグナル数字>>
<<シグナル名>>
<<注文>>
<<注文形態>>
<<売買>>
<<枚数>>廃止しました
<<指値>>
<<注文種類>>
<<執行条件>>

ProcessData.csv

<<順番>>
<<処理タイプ>>
<<名前1>>
<<値1>>
<<名前2>>
<<値2>>
<<フレーム>>
<<条件1a>>
<<条件1b>>
<<条件2a>>
<<条件2b>>
<<条件3a>>
<<条件3b>>
<<予備>> 予備は今後変更する可能性があります。

<<変数A>>
<<変数B>>
<<変数C>>

<<変数A>> <<変数B>> <<変数C>>には、Mid,Val,Regex,Calのスクリプト命令で計算結果などを代入できます。

制限

以下の制限があります。

  • htmlにframeを利用した画面を操作することはできません。
  • Flashを操作することはできません。