ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード

忙しいです。ネタもないし・・・

2013-01-13

ステータスバーの価格を拡大表示する。

謹みて 新年を賀し 申し上げます。<(_ _)>



735 :Trader@Live!:2013/01/12(土) 17:54:40.57 ID:YhLpHkcT

チャートの各ローソク足にマウスポインタ当てると

始値終値高値安値

が表示されると思うんですけど

この数値をチャートの四隅あたりに表示できるインジってありませんか?

何かシンプルなインジ程全然見つからなくて

・・・という訳で、早速作ってみました。

f:id:fai_fx:20130113092442p:image

http://ux.getuploader.com/fai_fx/download/338/MT4StatusView.zip

AutoHotkeyによるGUIアプリで、ステータスバーの内容を200ミリ秒間隔で読み取って表示させているだけです。



ウィンドウ枠も邪魔かなと、消してみたモノが下記です。

f:id:fai_fx:20130113092441p:image

http://ux.getuploader.com/fai_fx/download/339/MT4StatusView1.1.zip

タイトルバー用のウィンドウと、枠なしの表示ウィンドウを2つ並べています。

2011-11-25

MT4ショートカットキー設定ツール Accela2e の64bitOS対応。

以前の記事で紹介した、超絶便利な MT4ショートカットキー設定ツール Accela2e ですが、Windows7 64bit + AutoHotkey_L(32bit or 64bit のUnicode版) + Accela2e.ahk の組み合わせで一部の機能が動かないことが判明しました。

Accela2e を常駐しておくと、Win + E のキーで、experts フォルダを開くことができます。Win + B で MT4 を再起動できます。

ところが、上記組み合わせでは以下のエラーが発生します。

f:id:fai_fx:20111125002104j:image


解決策の1つは、AutoHotkey_L のインストール時に ANSI(32bit)を選ぶか、AutoHotkey Basic をインストールします。これで従来通り機能します。

f:id:fai_fx:20111125002103j:image



せっかく 64bitOSを使うのですから、AutoHotkey も 64bit (..というかUnicode版) にしたいという人は以下の修正をしてください。

 CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)

↑この一行を見つけて、↓以下のように書き換えます。

  if(A_IsUnicode){
    CallResult := DllCall("Psapi.dll\GetModuleFileNameExW", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
  }else{
    CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
  }

ANSI版とUnicode版で呼び出す関数名が少し違う..というのが原因でした...orz

2011-07-21

accela2eに自動スクロールやオフラインチャートのON/OFFを追加する。

L 2011/07/20 08:24

accela2eのツール いつもお世話になっております。

実は、自分で拡張したい場合はどうしたらよいのでしょうか。

自動スクロールのON OFF

オフラインチャートのON OFF

のショートカットを作成したいのですが

イマイチわからなくて、、、お力を貸してください><

accela2e.exe は実行ファイルなので拡張できないので廃棄するとして、accela2e.ahk の書き換えを試みることになります。

accela2e.ahk の構造は大雑把に書くと↓

#IfWinActive ahk_class MetaQuotes::MetaTrader::4.00
;MT4ウィンドウに限定
;領域A
;


#IfWinActive
;全てのウィンドウに適用
;領域B
;

こんな感じで、領域Aの部分では、MT4がアクティブな時にだけ処理させたい内容を書きます。領域BはMT4が非アクティブでも動作させたい処理を書きます。(例えば、複数のMT4を切り替えるとか、MT4を隠す処理などです。)



自動スクロールのON/OFFは、昔の記事を見ると、33017 をPOSTすればよいらしいので、

A::PostMessage, 0x111,33017,0 ;AutoScroll

↑こんな一行を追加すればAキーを押すと反応します。

但し、Aキーに既に他の動作を割当てているとNGなので、全体をよく確認してコメントアウトしておく必要があります。

;A::Send !a ;←既に Aキーに割り当てがあるので、先頭にセミコロンをつけて一旦コメントアウト

!A::PostMessage, 0x111,33017,0   ;Alt +A
^A::PostMessage, 0x111,33017,0   ;Ctrl+A
#A::PostMessage, 0x111,33017,0   ;Win +A

↑AltやCtrl を組み合わせるなら先頭に修飾文字をつけます。


オフラインチャートのON/OFFは、分かりやすい方法としては、それを実現するキー操作を探すのが簡単です。

1. F8

2. Shift+TAB

3. 右矢印(→)

4. TAB

5. SPACE

6. ENTER

↑このキー操作を順番にすると、大体うまく切り替わるでしょう?

(2,3の操作は、色の設定タブがアクティブになっていた場合の処置..

#s::
Send {F8}+{Tab}{Right}{Tab}{Space}{Enter}
return

↑AHKで同じキー操作をするには上記のように書きます。Win+S への割り当て例ですけど、割り当ては好みで変えてください。

f:id:fai_fx:20110721140231p:image

↑これは、AVAのCFD口座のコーヒー1時間足チャートですが、、これがオフラインチャートON(=更新されない状態)なのかどうかは簡単に判別できます。(分からない人はよくよく観察してみてください..^^;



いろいろと恥ずかしいので、しばらくはコーヒートレーダーのフリをしておく。。

2011-04-08

MT4だけを切り替えてアクティブにする。

頑張れとか復興とかって、多分、今言うことじゃない。」のエントリーが微妙に重い..。今は復興を願いつつ淡々とやるべきことをこなすしかないのかな・・・。






それはさておき、、某所で質問があったので書いてみたコードです。Accela.ahk に追記すると動作します。

Win + G で、起動中のMT4を切り替えてアクティブにします。Alt + TAB では起動中の全てのアプリを切り替えるので、MT4以外に多数のアプリを起動していると不便になるのでしょう..。

#g::

GroupAdd, MTWW, ahk_class MetaQuotes::MetaTrader::4.00

GroupActivate,MTWW

return


MT4 のみを一括でクローズしたい場合は、以下のように追記すると、Win + F で終了できるようになります。

#f::

GroupAdd, MTWW, ahk_class MetaQuotes::MetaTrader::4.00

GroupClose,MTWW,A

return

※ Win + F で切り替え、Win + G で終了 のキー割り当てをすると、G を押すつもりで F に触れてしまうと悲惨なので、適宜変更してください。。orz

2010-09-12

(続)「システム異常の詳細」からMT4自動復帰のVPS対応。

本気で何かに集中したい時って、やはり寝ても醒めても1つの物事を考え続けた方が良い結果に繋がります。そんな訳で一週間、本業に集中してみました。とりあえず、昨日無事仮納品を済ませて、ほっとしてます。とは言うものの、「一難去ってまた一難 でもみんながいるから頑張れる!」なデスマーチが進行中で、9月末までは、あぅぅぅな日々がえぅぅです。。><;



それはさておき、表題について、稀代のEA使い pkramsus さんから頂いたコメントの件、早速調査してみました。

pkramsus 2010/09/02 00:06

こんばんは。VPSで勝手に使用させていただいてます。

私の環境だけかもしれませんが、VPS上で起動していてもリモートデスクトップ等で実際にコンソールにアクセスしなければ動作しないです。

当方の環境ですが

CNSVPS , OSはWin2003 Enterprise X64 Edition

です。

なにかしら心当ございましたらレスいただけるとありがたいです。


リモートデスクトップのセッションを閉じた状態やユーザー切り替えでログオフした状態では、Windowsはアプリの画面を描画・更新する必要がありません。(..だって、ユーザに見てもらう画面が無いんですもん..)

そのため、AutoHotkeyのコマンドで画面の状態を検出して動作する処理が期待通りには動かない事が判明しました。AutoHotkeyから参照できる画面の情報はずっと、セッションを閉じる直前のもの?のようで、MT4が「システム異常の詳細」ダイアログを出していても反映されないのです。




対策としては、

(1) VNC や、超高速リモートデスクトップTrueRemote等を試す。

これらは、ログイン状態にある画面を別のPCにコピーする仕組みで動くので今回の問題は起きない..かもしれません。未確認です..。

(2) AutoHotkey 本体から、無理やり画面情報を更新させてやる。

ウィンドウ内の文字列を最新に更新したかったら WM_PAINT 、新規ダイアログの検出をしたかったら WM_CHILDACTIVATE を定期的にアプリに送り続ければ良さそうです。..たぶん。


コードはこんな感じ。

#WinActivateForce
SetTitleMatchMode,2
Loop {

	WinGet, id, list, ahk_class MetaQuotes::MetaTrader::4.00
	Loop, %id%
	{
	    this_id := id%A_Index%
	    PostMessage,0x22, 0, 0, , ahk_id %this_id% ;WM_CHILDACTIVATE = 0x22
	}

	;SoundPlay *-1
	if(WinExist("システム異常の詳細") or WinExist("Crash Details")){
		SoundPlay *48
		WinGet, pid,PID
		FullPath :=GetModuleFileNameEx(pid)
		WinKill
		Run,%FullPath%
	}
	Sleep, 5000
}

GetModuleFileNameEx(ProcessID)  ; modified version of shimanov's function
{
  ; #define PROCESS_VM_READ           (0x0010)
  ; #define PROCESS_QUERY_INFORMATION (0x0400)
  hProcess := DllCall( "OpenProcess", "UInt", 0x10|0x400, "Int", False, "UInt", ProcessID)
  if (ErrorLevel or hProcess = 0)
    Return
  FileNameSize := 260
  VarSetCapacity(ModuleFileName, FileNameSize, 0)
  CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
  DllCall("CloseHandle", hProcess)
  Return ModuleFileName
}

ダウンロードは、http://ux.getuploader.com/fai_fx/download/181/MT4CrashReboot2.zip からどうぞ。

※ 12:58 ログ出力機能を追加しました。