• カテゴリー別アーカイブ MetaTrader4入門
  • MT4/5でチャート毎にマジックナンバーを変える

    皆さん、こんにちは。ずいぶん久しぶりの記事です。

    MT4/MT5では、EAでマジックナンバーを設定することが多いです。

    同じMT4に複数のチャートを開いてEAを動かす場合、通貨ペアが異なっていれば、特にマジックナンバーは同じでも構いません。ただし、同じ通貨ペアのチャートをいくつも開いて同じEAを動かす場合、それぞれマジックナンバーを変えておく必要があります。

    もちろん input をつけてマジックナンバー変数を宣言しておけば、EAを挿入後にマジックナンバーを個別に変えることはできます。今回はこれを自動的に行いたいという人向けの記事です。(個人的に必要だったので作ったものですが)

    使う関数は、ChartID(), ChartFirst(), ChartNext()です。

    これらの関数は、もともとMQL5の関数でしたが、新MQL4になってMQL4でも使えるようになったものです。

    ChartID()は、プログラムを挿入したチャートのIDを返す関数です。

    ChartFirst()は、MT4で開いている最初のチャートのチャートIDを返す関数です。

    ChartNext()は、前のチャートIDを引数として次のチャートのチャートIDを返す関数です。

    簡単にやるには、チャートIDをそのままマジックナンバーにすればいいですが、チャートIDはかなり大きな整数値なので、もう少し簡単なマジックナンバーに置き換えてみます。

    以下は、チャート毎に異なるマジックナンバーを返す簡単なスクリプトです。

    マジックナンバーの初期値は100としており、チャートを探す度に1ずつ増やすので、それぞれのチャートで、100、101、102・・・とマジックナンバーが変わっていきます。

    それだけなんですが、まま簡単にできたのでメモしておきます。特に調べてないので、既出かもしれませんが。



  • [MQL4/5]新しいバーができたときに1回だけ実行する

    皆さん、こんにちは。

    久しぶりにMQL4/MQL5の記事です。
    先日、拙著の読者の方から質問をいただきました。

    その質問は、新しいバーができたときに1回だけ何か実行したい場合、どうすればよいかという内容でした。

    最近の拙著で説明しているEAでは、新しいバーができたときに発注するというケースしか扱っていなかったので、売買シグナルの条件に加えて、ポジションがないという条件をつけて、1回しか発注しないようにしていました。

    今回は、例えば、新しいバーができたときにAlert()関数で何か表示させるというように、1回実行したという情報がないケースを考えてみます。

    Volume[0]を使う方法


    新しいバーができた瞬間は、Volume[0]が1になっていることを利用する方法です。これが最も簡単な方法です。

    しかし、これには問題があり、新しいバーができたときにtickが連続してしまうと、OnTick()実行時にVolume[0]が2以上になってしまい、何も実行しないまま、次のバーまで待たなくてはいけなくなることがあります。

    昔のようにtickがのんびりとしていた時代はよかったのでしょうが、最近では、tickが速いので、この方法では、新しいバーで必ず1回実行できることは保証されません。

    Barsを使う方法


    次は、定義済み変数Barsを利用する方法です。Barsはチャート上のバーの総数を表す変数なので、新しいバーができると、値が更新されます。なので、最初にBarsの値を記録しておき、その値が変わったときが新しいバーができたときと判断し、Alert()を実行するというものです。実行後は、その時点でのBarsの値を記録しておけば、次のバーが出てくるまで、Alert()が実行されることはありません。

    この方法は、MT4だと問題ないようですが、一つ心配なのは、オプションでチャートの最大バー数を少なく設定したときに、新しいバーができてもバーの総数が変わらなくなることがないかということです。

    MT4の仕様はときどき変わるので、この方法も必ず機能するという保証はないかもしれません。

    Time[0]を使う方法


    もう一つ、バーの開始時刻Time[0]を使う方法があります。考え方は、新しいバーができるまで値が変わらないというBarsと同じです。単にBarsをTime[0]におきかえます。

    この方法だと、チャートの最大バー数とは関係なく、Time[0]はバーができる毎に更新されるので、バーの最初に1回実行するということは、保証されると思います。

    MQL5の場合


    最後におまけで、MQL5の場合です。MQL5では、Volume[0]、Bars、Time[0]すべて使えません。ここでは、Time[0]に対応する方法を使ったコードを示します。

    MQL5では定義済み変数がほとんど使えないので、CopyTime()という関数を使わなくてはいけなかったり、関数の引数に配列を用意しなくてはいけなかったり、外部変数宣言して、初期値の代入をOnInit()関数で行わなくてはいけなかったり、と面倒な限りです。

    こういう状態でMT5への移行は本当に進むのでしょうかね。
    最近Python始めたので、特にそう思いますね。



  • MT4本目次

    MT4本執筆状況です。出版は12月中ということです。
    詳細が決まりましたらまた連絡します。価格は2800円+税です。
    内容はこんな感じです。
    「メタトレーダー入門(仮)」
    はじめに
    1.メタトレーダーの特長
    メタトレーダーの画面
    メタトレーダーは高機能なチャートソフト
    デモ口座でFX売買の練習をしよう
    独自の指標をプログラミングできる
    売買ルールをプログラミングして究極の自動売買
    システムトレードで欠かせないバックテスト機能も充実
    2.インストールしてみよう
    動作環境
    ダウンロード
    インストール
    セットアップ
    起動
    ログインできない場合
    アンインストール
    ライブアップデート
    3.チャートソフトとして利用する
    チャートを表示させてみよう
    チャートの種類を選ぼう
    タイムフレームの変更
    ローソク足の見方
    好みのチャートスタイルを作ろう
    好みのチャートの保存
    複数のチャートの表示方法
    テクニカル指標の表示
    テクニカル指標の削除
    ラインなどの挿入
    4.デモ口座で売買してみよう
    口座情報
    新規の売買注文
    成行注文
    指値・逆指値注文
    注文の変更・取り消し
    ポジションの決済
    取引履歴の確認
    5.独自の指標をプログラムする
    メタエディターを起動する
    プログラミング言語MQL4で何ができるのか
    プログラムファイルの保存場所
    メタエディターの設定
    まずは雛形から始めよう
    プログラミングの基礎
    「//」から始まる行はコメント
    「#」から始まる行はプログラム全体の設定
    文の終わりのセミコロン「;」
    複数の文をまとめるときは 「{ }」
    特別な関数の役割
    変数の宣言
    計算式の書き方
    条件式の書き方
    関数の戻り値
    指標のための配列
    指標プログラムの呼び出されるタイミング
    for文による繰り返し計算で指標をチャートに表示させる
    指標の色と線種を変える
    指標のパラメーター設定
    指標の表示範囲を変更する
    オシレーター系指標の作成
    オシレーター系指標の例(モメンタム)
    オシレーター系指標の例(ストキャスティックス)
    組み込み指標関数の使い方
    組み込み指標関数を組み合わせる
    チャートウィンドウへのデータの表示
    データウィンドウへの指標データの表示
    6.自動売買のプログラミング法
    トレードシステム(移動平均交差システム)
    売買ルールのためのプログラミング
    if文の基本的な書き方
    条件式の書き方
    条件により関数を終了させる書き方
    条件により繰り返しをスキップする書き方
    売買シグナルを表示させる
    エキスパートプログラムを作成する
    システムを検証する
    ストラテジーテスターの使い方
    レポートの見方
    システムのパラメーターの変更
    システムのパラメーターの最適化
    マネーマネジメント
    一定ポイントのストップロス
    一定パーセントのストップロス
    ポジションサイジング
    システムを自動売買させる
    売買シグナルをメールなどで知らせる
    外部ソフトとのデータの連携
    メタトレーダーのデータをデータファイルとして取り出す
    メタトレーダーをDDEサーバーとして利用する
    7.カスタム指標・エキスパートプログラムサンプル集
    移動平均
    ボリンジャーバンド
    MACD
    RSI
    ストキャスティックス
    パラボリックSAR
    ブレイクアウトシステムのシグナル指標
    ブレイクアウトシステムのエキスパート
    あとがき
    付録
    A.メタトレーダー採用業者
    B.MQL4関数一覧
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



  • MetaTrader の歴史

    MetaQuotes 社のウェブサイトからMetaTrader の歴史について調べてみました。
    15 February 2004
    MetaTrader 3.82 がリリースされました。いわゆるMetaTrader 3(MT3)のリリース記録はこれしかないのですが、最終バージョンは2005年にリリースされた MetaTrader 3.86です。
    12 July 2004
    MetaTrader4 に先駆けて、MQL4の開発環境であるMetaEditor 4 のβ版がリリースされました。
    22 November 2004
    MetaTrader 4 のβ版がリリースされました。
    28 February 2005
    MetaQuotes Software 社が≪MetaTrader≫をロシアの特許庁に商標登録しました。
    01 July 2005
    MetaTrader 4 を正式にリリースしました。
    03 October 2005
    MetaTrader 4 Mobile をリリースしました。
    14 November 2006
    MetaTrader 4 build 200 をリリースしました。前回の記事での関数名の変更の多くはこのリリース時に行われました。
    05 December 2006
    MetaTrader 4 MultiTerminal を正式にリリースしました。
    複数のアカウントを同時に管理するソフトです。
    11 September 2007
    MetaTrader 4 build 210 をリリースしました。MetaTrader 4の最新のリリースです。
    まだまだバージョンアップは続いています。
    MT4の本を書いたばかりなのに、MT5なんて出たら大変だなあと思っていましたが、現在のMT4も半年以上のβテストの後でのリリースですから、しばらくはMT4でいけるのではないでしょうか。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



  • 名称変更されたMQL4関数について

    MQL4の関数の中にはアップデートに伴って関数名が変わったり、仕様が変わったりしているものがあります。
    MetaEditor のヘルプの中にその一覧があります。

    ブログの過去の記事と関連があるのが、時間を表すCurTime()とLocalTime()です。
    関連記事はこちらです。→MT4入門(8) – 通知に関する関数の使い方(1)
    以前のバージョンでは、CurTime()もLocalTime()もサーバー上の時間だったので扱いにくかったのですが、最近のバージョンでは、TimeCurrent()、TimeLocal()と関数名が変わり、仕様も
    TimeCurrent() – サーバー上の時間
    TimeLocal() – ローカルPC上の時間
    と変わっています。なので、TimeLocal()を使うと日本時間を簡単に表示させることができるようになりました。
    この変更も出版予定のMT4本に反映されています。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら