FXシステムトレード(元初心者)奮闘記

初心者だった私がFXの裁量トレードを始め、システムトレードに転向した物語

このブログは、引越ししました。  → 新しいブログへ
新しいブログでも、過去の記事をご覧いただけます。

deinit

★新しい順に並んでいます。興味がある以下のタイトルをクリックしてください。
MT4用EA開発時代 - EA無言停止対策とデモ口座期限切れ対策再び
MT4用EA開発時代 - AccountNumberとdeinitとstart
MT4用EA開発時代 - EAプログラミング時の基礎知識と情報源、そして失敗談

MT4用EA開発時代 - EA無言停止対策とデモ口座期限切れ対策再び

このエントリーをはてなブックマークに追加 mixiチェック

さて前回は、
1つのMT4上の複数EAが全てstart()が開始されずに停止していた問題(EA無言停止)の対策について検討した所まで書きました。今回は、前回記事での検討内容以前の記事で書いたデモ口座期限切れ対策での考慮漏れ/新たに判った事について書いてみたいと思います。

まずは「EA無言停止対策」での前回記事からの変更点。

おさらいをすると、「EA無言停止」の具体的な事象は、通信障害復旧後、MT4のstart()が開始されなくなってしまったという事象。
この事象が発生したのは4つのデモ用MT4のうち1つだけで、発生したMT4では10個の
EAを同時に実行していた。
この全てのEAのstart()が開始されなくなってしまってから半日以上気付か
なかったという状況。
#ODL Japan Build228

【EA無言停止対策の変更点】
-----------------------------------
前回記事を元に実際に設計/コーディングをしている最中に気付けた問題点と、
実際に動かして見て気付いた問題点の2種類があった。

1.開発中に気付いた問題点
  今回の構造では、各EAがstart()関数に入ったタイミングで大域変数(Global Variable)に
  TimeCurrent()を格納。
  監視用EAは、自分で認識しているTimeCurrent()と、大域変数上の値との差分が指定した
  閾値以上になっていれば、該当事象が発生したと判断してMT4を強制再起動するというロジック。
  そして、各EAは起動時に該当大域変数をゼロクリアしておいて、監視用EA側はゼロであれば
  チェックの対象外としていた。
  #起動時に監視用EAによるチェックが先に動いてしまうと誤検知してしまうから。

 
 
  でも、通信障害発生時への考慮ががっつり抜けていた。
 
 
  つまり、MT4がしばらく動いていて、通信障害復旧したタイミングで、監視用EAのチェックが
  先に動いてしまうと、各EAが大域変数に格納しているTimeCurrent()は通信障害発生直前の
  値になっているので誤検知してしまう可能性があるということ。
  同じ事が、MT4を起動したままの状態で、週を跨いだ時も言える。
 
  ●対応策
   これは比較的すぐ対応策を思いついて、以下の様にした。
   監視用EAで、前回取得したTimeCurrent()と今回取得したTimeCurrent()の値が一定時間
   以上になった場合、ティック受信の通信障害と判断。
   この時、各EAがTimeCurrent()を格納している大域変数のデータを、監視用EAが最後に取得
   したTimeCurrent()の値に置き換える事で対処。
   
   そしてこの書き換える為の閾値を5分間に設定。
   EA無言停止判断の閾値は15分なので、通信障害が5分以下でも問題なし。
   

  ここまでは、割と軽い話。

 
2.実行してみて気付いた問題点
  そして前述のバージョンを1つのデモ環境で1日動かして問題発生しない事を確認したあと、
  他の3つのデモ環境にリリース。そして、翌日に旅行へ。
  
  すると、旅行に行く最中の電車の乗り換え中に、EA無言停止によるMT4再起動した旨の
  メール通知を受信。


  
  
  処置しておいて良かった~!!!



  との喜びもつかの間、数十分置きに同じメールを受信。

  
  
  そして遂に再起動回数閾値を超過してMT4は完全停止。


  
  
  
  また障害発生システムを作ってしまった。。。
  
  
3.実行して気付いた問題点の対応策
  今回発生のきっかけとなったのはなぜかUSDZARのみ。
  ともかく疑ったのは、USDZARの流動性が低く15分という閾値では短すぎるんじゃないかと。
  
  15分って相当長くしてたつもりやってんけど。。。
  
  そして旅行から帰宅後、ログを見てみると、該当時間帯にUSDZARのチャート上、数十分
  ティックデータ
が更新されてなかった。。
  
  さて、対応策を幾つか考えて見た。
  
  ●対策案比較
   案1.閾値の15分を1Hに長くする
      メリット :修正が楽
      デメリット:実際に問題発生した時に同じMT4に同居しているEA
             も検出が遅延してしまう。
   案2.警告メールを出す様にして、再起動にする閾値は長い時間にする
      メリット :実際にMT4の状況を見て柔軟な対応が可能になる
      デメリット:警告メール多発対策が面倒。メール受信毎に外出先でも状況を確認しないと
             いけない。場合によっては外出先からリモートで処置をしないといけない。
   案3.同居しているEAで一番遅延が少ないものだけを判断材料にする
      メリット :一部の流動性が低い通貨ペアでの誤検知や、検出時間パラメータを長くする必要
            が無いので、検出時間が短くて済むし、自動復旧される。
      デメリット:1つの通貨ペアだけでstart()関数開始されないという障害には対処できない。
             修正量が案1と比較すると多い。
           
  ●検討結果
   流動性が著しく低い通貨ペアは多分トレード対象としないし、トレード対象としたとしても、
    流動性が低い通貨ペアに引きづられて検出時間が長くなってしまうのもヘン。
   通常流動性が高い通貨ペアでも、一時的に流動性が低下して誤検知してしまうのもヘン。
   今回発生した通貨ペアのUSDZARのチャートを見てると、1Hぐらい取引が発生していない
    ケースもあった。
   そもそもの事の発端となった事象では、全てのEAのstart()が開始されなかった。
   「案2」は運用が面倒
   
   なので、「案3.同居しているEAで一番遅延が少ないものだけを判断材料にする」に決定!!
   
------------------------------------------




さて、そもそも前回「あっ!!」と大げさに思わせぶりに書いた点。


実は大したことありません
#デモ口座期限切れ時の、口座切替対策です。



【デモ口座期限切れ対策】
----------------------------------
これは以前の記事で書いた通り、デモ口座期限切れになった場合に、各種大域変数のデータ
が残ってしまい、これが元でデモ口座切替後に正しくトレードができないという事への対策。
以前の記事では、「アカウント変更理由のdeinit()で、使ってた大域変数を削除」という対策
をして、実際に2つのデモ口座のアカウント切替をやってみてちゃんと動いた。


しかし。


土曜日昼にMT4を停止、日曜晩にMT4を起動。



あ、デモ口座期限切れ。。。


そして、新たなデモ口座を申請して、新デモ口座でEAを開始。
念のため、MT4の画面から、大域変数(Global Variable)を確認してみると、


あれ?
データが削除されてない???




そしてログを見てみると、肝心のdeinit()が実行されてない。。。。



つまり、MT4起動している時に口座期限切れが発生して、MT4を起動させたまま新デモ口座
に切り替えた場合はdeinit()が動くが、MT4停止中にデモ口座期限切れになった場合は、
deinit()が動かないみたい。。




が~ん。。。。



となると、MT4既存機能では、デモ口座期限切れになった状態で、新デモ口座に切り替えても
それを知る既存の手段が無いという事。。。



●対応策
 結局、割と安直な対策にした。
 つまり、口座番号を大域変数に格納しておいて、MT4起動時に取得した口座番号と
 異なる番号であれば、不要となる大域変数を削除する様にした。
 たったこんだけ。
-----------------------------------------





今回の修正も、

障害発生システムにならなければいいんですが。。




そして、ぼちぼち安定してきたと思いながら、「FXシステムトレード初心者奮闘記」の「MT4用EA開発時代」は、何も起きなければここまでの修正版のリリースに進むのでした。
#「MT4障害監視システム『ahfw_hc』」使ってみます」って拍手コメントもらった!!嬉しい!! 質問・疑問はご遠慮なく!!


【Ads by Google】

MT4用EA開発時代 - AccountNumberとdeinitとstart

このエントリーをはてなブックマークに追加 mixiチェック

さて前回は、設計書を書いて良かった点今後の予定について書きました。今回は、以前のブログ記事で対応を決めた、デモ口座期限切れ時の作業効率化対応している時に解ったMT4の挙動について書いてみたいと思います。

おさらいからすると、開発したMT4用EA共通部品「ahfw」は大域変数(Global Variable)をたくさん使ってて、デモ口座が期限切れになると、一旦大域変数を削除しなきゃいけないけど、それが面倒。
なので、対応策としてアカウント変更理由のdeinit()で、使ってた大域変数を削除する事にした。




こんなん楽チン!




なぁ~んて、甘くは無かった。。。




元々は、deinit()関数内で、UninitializeReason()がREASON_ACCOUNTだったら、AccountNumber()をキーにした大域変数を削除する予定だった。

つまり、このタイミングで返却されるAccountNumber()は、アカウント変更前のユーザIDが返却されると思ってた。ところがなんと、返却されたのはアカウント変更後のユーザID。



企画倒れ。。




いやいや、init()関数内で、最初にEAを読み込んだ時に、AccountNumber()の結果を変数に格納しておいて、それを使って大域変数を削除すればいい話。


そして、プログラムを修正して実行してみると、なんか変なエラーが。。。


仕方なく、単純なEAを作って色々MT4の挙動を確認することにした。

【アカウント切替時のMT4の挙動確認】
---------------------------------
1.テストに使ったEA
  なんてことはない、単に各関数でAccountNumber()を出力するだけのEA。
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
    Print("init() : AccountNumber("+AccountNumber()+")");   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    Print("deinit() : AccountNumber("+AccountNumber()+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    Print("start() : AccountNumber("+AccountNumber()+")");   
//----
   return(0);
  }

2.検証方法
  2つのデモアカウントを切り替えた時に、AccountNumber()が切替前か切替後のどちらを返却し、
  どういう順序で処理がされるかを幾つかのパターンで検証。

  以下が検証結果。

  A.EAを停止して、アカウント切替確認後、EAを再開
02:58:36 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
02:58:37 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
02:58:41 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:06:33 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:06:33 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:06:35 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:06:36 XAccountChange EURUSDfxf.,M5: deinit() : AccountNumber(156540)
03:06:36 XAccountChange EURUSDfxf.,M5: deinitialized
03:06:36 XAccountChange EURUSDfxf.,M5: uninit reason 6
03:06:36 XAccountChange EURUSDfxf.,M5: init() : AccountNumber(156540)
03:06:36 XAccountChange EURUSDfxf.,M5: initialized
03:07:49 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:07:49 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:07:52 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:08:01 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)

    いたって普通の結果。

  B.EAを停止せずに、アカウント切替直後、EAを再開
    ちょっと乱暴な使い方にチャレンジしてみた。
02:56:35 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:56:39 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:56:44 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:56:46 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:58:21 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:58:21 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:58:22 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
02:58:26 Experts are disabled because the account has been changed
02:58:28 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
02:58:28 XAccountChange EURUSDfxf.,M5: deinit() : AccountNumber(147890)
02:58:28 XAccountChange EURUSDfxf.,M5: deinitialized
02:58:28 XAccountChange EURUSDfxf.,M5: uninit reason 6
02:58:28 XAccountChange EURUSDfxf.,M5: init() : AccountNumber(147890)
02:58:28 XAccountChange EURUSDfxf.,M5: initialized
02:58:36 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
02:58:37 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
02:58:41 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
    んが???deinit()が始まる前に、start()が認識しているAccountNumber()が
   変更になってる。。

      ちょっとやり過ぎたかな?? 

  C.EAを停止して、アカウント切替直後、EAを再開

    乱暴すぎたっぽいので、今回EAを一旦停止してから、アカウント切替後にすぐEAを開始。
03:16:29 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:16:29 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:16:37 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:16:38 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(156540)
03:17:01 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:17:01 XAccountChange EURUSDfxf.,M5: deinit() : AccountNumber(147890)
03:17:01 XAccountChange EURUSDfxf.,M5: deinitialized
03:17:01 XAccountChange EURUSDfxf.,M5: uninit reason 6
03:17:01 XAccountChange EURUSDfxf.,M5: init() : AccountNumber(147890)
03:17:01 XAccountChange EURUSDfxf.,M5: initialized
03:17:01 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)
03:17:10 XAccountChange EURUSDfxf.,M5: start() : AccountNumber(147890)

    EA一旦停止してもあかんのか。。。

-------------------------------------------





え~っと、コレってMT4の

仕様バグじゃないんでしょうか??



アカウント切り替えた時に、deinit()もinit()も動いてないのに、start()を動かしちゃだめだし、start()内で切替後のAccountNumber()返却したらダメでしょ?
だって、init()完了しないとstart()開始されない様になってるのに、アンバランスやん。。。





さては、デモ環境がゆえんの

使い方だから手を抜いたな?





さて、対処方法を考えてみた。
#なんか、デモ環境の為だけのロジックって気が進まないけど。。


【対処方法】
----------------------------------
これは迷う余地もなく、start()開始直後に、AccountNumber()を取得して、init()時に取得したAccountNumber()と異なっていたら、何もせずにリターンする様に修正する。
厳密に言うと、既にstart()内の処理に入ってる場合に誤動作する可能性あるけど、わざわざデモ環境のためだけにそんな事してられないので、以上。
もし対処するとしたら、トレードサーバからエラーが返却された時、AccountNumber()がinit()時に取得したAccountNumber()と違っていれば、成功とするぐらい。
----------------------------------





ちなみにデモ口座切替対応として、内部管理しているチケット番号がゼロ(保有オーダなし)の状態なのに、OrderSelect()ループで、オーダを発見した場合は、該当オーダを決済する様にも修正。
結果的に、以前の「OrderSelect問題パート2が再発。絶対MT4のバグ!」への対応にもなったし。よしよし。








え?こんなの常識?





そして、小ネタでお茶を濁しながら、「FXシステムトレード初心者奮闘記」の「MT4用EA開発時代」は、設計書レビュー結果に進むのでした。
#PC障害時の、MT4用EAを動かすPC切替と、その後の処理が上手く動いた!!切り戻しもOK!!


【Ads by Google】

MT4用EA開発時代 - EAプログラミング時の基礎知識と情報源、そして失敗談

このエントリーをはてなブックマークに追加 mixiチェック

さて前回は、MT4用EAで実現したい機能をまとめたところまで話しました。今回は、EAを作るにあたっての基礎知識として、プログラムの構造と情報源、失敗した事等を書いて見たいと思います。

まず大雑把にMT4用EAの構造を説明すると、何か発生した毎にMT4から呼び出される関数が3つあって、それぞれ呼び出されるタイミングが決まってる。その中で、トレードに密着に関係する関数がstart()で、ティックデータ(Ask/Bid等)を受信する毎に呼び出される。このstart()関数内で、売買判断と発注/決済の関数を呼び出すプログラムを書けばOK。

そして、EAを作るためのプログラムの言語が「MQL4」。言語体系としてはC言語に似ているけど、C言語と比べると、簡単に作れる様になってる。(というか難しい箇所をカットしている)
プログラムを書くためのアプリは、MT4をインストールすると一緒にインストールされる「MetaEditor」。

プログラムは、拡張子「.mq4」というファイルに保存され、「MetaEditor」でコンパイルを実行すると、拡張子「.ex4」のファイルが生成されて、無事EA作成完了。

そして、EAの基本構造でもある、前述のMT4から呼び出される関数について。
EAを作るには、これらの関数を自分でプログラミングする必要がある。

【MT4から呼び出される関数】
--------------------------
●init()関数
 これは、EAをチャートに追加した時とか、EAをチャートに追加した後に、MT4
 を終了させ、起動した後とかに呼び出される。
 主に変数の初期化等のプログラムを書く。
●deinit()関数
 これが結構クセモノで重要。
 いろんな理由で呼び出されるし、2.5秒以内に実行する必要があったりする。
 そして、呼び出された理由を知るには、UninitializeReason()という関数の戻り値で
 わかって、以下の様なパターンがある。
 ・EAがチャートから削除された。
 ・チャート上の通貨ペアか時間枠が変更された。
 ・チャートが閉じた。
 ・EAのプロパティが変更された。
 ・他のアカウントが有効になった。
●start()関数
 ティックデータ受信(価格が変わった時)毎に呼び出される。
 この関数内に、売買する為のプログラムを書く。
--------------------------

具体的な話は、MT4の方が「ForexTester2」よりも日本語サイトも多いし、書籍も出てるので、MT4用EAを作るにあたって必要な情報源を纏めてみた。

【MetaTrader4日本語情報源】
--------------------------
1.MetaTrader4関連書籍
  メジャーなのは以下の2つの書籍。
  「実践」の方だけ先に購入してたけど、結局両方必要になっちゃいました。。  
2.ブログ/サイト
  ●MT4初めての人に判りやすく説明しているサイト
  ●辞書的に調べれるサイト
  ●深い事が書いてあるサイト
    やりたい事や悩み事を検索すると、よくここにたどり着く。
    実際使うにあたっての、いろんなアイデアや考察、情報が書かれているサイト。
--------------------------

で、情報の洪水に埋もれない様に、良く使う関数/予約変数を纏めてみた。

【よく使う関数/予約変数】
--------------------------
●マーケットの価格情報の取得
 Ask、Bid、Bars、Open、Close、High、Low等
●各種テクニカル指標
 40個弱のテクニカル指標の値を取得できる。iXXXXみたいな関数名。
 独自で作ったり、入手したインジケータは、iCustom()で使用することができる。
●注文関係
 そもそも、これ使わなかったらEAの意味無いけど。。
 発注(OrderSend)、 注文内容の変更(OrderModify)、決済(OrderClose)
 ペンディング中オーダの削除(OrderDelete)。
●保有ポジション情報の取得
 まず、OrdersTotal()で保有ポジション数を求めて、その回数分までOrderSelect()をループ
 呼び出す。そして、MAGICが同じで、通貨ペアも同じものだったらループを抜ける。
 選択が成功したら、OrderTicket()とか、OrderMagicNumber()、OrderSymbol()、
 OrderOpenPrice()、OrderStopLoss()、OrderTakeProfit()等のオーダに関する情報を引数無し
 で取得できる様になる。
 手仕舞いするときとか、トレーリングしたりするときに使ったり、保有ポジション有無の
 確認につかったりする。
●エラー情報取得
 エラーが発生する関数は大体、成功か失敗かだけを返す。
 なぜエラーになったのかは、GetLastError()を呼び出せば、エラーコードを取得できる。
 で、エラーコードは数字。この数字だけだと原因が感覚的にわからないので、エラーコード
 意味している文言を取得するのが、ErrorDescription()という関数。
 エラー原因が文言で文字列として返却される。英語だけど。
●「Experts」タブに、任意の文字列を出力する関数
 Print文でログ出力できます。私の場合主な用途は、デバッグ用。
 変数の内容を出力したりとかして、バグが発覚したときの原因究明に使ってる。
 あとは、エラー検出時に、エラー箇所と原因を出力するとか。
●口座情報の取得
 口座残高(AccountBalance)、余剰証拠金(AccountFreeMargin)等。
●状態をチェックする関数
  IsStoped結構重要。EAを停止する指示があった場合にTRUEが返却される。
      指示があったら2.5秒以内に処理を終了させなければならない。
      なぜ重要かと言うと、リトライすると、合計2.5秒以上かかる
      様な場合、リトライする毎にこれでリトライをやめるべきかどうか
      を判断しなければならないから。
      2.5秒以上かかると強制終了させられてしまう。
 IsTesting:Strategy Testerで動いているか。たまに使うかな。
       テストの時は高速で動いてほしいから、一部処理をスキップ
       させる為とか。
●その他
 Sleep()関数。一定時間お休みする。指定するお休み時間はミリ秒単位。
 オーダ失敗時のリトライするときとかに使ってる。
--------------------------

使う必要があるかどうかは別として、個人的に便利だと思った関数。

【便利だと思った関数/機能】
--------------------------
●メール送信機能
 異常を検出して携帯にメール送信できたら、どこにいてても
 異常を知る事ができて便利。最初に設定しておけば、SendMail関数で、
 メール送信可能。
●グローバル変数関連機能
 いわゆるC言語のグローバル変数とは違って、MT4を再起動しても
 値が消えないので便利。普通の変数と違って、グローバル変数にアクセス
 する関数を呼び出す必要あり。
 profiles\gvariables.datに格納されてるっぽい。
●ファイル入出力機能
 トレードの結果はCSV形式にして、後でExcelとかで集計したいところ。
 私が知らないだけかもしれないけど、MT4の画面上からはトレード結果を、
 CSV形式で保存できないっぽい(MT4の画面からだとHTML形式になる)。
 なので、独自にトレード結果をCSVにファイル出力するために使っている。
--------------------------

で、実際にプログラムを作ってて、MT4で特徴的なところ、失敗したところ、意外だったところを纏めてみた。

【はまった点/「へ~」って思った点】
--------------------------
●そもそもEAを動かし始める時にはまった点
 使いたいEAをチャートにドラッグ・アンド・ドロップすればええんやけど、
 そのEAプロパティの「全般」→「Allow live trading」にチェックしてなかったから、
 動かなかった。
●MT4起動中にEAをコンパイルすると自動的に動作中EAが置き換わる
 MT4を起動して、チャート上にEAを登録。
 その状態で、そこから「MetaEditor」を起動して、プログラム修正してコンパイルすると、
 チャート上で動いているEAが自動的に修正後のEAに置き換わる。
●WindowsVista/7で動かすとき。
 実はMT4はWindows7ではサポートしてないっぽい。今Windows7で使ってるけど。。
 で、Vistaも含めて、気をつけなければならない点。
 ・インストールディレクトリ
  デフォルトのディレクトリだとダメ。(セキュリティ制約の影響らしい)
  なので、Users\[ユーザ名]配下のディレクトリのどこかにインストールが必要。
 ・「MetaEditor」でプログラムを書くときに、コピー&ペーストするとき
  Microsoft Office IME 2010だと落ちます。
  変わりに他のIME(Microsoft IME等)を使う必要がある。
●MT4の画面からEAのプロパティで変数を設定できる様にする方法
 単に、関数の外に"extern"を冒頭につけて、変数定義するだけ。
 ForexTester2の時は、いろいろ関数呼び出ししなきゃいけなかったけど、
 変数定義だけで済むので楽ちん。
●「MAGIC」という概念
 存在意義を理解するにに苦労した。
 簡単に言うと、EAを識別する番号で、番号そのものは自由。
 このブログ記事にわかり易くかいてある。
●チャート上の価格がAskベースなのか、Bidベースなのか
 Bidでした。
●TimeLocal関数
 現在時刻を取得する関数だけど、テスターで動かしている時と、デモ口座/本番で動かした
 時で、挙動が異なる。
●ファイル出力する為に、オープンするとき
 MQL4のFileOpenで、FILE_READとFILE_WRITE両方指定しないと、ファイルの中身消える。
--------------------------







以上







しかも内容は

他力本願。









だって、試行錯誤中だから。



そして、他力本願なまま、「FXシステムトレード初心者奮闘記」の「MT4用EA開発時代」は、次のネタに悩みつつ、続くのでした。
#やっと最適化後パラメータを求めて、デモ口座上のMT4用EAに設定した。


【Ads by Google】
記事検索
掲示板
●ForexTester2情報交換掲示板

FXのバックテスト用ソフト「ForexTester2」に関する情報交換掲示板です。積極的なQ&A等の投稿を期待しています!
Ads by Google

livedoor プロフィール
このブログを購読
ランキング投票
面白ければ、両方クリック↓お願いします!




ブログ為替レート
当ブログ関連製品
当ブログの「MT4関連ソフト」が製品化されました

MT4用EA作成ライブラリ「COMFFERED MT4 EA Framework」安心できるオリジナルMT4用EAを作ろう/MT4障害監視・復旧試行ソフト「COMFFERED MT4 Health Checker」FX自動売買中のシステム障害対策をしよう
タグクラウド
QRコード
QRコード
 
  • ライブドアブログ