MetaTraderをリモート運用するには その2
作成日:2024/12/15
更新日:2024/12/17
はじめに
前回からの続きで「PCを自動で定期的に休止・復帰させる方法」について紹介します。
FXトレードでは、常にチャンスを狙ってエントリーしたいし、利益もできるだけ伸ばしたいと思います。そのためには、EAを24時間稼働させたいところです。しかし、一般のPCは24時間連続運転×365日を推奨していません。適度にPCを休止して負荷を軽減することが必要になります。
本記事は、休止・復帰させる方法について以下の流れで説明します。尚、Windows11を対象としています。
事前の設定
定期的に休止
定期的に復帰
EAから定期的に休止(次回の記事)
もし、定刻での休止だけでなく、ポジションの有無やその他の状況に応じて休止をするなら、次回の記事の「EAから定期的に休止」で対応が可能です。この場合、「定期的に休止」の「4.タスクスケジューラの設定」はスキップしても問題ありません。
事前の設定
PCの稼働時間が長いため、高温によるトラブルに気を付けるようにします。
涼しい場所で放熱性の高い机などに設置する。
給気口、排気口がホコリで詰まらないように定期的に確認して掃除する。
ノートパソコンの場合は、ディスプレイを開けたままにして稼働させた方がよいかもしれません。ディスプレイを閉じると、内部に空気が循環しにくい構造のノートパソコンもあります。
それでは以下の事前の設定を行います。
電源モードの調整
画面、スリープ、休止状態のタイムアウトの調整
高速スタートアップを無効にする
1.電源モードの調整
電源モードを調整するには、「スタート」→「設定」 →「システム」→「電源とバッテリー」の「電源モード」を選択します。
常時稼働に近いので常に電源接続しています。したがって「電源モード」の「電源に接続」の設定を行います。PCへの負荷は稼働させるEAの内容や数に依存しますが、基本的にMT4ならそれほど高い負荷ではないと思います。右のプルダウンから選択するのは、「最適なパフォーマンス」よりも「最適な電力効率」や「バランス」がよいでしょう。決められない場合は、運用後に冷却ファンの回転具合などから判断してもよいと思います。
参考までにWindows10では、「最適なパフォーマンス」は「パフォーマンスモード」、「最適な電力効率」は「省電力モード」、「バランス」は「バランスモード」が該当します。
2.画面、スリープ、休止状態のタイムアウトの調整
「画面、スリープ、休止状態のタイムアウト」の設定を調整するには、「電源とバッテリー」の「画面、スリープ、休止タイムアウト」を選択します。
「電源モードの調整」と同様に、「電源に接続」の設定を行います。「後で画面をオフにする」は、一定時間経過するとディスプレイの電源を切るという設定です。これは好みの時間を指定してください。後、スリープ状態と休止状態にする経過時間は、それぞれ「なし」を選択して、時間経過によって状態移行しないようにします。
尚、この「電源とバッテリー」の設定では、「カバーと電源 個のボタン コントロール」を選択すればディスプレイを閉じたときの動作も指定可能です。
ノートパソコンの場合は、ちょっとした移動時にディスプレイを閉じてしまうことがあります。設定項目の「カバーを閉じるとPCが」を「何も行わない」に変更しておけば、ディスプレイを閉じてもスリープしません。私の場合、電源接続時とバッテリー使用時の両方とも「何も行わない」を指定しています。この項目は特に必須ではないので、必要に応じて設定してください。
3.高速スタートアップを無効にする
前回の記事で設定済みの場合は、スキップしてください。
高速スタートアップを有効にしていると、シャットダウン、スリープ、スリープ解除での挙動が不安定になる場合があるため無効に変更します。
コントロールパネルを起動します。
右上の表示方法を「小さなアイコン」に変更します。
右下の「電源オプション」をクリックします。
左の「電源ボタンの動作の選択」をクリックします。
「シャットダウン設定」の領域は入力不可なので、「現在利用可能でない設定を変更します」をクリックします。
この画面で「高速スタートアップを有効にする」の項目が表示されていない場合、休止機能が有効になっていないことが原因かもしれません。高速スタートアップ機能の大部分が休止機能に依存しているためです。
休止機能を有効にするには、コマンドプロンプトを管理者として起動して以下を実行します。
powercfg /h on
もう一度、コントロールパネルの起動から試してみてください。
問題ない場合は次に進んでください。
入力が可能になったので、「高速スタートアップを有効にする」のチェックを外して「変更の保存」をクリックします。
これで高速スタートアップを無効にできました。
以上で「事前の設定」は終了です。
定期的に休止
MetaTraderを運用する場合は、24時間365日の連続運転する必要はありません。通常、FX取引は土日は動いていません。また、スプレッドが広がっている日本時間の午前5時〜8時の間は、窓埋めトレードする場合などを除いて、トレードには向いていない時間帯だと思います。
つまり、利用するEAの特徴に依存しますが、定期的にPCを休止できる時間帯はあるため、24時間連続運転の必要はないと考えています。
それでは指定時刻に自動休止する方法を紹介します。設定は次の4つです。
休止機能を有効にする
休止用バッチプログラムの作成
休止状態ではなくスリープ状態にしたい場合
タスクスケジューラの設定
1.休止機能を有効にする
休止機能が無効になっている場合は有効に変更します。「事前の設定」の「高速スタートアップを無効にする」で実施済みの場合は、スキップしてください。
現在のシステムの状態は、コマンドプロンプトを管理者として起動し、以下を実行すると確認できます。詳細は「Microsoft Learn Challenge」を参照してください。
powercfg /a
休止機能を有効にするには以下を実行します。
powercfg /h on
2.休止用バッチファイルの作成
Windows 11 では、コマンドプロンプトを起動して以下を実行することで、PCを休止状態にできます。
shutdown /h
このままだとリモートPCが休止になったことに気づかないので、LINEやDiscrodに通知を送る方法と組み合わせてバッチファイルにしておくと便利です。
例えば、Discordに通知を送る方法と組み合わせると以下のようなバッチファイルになります。Webhook URLは、仮で次の文字列としています。「https://discord.com/api/webhooks/12345678910/ABCDEFGHIJKL」
メッセージは「休止状態に移行します!」にしています。
curl -X POST "https://discord.com/api/webhooks/12345678910/ABCDEFGHIJKL" -H "Content-Type: application/json" -d "{\"content\":\"休止状態に移行します!\"}"
shutdown /h
PCからLINEやDiscordに通知を送る方法の詳細については、以前の記事の「Windows上のcurlを使って送信」を参照してください。
バッチファイルはどこに置いても構いません。私の場合、以下のようにユーザーのホームフォルダ直下に「bin」というフォルダを作成して、その配下に置いています。
C:\Users\ユーザ名\bin
3.休止状態ではなくスリープ状態に移行したい場合
SSDの寿命からすると、1日1回の休止くらいは許容範囲だと思っています。とはいえ、SSDの劣化が気になる人もいると思いますので、休止状態ではなくスリープ状態に移行する方法も紹介しておきます。
「PsShutdown」というコマンドライン ユーティリティを使います。Microsoftから無償提供されている「Windows Sysinternals」のツールの1つである「PsTools」に含まれています。
PsShutdownの詳細については以下のサイトを参照してください。また「PSTools.zip」のダウンロードもこのサイトからできます。
「PSTools.zip」を解凍すると「psshutdown.exe」が含まれています。これをWindowsディレクトリに置いてください。
コマンドプロンプトを起動して以下を実行することで、PCをスリープ状態にできます。
psshutdown.exe /d /t 0 /accepteula
したがって、前の「1.休止状態を有効にする」に記載した例と同じように、Discordに通知を送る方法と組み合わせると、以下のようなバッチファイルになります。メッセージは「スリープ状態に移行します!」にしています。
curl -X POST "https://discord.com/api/webhooks/12345678910/ABCDEFGHIJKL" -H "Content-Type: application/json" -d "{\"content\":\"スリープ状態に移行します!\"}"
psshutdown.exe /d /t 0 /accepteula
4.タスクスケジューラの設定
タスクスケジューラを使って、休止用バッチファイルを実行するようにします。例として、AM 05:00に休止を開始するように設定します。
タスクスケジューラを起動します。
左の「タスクスケジューラ ライブラリ」をクリックします。続いて、右の「タスクの作成…」をクリックします。
「名前」を入力します。例では「System goes to sleep」と入力しています。
「ユーザがログオンしているかどうかにかかわらす実行する」をクリックします。管理者権限がなくて実行できない処理がある場合のために、「最上位の特権で実行する」にチェックしておきます。
トリガー条件を指定するために「トリガー」タブをクリックします。
「新規」ボタンをクリックします。
「タスクの開始」は「スケジュールに従う」を選択します。「毎週」をクリックして「開始」を「5:00:00 AM」にします。「週間ごとの次の曜日」は、「月曜日」「火曜日」「水曜日」「木曜日」「金曜日」「土曜日」をチェックします。編集したら「OK」ボタンをクリックしてトリガーを作成します。
新しいトリガーが作成できました。続けて、休止用バッチファイルを指定します。「操作」タブをクリックします。
「新規」ボタンをクリックします。
「操作」は「プログラムの開始」を選んで、「プログラム/スクリプト」に作成した休止用バッチファイルを指定します。「OK」ボタンをクリックします。
「新しい操作」が作成できました。次は「条件」タブをクリックします。
「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックを外します。また「次のネットワーク接続が使用可能な場合のみタスクを開始する」をチェックします。
「設定」タブは既定値のままで変更しません。
「OK」ボタンをクリックしてください。指定時刻に自動休止するタスクが作成できました。タスクスケジューラの設定はこれで終了です。
AM 5:00になると休止開始のメッセージを送信して休止を実行します。メッセージはLINEやDiscordなどに届きます。
以上で「定期的に休止」は終了です。
定期的に復帰
指定時刻に自動復帰する方法を紹介します。設定は次の4つです。
システム無人スリープタイムアウトの設定
スリープ解除タイマーの許可を有効にする
復帰用バッチファイルの作成
タスクスケジューラの設定
1.システム無人スリープタイムアウトの設定
復帰しているのに数分経過するとスリープに戻る場合があります。原因は「システム無人スリープタイムアウト」の設定時間が短いためです。
これは、システムが自発的にスリープから起動した場合、そのまま何も操作せずに放っておくと、一定時間後に再び自動的にスリープ状態に移行する機能です。
システム無人スリープタイムアウトは、スリープ状態に移行するまでの時間を指定します。
システム無人スリープタイムアウトは隠し設定になっています。これを有効化(表示)させるには、コマンドプロンプトで以下を実行します。
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE
参考までに、隠し設定を無効化(非表示)する時は以下のコマンドになります。
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 +ATTRIB_HIDE
では、システム無人スリープタイムアウトの変更を始めます。
コントロールパネルを起動します。「ハードウェアとサウンド」→「電源オプション」を開き、利用しているプランの「プラン設定の変更」をクリックすると、「プラン設定の編集」画面が開きます。
「プラン設定の編集」の画面で「詳細な電源設定の変更」をクリックします。
「システム無人スリープタイムアウト」を
「バッテリ駆動:0分」「電源に接続:0分」
に指定します。これでシステム無人スリープタイムアウトを無効化できます。
この画面で続けて「2.スリープ解除タイマーの許可」の設定を行います。まだ「OK」ボタンをクリックしないで続けます。
2.スリープ解除タイマーの許可を有効にする
スリープ解除タイマーの許可を有効にすることで、アプリケーションによる復帰ができるようになります。
「スリープ解除タイマーの許可」を
「バッテリ駆動:有効」「電源に接続:有効」
に設定します。これでスリープ解除タイマーの許可が有効になります。
「OK」ボタンをクリックして設定変更を反映させてください。
3.復帰用バッチファイルの作成
復帰用バッチファイルといっても、復帰のコマンドは記述しません。復帰したことをLINEやDiscordに通知するだけです。復帰はタスクスケジューラの設定で行います。
したがって、前回記事「MetaTraderをリモート運用するには その1」の通知用バッチファイル作成を参考に、システムが復帰したことを通知するバッチファイルを作成します。
4.タスクスケジューラの設定
タスクスケジューラを使って、復帰用バッチファイルを実行するようにします。例として、AM 08:00に復帰するように設定します。
「定期的に休止」の「4.タスクスケジューラの設定」と同様にして、「タスクの作成」まで進みます。
「名前」を入力します。例では「System resumes」と入力しています。
「ユーザがログオンしているかどうかにかかわらす実行する」をクリックします。管理者権限がなくて実行できない処理がある場合のために、「最上位の特権で実行する」にチェックしておきます。
トリガー条件を指定するために「トリガー」タブをクリックします。
「新規」ボタンをクリックします。
「タスクの開始」は「スケジュールに従う」を選択します。「毎週」をクリックして「開始」を「8:00:00 AM」にします。「週間ごとの次の曜日」は、「月曜日」「火曜日」「水曜日」「木曜日」「金曜日」「土曜日」をチェックします。編集したら「OK」ボタンをクリックしてトリガーを作成します。
新しいトリガーが作成できました。続けて、復帰用バッチファイルを指定します。「操作」タブをクリックします。
「新規」ボタンをクリックします。
「操作」は「プログラムの開始」を選んで、「プログラム/スクリプト」に作成した復帰用バッチファイルを指定します。「OK」ボタンをクリックします。
「新しい操作」が作成できました。次は「条件」タブをクリックします。
「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックを外します。また「タスクを実行するためにスリープを解除する」をチェックします。つまり、バッチファイルを実行するためにスリープを解除するというわけです。
「設定」タブは既定値のままで変更しません。「OK」ボタンをクリックしてください。タスクが作成できました。
タスクスケジューラの設定はこれで終了です。指定時刻に自動復帰するようになりました。
AM 8:00になると復帰してメッセージを送信します。メッセージはLINEやDiscordなどに届きます。
やっと定期的な休止・復帰の運用が可能になったと思います。
お疲れ様でした。
次回に続く
定期的に休止すると、ポジションを持っている場合など、一時的に休止を解除したくなるケースもあります。ただ、これをタスクスケジューラで対応するのは難しいと思いますので、EAからPCを休止する方法が必要になります。
そのために「EAから定期的に休止」も紹介するつもりでしたが、また長くなってしまいます。次回にします・・・m(_ _;)m
つづく…