2025年4月7日月曜日

MetaEditorをもっと快適に。ダークモード化とおすすめフォントの話

MetaEditorを快適に。

まぶしすぎる標準配色にさようなら。


MT4のEA職人にとって、MetaEditorは必須アイテム。

構文ごとに色分けされていて、それなりに使いやすくはある……のですが、

真っ白い画面は液晶が全力で発光してきます。

もう真夏の太陽。サングラスが必要です。

作業時間が長くなってくると、それがじわじわ瞳孔と網膜に効いてきます。

オリジナル配色、どこにも載ってないんですよね

MetaEditorの標準カラー設定って、なぜか公式にまとまった情報が見当たりません。

しょうがないので、自分で色を拾って整理しました。

ここがスタート地点です。

オリジナルカラー↓



テキストの白黒を反転してみたけれど

定番の手法として、まずはテキスト背景と文字色を反転。
左:標準配色、右:反転版(サンプルは MACDSample を使用)。
ただ、これだけだとキーワードやオペレーターの視認性がガタ落ちします。
字がくらい・・・画面から10cmまで目を近づけないとみえません。
これは、見た目はそれっぽくても使っててしんどいんです。





**************************************************************

TACA DARK MODE 1:目に優しい派向け

まずは落ち着いた方向性から。
淡い色味で整えた「TACA DARK MODE 1」は、目の疲れを最小限に抑えたい人向けです。
特に長時間のコーディングや夜間作業では、こういうトーンがちょうどいい。

TACA DARK MODE1↓


****************************************************************

TACA DARK MODE 2:色でガツンと見分けたい派はこちら

僕自身はこっちを使っています。
「ダークモードでも色は派手でいい。むしろ派手な方がいい。」というタイプの方には、
この「TACA DARK MODE 2」がハマるはず。
構文の種類ごとの色が強く分かれるので、視認性は段違いです。


TACA DARK MODE2↓


************************

色変更の方法

MetaEditorの色設定は、
ツール(T) → オプション(O) → カラー タブから変更できます。

タブのショートカットはないですが、最後に開いたタブが記憶される仕様なので、
Alt + T → Alt + O のコンボで素早くアクセス可能。
Altを押しっぱなしで T → O、音で覚えるなら「トゥ!」です。

ちなみに危険を感じたら時「すべてリセット(R)」を押せばいつでも元に戻せます。
*************************

フォントもいじってこそ完成形


カラーだけじゃ物足りない!
こだわるなら、フォントにも手を入れてこそ快適な開発環境が完成します。

MetaEditorで選べるのは、Windowsに入っている“等幅フォント(Monospaced)”だけです。

場所は「ツール(T)」→「オプション(O)」→「フォント」タブ、カラータブのお隣さんです。

今回のおすすめはJetBrains Mono
公式はこちら
https://www.jetbrains.com/lp/mono/

名前の響きからして、すでにちょっと知的です。

Jet : ひと昔前のパワフルな響き。スピード感とロマンを感じます
Brains : 頭の良さと余裕をまとった感じ
Mono : もちろん“モノトーン”で、等幅の「Mono」でもある

全部並べると……なんだか1950年代の未来予想図みたいな雰囲気

公式ページから「Download font」をクリックすると、フォントファイルがまとめられたZIPが落ちてきます。

解凍すると、フォントファイルが大量に並んでちょっと圧倒されるかもしれませんが、インストールするのはこの4つだけでOKです:

ファイル名
JetBrainsMono-Regular.ttf 標準フォント
JetBrainsMono-Bold.ttf 太字
JetBrainsMono-Italic.ttf 斜体
JetBrainsMono-BoldItalic.ttf 太字+斜体

各ファイルをダブルクリック → 上の「インストール(I)」ボタンを押すだけ。
これでWindowsに登録されます。
MetaEditorを再起動するとフォント選択に表示されます。

※ちなみに、4つインストールしてもMetaEditor上では「JetBrains Mono」の1つだけが表示されます。
これは Windows がうまいことグループ化してくれてるおかげですね。

フォントサイズは 12pt あたりが一番バランスが良くておすすめです。



あとは開発に集中するだけ

フォントが整うと、コードの読みやすさも気分も段違いです。
目にも、気持ちにもやさしい環境で、快適なEA開発を楽しみましょう。











2025年3月10日月曜日

MT4バックテストの決済通貨レートについて

MT4で証拠金通貨をJPYに設定し、EUR/USDのバックテストを行った場合、

取引履歴には円建てで損益が表示されます。

この際、円への換算レートはどのように計算されているのでしょうか?


仮説①:その時点のUSD/JPYレートを使用

この場合、バックテスト時にUSD/JPYの過去データが存在しない場合はどうなるのでしょうか?

仮説②:バックテストを実施した時点のUSD/JPYレートを使用


この仮説を検証するため、実際にバックテストを行い、得られた損益を比較しました。


検証方法

バックテストでは、レート変換に影響でインジケーターの値が異なる可能性があるため、毎日同じ時間にエントリーし、同じ時間にクローズするEAを作成し、テストを行いました。


検証結果

現在のUSD/JPYレート:147.580

バックテストで取得した結果:

プロフィット(証拠金通貨USD) ÷ プロフィット(証拠金通貨JPY) の比率


最大値:148.000

最小値:147.000

平均値:147.608


換算レートの確認

得られた換算レートを並べてみると、ほとんどが現在のレート付近に集中し、時々若干の変動が見られる状態でした。

 



ヒストグラムでの確認

どのレートが最も多く使用されているかをヒストグラムで確認したところ、バックテスト開始時のレートにほぼ集中していることがわかりました。





結論

MT4でEUR/USDを証拠金通貨JPYでバックテストした場合、
バックテストを実施した時点のUSD/JPYレートの少数第一位を切り捨て、または切り上げた範囲のレートが使用される

ほとんどの場合、現在のレート付近が適用される

この結果は、仮説②に近いものでした。

まとめ

つまり、EUR/USDを証拠金通貨USDでバックテストする場合とJPYでバックテストする場合で、換算レートの影響による大きな差は生じないと言えそうです。






2025年2月13日木曜日

難読化のはなし

EA開発において、ロジックの保守は極めて重要です。

しかし、デコンパイルを試みる人がいる以上、コードの難読化は必須といえるでしょう。

代表的なデコンパイル対策には、以下のようなものがあります。


1️⃣ 外部ファイルを使用する

→ ex4ファイル単体ではなく、外部ファイルを参照する方法。ただし、外部ファイルの配布や設置の手間が増えるうえ、それ自体が解析されるリスクもあります。


2️⃣ 暗号化コンパイルを活用する

→ META EDITORではコードを暗号化した状態でコンパイルできます。

しかし、これも突破される可能性があると言われています。


3️⃣ 変数を増やしてコードを難読化する

→ 読解を困難にすることで解析を防ぐ手法。

ただし、開発側も大幅に手間が増え、メンテナンスが煩雑になるデメリットがあります。


どの手法にも一長一短があり、完全な防御策は存在しません。

しかし、複数の対策を組み合わせることで、解析の難易度を大幅に引き上げることは可能です。

EA開発者として、常に対策を講じながら、資産を守る意識が求められますね。


ソースコードを読んでも理解しづらくするテクニック


デコンパイル対策の一環として、コードの可読性を意図的に下げる方法を紹介します。

今回は、シンプルな条件分岐を難読化してみましょう。


通常のコード

if(x == 9 || x == 10)return;

このコードは、x が 9 または 10 のときに処理を終了します。非常に分かりやすいですね。


難読化したコード

if (!(bool)((x - 9) * (x - 10))) return;

この書き方では、(x - 9) * (x - 10) = 0 となる場合に return されます。

具体的には、

x = 9 のとき → 9 - 9 = 0 となる

x = 10 のとき → 10 - 10 = 0 となる

したがって、 x = 9 または x = 10 のとき return される点は元のコードと同じですが、数学の知識がないと一見して理解しにくくなっています。

さらに、わざわざ bool に型キャストし、! を使って判定している点も可読性を下げるポイントです。

このように、シンプルな条件式でも数学的な変形や冗長な型変換を組み合わせることで、解析の難易度を高めることができます。

デコンパイルを防ぐためには、こうしたテクニックを適宜取り入れながら、コードの保護を強化していきましょう。

2024年6月17日月曜日

遺伝的アルゴリズム2

遺伝的アルゴリズムは最適化問題を解くための手法です。

概要は一つ前のブログを御覧ください。

OnTester()で使うコードを作成しました。

関数の想定最大値(~Max)と最小値(~Min)は最適化するEAに合わせる必要があります。

ex)利益(Profit)の設定:利益の最大値は3,000,000、最小は初期証拠金が1,000,000のため、-1,000,000と設定しています。

この最大値と最小値の幅が実際の数値に近いほど、アルゴリズムの精度が高くなると考えられます。

間違えなどありましたら教えてください。(^^;)

double OnTester()

  {

  //想定最大値、最小値

  double Profit_Max=3000000;

  double Profit_Min=-1000000;

  double PF_Max=2;

  double PF_Min=0;

  double EX_Max=500;

  double EX_Min=-500;

  double DD_Max=1000000;

  double DD_Min=-1000000;

  double Trades_Max=10000;

  double Trades_Min=0;

  //値の取得

   double Profit=TesterStatistics(STAT_PROFIT);

   double PF=TesterStatistics(STAT_PROFIT_FACTOR);

   double Ex_Payoff=TesterStatistics(STAT_EXPECTED_PAYOFF);

   double DD=TesterStatistics(STAT_BALANCE_DD);

   double Trades=TesterStatistics(STAT_TRADES);

   //値が想定最大値、最小値の範囲を逸脱した場合修正

   Profit=MathMin(Profit,Profit_Max);

   Profit=MathMax(Profit,Profit_Min);

   PF=MathMin(PF,PF_Max);

   PF=MathMax(PF,PF_Min);

   Ex_Payoff=MathMin(Ex_Payoff,EX_Max);

   Ex_Payoff=MathMax(Ex_Payoff,EX_Min);

   DD=MathMin(DD,DD_Max);

   DD=MathMax(DD,DD_Min);

   Trades=MathMax(Trades,Trades_Max);

   Trades=MathMin(Trades,Trades_Min);   

   

   //標準化(各数字を0~1の範囲に標準化する)

   double ProfitNM   =(Profit-Profit_Min) /  (Profit_Max-Profit_Min);

   double PFNM       =(PF-PF_Min)         /  (PF_Max-PF_Min);

   double ExNM       =(Ex_Payoff-EX_Min)  /  (EX_Max-EX_Min);

   double DDNM       =(DD_Max-DD)         /  (DD_Max-DD_Min);//DDは小さいほうがいい

   double TradesNM   =(Trades-Trades_Min) /  (Trades_Max-Trades_Min);

      

   //平均二乗誤差でコスト計算&返す(コストは小さいほど優秀なので1/コスト)

   return 1/(pow(1-ProfitNM,2)+pow(1-PFNM,2)+pow(1-ExNM,2)+pow(1-DDNM,2)+pow(1-TradesNM,2));

  }

遺伝的アルゴリズム

MT4、MT5には、遺伝的アルゴリズムによる最適化機能が標準で搭載されています。

遺伝的アルゴリズムはAIの一種ですが、ディープラーニングとは異なります。

ほとんどの人が遺伝的アルゴリズムを使った経験はあるかもしれませんが、実際に活用している人はほとんどいないと思います。その理由は、遺伝的アルゴリズムが「使い物にならない結果」を選択することが多いためです。

遺伝的アルゴリズムは、「最適化パラメータ」を最適化の目標として選択します。最適化パラメータには、以下のようなものがあります。

  • Balance(残高)
  • Profit Factor(PF)
  • Expected Payoff(期待利得)
  • Maximal Drawdown(DD)
  • Drawdown Percent(DD%)
  • Custom(カスタム)

例えば、目標を残高にした場合、取引数が1で残高が最高の設定値を選ぶことがあります。しかし、このような設定値では実際に運用を行うことはできません。

最大ポジション数1で固定LOTのEAであれば、残高、PF、期待利得、DD、取引数のすべての指標を総合的に判断する必要があります。(複数のポジションを持つ場合や可変ロットの時はDD%です)

そこで、目標をCustomに設定し、OnTester()関数内でこれらすべての指標を使用した関数を用いて、遺伝的アルゴリズムに挑戦してみましょう。具体的な流れは以下の通りです。

  1. 残高、PF、期待利得、DD、取引数を取得する
  2. 各指標を正規化する
    ※最適化の途中では最大値、最小値はわからないので想定される最大値、最小値で正規化します
  3. 1で取得した値の平均二乗誤差からコスト(損失)を算出する
  4. コスト(損失)が低い設定値を選ぶために、1/コストを返す

各パラメーターを1つずつ最適化するか、すべてをまとめて遺伝的アルゴリズムで最適化するか、どちらの方法が再現性の高い、より利益を出せる設定値を作れるでしょうか

つづく(かも)

--------------------
追記
最適化の量が多い時はMT4からMT5にコンパイルしてMT5で最適化しましょう。
最適化時間が数分の1になります。


2024年2月12日月曜日

TacaActive USDJPY M15:開発中のEAについて 2ndアナウンス EAのDL有

 前回の記事


TacaActive USDJPY M15は現在開発中のEAとファーストアナウンスを行いました。

Activeは、積極的な取引スタイルを採用し、市場の機会を最大限に活用することを目指しています。

※こちらはPureGainではなく、TACA個人の開発です。


スプレッド10設定のバックテスト結果を公開しましたが、今回はスプレッド15の結果を共有します。

より大きなスプレッドでの成績を見ることで、パフォーマンスをより深く理解していただけることを期待しています。

多くの方が、「スプレッド10とスプレッド15の結果を別々に見ても、その違いや意味がよくわからない」と感じるかもしれません。



直感的に理解していただくために、今回はスプレッド別の損益チャートを作成しました。

チャートはスプレッド10から30までのパフォーマンスを視覚的にご覧いただくことで、収益性にどのように影響するかを具体的に示すことが目的です。


続いてスプレッド別に純益、PF(プロフィットファクタ)、取引数、勝率、最大DD(最大ドローダウン)、RF(リカバリーファクタ)の表を作成しました。



実際に取引を行う際、スプレッドと手数料そしてスリッページはトレーダーの利益に直接影響を与える重要な要素です。特に、スプレッド+手数料の合計が5となる業者を使用する場合、スリッページ(価格の滑り)などの実際の取引条件を考慮すると、実質的なコストはスプレッド10またはスプレッド15程度に相当するというのが私の印象です。





さて、下は複数の開発者による合同開発EA HALU CADJPYです。
3/7まで半額キャンペーンをやっています。





2024年2月11日日曜日

THE没EAその1  TACAXXX1 CADJPY

THE没EAその1
 TACAXXX1 CADJPY

 

公開を断念したEA、「没EA」について

詳細を書くのは初めての試みですが、各方面から

情報が欲しい、EAが欲しい、ソースが欲しいという反応がありましたので

簡単にコンセプトや、なぜ没にしたのか、

そして類似したEAで運用しているEAを紹介します。



コンセプト : CADJPY(カナダドル日本円)の早朝EA開発

CADJPYの分析結果:(略)であるので、早朝のCADJPYはレンジにまとまることが多い

原油の影響:(略)で、影響を受ける

時間:(略)北米時間で動くため米ドルの影響と時間的な・・・(略)


xxx1(よみかた:没1号)は1ポジ、売り買い対称、早朝のレンジにエントリーを行う

15分足の始値で動作する。朝はMT4時間(GMT2/3)で0時から3時までとする。


ロングのスプレッド検証




取引は15分足の始値に基づいて行われます。

上図の12箇所のタイミングでのみ注文を出します。

スプレッド(取引コストの一種)に対する耐性を時間帯別に評価した結果、

0:15から1:00までの時間帯はスプレッドに対して耐性が高いことが分かりました。

この時間帯では、スプレッドが60であっても長期運用により利益が出ることが確認されていますが、

余裕を持たせるためにスプレッドの上限を40とします。

それ以外の時間帯では、スプレッドの上限は通常30~40程度ですが、

より保守的なアプローチを取るためにスプレッドの上限を20と設定します。


没にした理由

没にした主な理由は、将来への不安が残ったからです。


短期的には期待できますが、中長期の視点で考えると、いくつかの不安要素がありました。


EA(エキスパートアドバイザー)は基本的に長期間放置して運用することを前提としています。


ショートポジションについては、期待していたほどの成果が得られませんでした。


そのためxxx1(没)はロングポジションのみのエントリーとなっています。


2024年中はロングポジションのみでも十分な運用が見込めると考えています。


しかし、原油価格の下落や今後予想される金利の低下時には、ロングポジションのみでは対応が難しく、長期運用における不安が残りました。


CADJPYが下落している局面でもバックテストでは利益が出ていることは確認しています。


もし、運用を考慮する場合は、円高や原油価格の動向に注意してください。


円高は金利の動きに、原油価格は地政学的リスクに左右される傾向があります。


また、基軸通貨である米ドルが下落すると、原油価格は上昇する可能性があるため、相殺効果が期待できます。


どうする?

私個人の考えですがバックテストなど多方向で比較検討した結果


xxx1(没)は使用せず、現在運用しているHALU CADJPYを引き続き使用します。


xxx1(没)は私個人の作品 HALU CADJPYは複数開発者の共同作品なので、敗けたような気がして残念ですが、


数字は嘘をつけません。


下のグラフは横軸を期間、縦軸は損益


青い線HALU CADJPY オレンジはXXX1(没)です。


2006年~2011年の古い期間は同じように動いていますが、直近はHALU CADJPYの損益の伸びが圧倒的です



自己責任で無料ダウンロード


無料配布は終了しました


TacaDawn EURJPY M15

 通貨ペアの枠を超えた革新

TACADAWN EURJPY

※説明文作成までの代替テキスト
 通貨ペア変更が単なる条件設定だと思っている人が多いのは残念なことだ。その過程は遥かに複雑で、まずは過去データの徹底的な分析から始まる。通貨ごとに異なるマーケットの時間帯、指標発表の影響、そして通貨ペアの関係性 これら全てが、私、TACAが取り組むDiet20kgプロジェクトの核心にある
この分析のため、私は6~7台、時にはそれ以上のPCを駆使し、Python、Excel、MT4、MT5を使用して開発を進める。MT4のEA開発にMT5を使用するというのは最近のトレンドだ。Dawnとは「新たな夜明け」、「始まり」、そして「深い理解と発見への道を切り開く」という意味だ。このマニアックなシステムは、早朝の市場を狙う。新たな領域への挑戦は容易ではなかった。夜通しのコード書き換え、絶え間ないテストと改善 しかし、そこには各数字が紡ぐ物語、市場の微妙な変動に興奮する独特の喜びがあった。まるで未知なる海を航海する船長のように、未知の波を乗り越える度に、私の探求心は燃え上がる。
苦労はしたが、その苦労を楽しんでいる。EURJPY市場でDawnがどのように光を放つか、その一瞬一瞬が新たな冒険だ
今、我々は新たな夜明けを迎え、EURJPYの地平線に新たな光が見え始めている。この光は、僕の苦労と情熱の証だ。Dawn EURJPYを通じて、この旅を共有したい。あなたもこの冒険に参加し、一緒に市場の新たな地平を目指そう。
※販売?公開?プレゼント?いろいろ考え中





TacaDawn USDJPY M15

 

UNDER DEVELOPMENT

開発中

DawnはNYクローズ直後の時間のみをターゲットとしています
Active EAと比べると安定型です



無料プレゼントの可能性あり〼

TACA Active USDJPY M15 その①

 UNDER DEVELOPMENT

開発中

Active EAはより積極的に取引を行う思考で開発しています。







上)始値のみ

下)全ティック 不整合チャートエラーあり


近日無料プレゼントあるかも、ないかも・・・









ダイエット 成功記念 無料EA!

 

TACA'S DIET
SUCCESS CELEBRATION EA

EAを提供する際、ユーザーにとって可能な限り簡単で扱いやすい製品を提供することを心がけています。
特に、条件設定に関しては、誤った設定での運用を防ぐために、わざと設定項目を限定しています。
確かに、このアプローチには賛否が分かれるところですが、今回ご提供するプレゼント用のEAは、
通常の方針とは異なり、ユーザーが自由に設定できるように設計しました。
設定に手間をかけたくない方は、ぜひデフォルト設定でご利用ください。
また、多くのEAはブラックボックスと呼ばれますが、
今回のデフォルト設定をなぜ選んだのかについて明確に説明します。