
PythonからMQL5へ:量子に着想を得た取引システムへの旅
はじめに
量子コンピューティングの理論的なアイデアと現実世界の取引アプリケーションを結び付ける旅に出て、量子に着想を得た取引システムを徹底的に探求します。本チュートリアルでは、基本的な量子コンピューティングの概念から始め、最終的にMQL5への実装までを体系的に解説します。量子の概念を活用することで取引がどのような恩恵を受けるのかを考察し、PythonによるプロトタイピングからMQL5との統合までの開発プロセスを詳しく説明し、実際のパフォーマンスデータとコード実装を紹介します。
この記事では、量子コンピューティングの理論とMQL5での実践的な実装を結び付け、取引システムにおける量子に着想を得た手法の応用について解説します。基本的な量子原理を紹介し、PythonによるプロトタイピングからMQL5への統合までの流れを、実際のパフォーマンスデータを交えながら説明します。
従来の取引はバイナリな意思決定に依存していますが、量子に着想を得た取引モデルは、市場の挙動を量子現象に類似した形で捉えます。具体的には、複数の同時状態、相互依存、突然の状態変化などの概念を取り入れることで、より柔軟で適応的な取引戦略を実現できます。Qiskitのような量子シミュレーターを活用することで、従来のコンピューター上で量子に着想を得たアルゴリズムを実装し、市場の不確実性に対処しながら、より高度な予測的洞察を得ることが可能になります。
量子に着想を得たシステムの適用を目指すトレーダーや開発者にとって、これらの違いを理解することは不可欠です。
Python実装では、Qiskitを使用して量子回路をシミュレート します。市場データはRY(回転)ゲート を介して量子状態にエンコードされ、市場特性を量子重ね合わせとして表現します。さらに、CNOTゲートによって量子もつれを形成し、市場の複雑な相関関係を捉えます。測定結果から予測を生成し、約54%の精度 を達成しました。
一方、MQL5実装は、その古典的なアーキテクチャのため、量子動作を近似的に再現 します。特徴量抽出と古典数学を用いて量子状態や量子もつれをシミュレートします。精度は52%とやや低めですが、MQL5の利点としてリアルタイム取引や直接市場接続 をサポートできる点が挙げられます。
それぞれのアプローチでは、データ処理の方法が異なります。Pythonはデータを直接量子状態にエンコードできますが、MQL5では特徴量エンジニアリングが必要になります。PythonのQiskitは本物の量子ゲート を使用できますが、MQL5は古典的な近似手法を採用するため、再現性に課題があるものの柔軟性が増します。量子もつれの再現において、PythonのCNOTゲート は本物の量子接続を作成できますが、MQL5は古典的な統計的相関を利用する形になります。
これらの違いを踏まえると、それぞれのアプローチの強みと限界が明確になります。Pythonは強力なプロトタイピング環境を提供し、一方でMQL5は従来の取引環境に適応できる実用的なソリューション となります。量子に着想を得た計算をリアルな市場取引へと応用するために、MQL5実装は重要な役割を果たします。
Pythonプロトタイプ:イノベーションの基盤
私たちは、NumPy、Pandas、そして特にQiskiなどの強力な科学ライブラリを備えたPythonから開発を開始しました。これらのライブラリは、量子に着想を得た取引システムのプロトタイプ作成に最適であり、Pythonのシンプルな構文と豊富なリソースが効率的な実験と初期アルゴリズムの開発を可能にしました。
Pythonプロトタイプは、さまざまな市場環境で一貫して54%の成功率 を達成しました。これは決して圧倒的な精度ではありませんが、適切なリスク管理と組み合わせることで、取引における有意義な優位性 を生み出します。
私たちはQiskitを使用して、3量子ビットのアーキテクチャを設計およびテスト しました。この構成により、最大8つの市場状態を同時に分析 することが可能になりました。さらに、Pythonの柔軟性を活かし、回路の調整やパラメータの最適化を素早くおこない、迅速なフィードバックを得る ことで、開発プロセスを大幅に加速させることができました。
以下に、Pythonで実装した量子回路の簡略化された例 を示します。
class HourlyQuantumForex: def __init__(self): self.n_qubits = 3 self.simulator = BasicAer.get_backend('qasm_simulator') self.min_confidence = 0.15 def create_circuit(self, input_data): qc = QuantumCircuit(self.n_qubits, self.n_qubits) # Input encoding for i in range(self.n_qubits): feature_idx = i % len(input_data) angle = np.clip(np.pi * input_data[feature_idx], -2*np.pi, 2*np.pi) qc.ry(angle, i) # Entanglement operations for i in range(self.n_qubits - 1): qc.cx(i, i + 1) return qc
MQL5への移行:実践的な実装
実用的な理由から、私たちは量子に着想を得たシステムをMQL5へ移行することを決定しました。MQL5は、取引プラットフォームとの直接連携、リアルタイム市場データへのアクセス、高速な注文実行 といった実務向けの機能を提供します。一方で、プロトタイピングやテストの段階ではPythonの方が優れています。最大の課題は、量子コンピューティングの原理をMQL5の古典的な計算環境に適応させることでした。システムの予測力を維持 しながら、MQL5の従来の計算手法に落とし込む必要がありました。
また、リアルタイム市場データの分析の難しさや、Pythonの量子シミュレーターとMQL5の古典的な計算環境の違いにより、精度は54%から51~52%にわずかに低下しました。
以下は、MQL5での実装の概要です。
class CQuantumForex { private: int m_lookback_bars; double m_features[]; public: double PredictNextMove(string symbol) { GetFeatures(symbol, m_features); return SimulateQuantumCircuit(m_features); } double SimulateQuantumCircuit(double &features[]) { // Quantum-inspired calculations double state_probs[]; ArrayResize(state_probs, (int)MathPow(2.0, (double)NUM_QUBITS)); // Circuit simulation logic for(int shot = 0; shot < SHOTS; shot++) { // Quantum state manipulation } return GetWeightedVote(state_probs); } };
実際のアプリケーションと結果
量子に着想を得たシステムを実際に使用した結果、市場予測においていくつかの興味深い傾向が明らかになりました。特に、市場が大きく変動する時期に、従来のテクニカル分析がしばしば機能しない場合でも、このアプローチは卓越した強さを発揮しました。この利点は、量子に着想を得た手法が複数の市場状態を同時に処理できる能力から生じています。さまざまな市場条件下でのテストから得られた主な結果は以下の通りです。
- ライブ取引において、このモデルはさまざまな市場状況で一貫して優れたパフォーマンスを示しました。これにより、実際の状況でのモデルの信頼性が確認されました。
- また、特定の市場時間帯において、モデルの精度が大幅に向上することが分かりました。これらの特定の時間帯に集中することで、予測可能性を高め、取引戦略全体の効果を向上させることが可能です。
- 極端な市場のボラティリティの時期には、モデルのパフォーマンスが顕著に向上しました。市場の不安定な環境にも適応し、パフォーマンスを高める能力があったため、モデルの潜在的な収益性が向上し、より大きな価格変動から利益を得ることができました。
- 最後に、低確率の取引を効率的に排除するために信頼レベルを活用しました。この選択的アプローチにより、信頼度の高いシグナルに集中することで不必要なリスクを軽減し、取引結果をさらに向上させることができました。
パフォーマンス指標と分析
PythonプロトタイプとMQL5実装のパフォーマンス差について、徹底的に分析することが重要です。この違いは、MQL5プラットフォームの制限だけでなく、制御されたテスト環境からリアルタイム市場環境への移行の難しさを反映しています。MQL5による解決策は、リアルタイムの市場動向やデータ処理の制約といった複雑な課題を扱っていますが、Pythonプロトタイプは履歴データを使用し、市場の状況を完全に把握していました。Resultados para EURUSD=X: Precisión global: 54.23% Total predicciones: 11544
MQL5の実装には、精度がわずかに低下したとしても、実際の取引アプリケーションにとって価値のある多くの便利な利点があります。Pythonプロトタイプだけでは、トレーダーはシステムのリアルタイム市場データ処理と瞬時の取引シグナルから実用的な洞察を得ることができません。
MQHの統合:有用な方法
私たちの量子に着想を得た取引ロジックは、MQL5ヘッダーファイル(MQH)に組み込まれているため、現在使用しているエキスパートアドバイザー(EA)に簡単に統合することができます。このモジュール式のアプローチにより、トレーダーは取引システムを全面的に再設計することなく、量子に着想を得た予測を取引手法に組み込むことができます。市場状態の分析、信頼基準、そして詳細なパフォーマンス追跡のための包括的な機能がすべてMQHファイル内に含まれています。MQHファイルは、次の方法で既存のEAに含めることができます。
#include <Trade\Trade.mqh> #include <Quantum\QuantumForex.mqh> class CTradeAnalyzer { private: CQuantumForex* m_quantum; double m_min_confidence; public: CTradeAnalyzer(double min_confidence = 0.15) { m_quantum = new CQuantumForex(); m_min_confidence = min_confidence; } bool AnalyzeMarket(string symbol) { double prediction = m_quantum.PredictNextMove(symbol); return MathAbs(prediction) >= m_min_confidence; } };
最適化と微調整
量子に着想を得た取引システムの多くの重要な要素は、特定の取引状況やツールに合わせて調整可能です。シミュレーションで使用される量子ビットの数、特徴量エンジニアリングのパラメータ、取引をフィルタリングするための信頼閾値、量子回路シミュレーションのショット数などは、すべて重要な設定項目です。最初の構成では一貫した結果が得られましたが、慎重にパラメータを最適化することで、さらに改善の余地があると考えています。理想的な設定は、個々の取引の好みや市場の状況によって異なるため、読者の皆さんには実際に試してみることをお勧めします。<p>将来の方向性と進展 このアプローチは、量子力学に着想を得た取引アプリケーションへの第一歩に過ぎません。今後の研究では、より複雑な量子コンピューティングの概念とその取引への応用の可能性を探ります。市場分析のための高次元量子回路、量子理論に基づく最適化アルゴリズムの導入、量子理論に基づいた高度な特徴量エンジニアリング、古典的と量子的なハイブリッド取引システムの開発などは、さらに研究が必要な分野です。実践的な実装ガイド この方法を取り入れたいと考えているトレーダーには、体系的なアプローチを推奨します。まずはPythonプロトタイプから始め、ターゲット市場でのシステムの適用可能性を評価し、基本的な量子の概念を理解することからスタートしてください。その後、徐々にMQL5の実装に移行し、まずはペーパートレードでその効果を確認します。自信がついたら、取引ニーズやリスク許容度に応じてシステムの設定を調整します。時間の経過とともに、定期的なパフォーマンスメトリックの監視により、信頼性が向上します。
// Constants #define NUM_QUBITS 3
量子ビットの数(NUM_QUBITS)を変更すると、可能な出力状態の数が指数関数的に変化します。これは量子システムの基本的な特性であり、シミュレーションにおいて重要な意味を持ちます。
現在のコードでは、NUM_QUBITSは3に設定されており、その結果8 (2³)個の状態が考えられます。これにより、状態配列はサイズ 8 で初期化され、8 つの可能な状態をループで処理します。各量子ビットは0と1の重ね合わせで存在し、他の量子ビットと組み合わせることで、可能な状態の数は倍増します。
たとえば、量子ビットの数を変更すると、可能な状態の数も変化します。1量子ビットでは2つの状態(|0⟩と|1⟩)、2量子ビットでは4つの状態(|00⟩、|01⟩、|10⟩、|11⟩)、3量子ビットでは8つの状態、4量子ビットでは16の状態、というように続きます。パターンは2^nに従います。ここで、nは量子ビットの数です。
この指数関係はコードのいくつかの部分に影響を与えます。状態配列のサイズはそれに応じて調整する必要があり、量子回路シミュレーションループはより多くの状態を処理し、メモリ要件が大幅に増加します。たとえば、NUM_QUBITSを3から4に増やす場合、配列のサイズやループの境界を8から16に変更する必要があります。
量子ビットの数を増やすことは計算能力を向上させ、より高度な分析機能を実現できる可能性がありますが、それにはトレードオフが伴います。シミュレーションの計算負荷は高まり、必要なメモリも増加し、処理にかかる時間も長くなります。これは、特に性能の低いハードウェアで実行している場合や、リアルタイム取引において高速な実行が求められる場合に、EAのパフォーマンスに影響を与える可能性があります。
この取引アルゴリズムにおいて、より多くの量子ビットを使用することで、より複雑な特徴量のエンコードが可能になり、より精緻な価格変動の予測ができるかもしれません。しかし、この潜在的な利点と計算オーバーヘッドの増加とのバランスを取ることが重要であり、システムが実際の取引アプリケーションにおいて実用的であることを確認する必要があります。
#define SHOTS 2000
ショット(コードでは「SHOTS=2000」と定義)は、量子動作を近似するために量子回路がシミュレーションされる回数を表します。各「ショット」は量子回路全体を実行し、測定をおこない、結果の統計分布を構築します。
この概念は、サイコロを何度も振ってその確率分布を理解することに似ています。量子コンピューティングでは、次のようになります。
// Simulation loop in the code for(int shot = 0; shot < SHOTS; shot++) { // Initialize quantum state double state[8]; ArrayInitialize(state, 0.0); state[0] = 1.0; // Start in |000⟩ state // Run quantum circuit operations... // Measure and accumulate results const double rand = MathRand() / 32768.0; double cumsum = 0.0; for(int i = 0; i < 8; i++) { cumsum += state[i] * state[i]; if(rand < cumsum) { state_probs[i] += 1.0 / SHOTS; break; } } }
量子取引システムに最適なショット数を選択するには、いくつかの重要な要素のバランスを取る必要があります。主なトレードオフは、精度と実行速度の間にあります。ショットの数を多く設定すると(通常は5,000以上)、量子状態の確率分布がより正確になりますが、実行時間が遅くなるというデメリットがあります。逆に、ショット数が少ない場合(500~1,000ショット程度)は、実行速度は速くなりますが、結果の精度は低くなります。現在のデフォルト設定である2,000ショットは、これらの競合する要求のバランスを取ることを目的として慎重に選択された中間点を表しています。
取引の具体的な要件を考慮する場合、いくつかの要因が関係してきます。取引する市場の時間枠は非常に重要です。時間枠が短いほど、応答性を維持するために必要なショットが少なくなる場合がありますが、時間枠が長いほど、より多くのショットに対応して精度を高めることができます。ショット数が増えるとより多くの計算リソースが必要になるため、利用可能な処理能力も重要な考慮事項です。さらに、取引戦略に必要な精度のレベルも選択に影響します。より高い精度を必要とする戦略では、より多くのショットから利益が得られます。
実際の実装では、初期テスト段階で1,000~2,000ショットから始めることをお勧めします。これにより、システムのパフォーマンスを評価するための適切なベースラインが提供されます。そこから、実行時間と精度のメトリックの両方を積極的に監視する必要があります。結果にノイズが多すぎたり、一貫性がなかったりする場合は、ショットの数を徐々に増やしてください。逆に、EAの実行が取引要件に対して遅すぎる場合は、ショットの数を減らすことを検討してください。この反復的なアプローチにより、特定の取引条件と要件に最適なバランスを見つけることができます。
# Example of how different shot counts might affect probabilities # With 100 shots: State |000⟩: 0.3100 (±0.0460) State |001⟩: 0.1800 (±0.0384) # With 2000 shots: State |000⟩: 0.3025 (±0.0103) State |001⟩: 0.1750 (±0.0085) # With 10000 shots: State |000⟩: 0.3002 (±0.0046) State |001⟩: 0.1752 (±0.0038)
#define FEATURES_COUNT 7
市場分析のために量子回路で使用される入力機能の数を定義します。次の7つの機能を詳しく見てみましょう。
// 1. Normalized price range features[0] = ((rates[0].high - rates[0].low) / rates[0].close) * 2 - 1; // 2. Normalized volatility features[1] = (CalculateVolatility(m_returns, MathMin(12, m_lookback_bars)) / 0.01) * 2 - 1; // 3. Momentum features[2] = MathMax(MathMin(CalculateMomentum(m_returns, MathMin(24, m_lookback_bars)) * 100, 1), -1); // 4-5. Time components (hour of day encoded in circular form) features[3] = MathSin(2 * M_PI * dt.hour / 24.0); features[4] = MathCos(2 * M_PI * dt.hour / 24.0); // 6. Price deviation from SMA features[5] = MathMax(MathMin((rates[0].close - sma) / sma, 1), -1); // 7. Latest return features[6] = MathMax(MathMin(m_returns[0] * 100, 1), -1);
量子回路の一貫したスケーリングを確保するために、すべての特徴は[-1,1]の範囲に正規化されます。これは特徴量を追加または削除することで変更できます。
技術的な考慮事項と制限
この量子に着想を得たシステムは有望な可能性を示していますが、一定の限界を認識することが重要です。注目すべきは、これは実際の量子計算ではなく、シミュレートされた量子プロセスであるということです。リアルタイム処理の要件はパフォーマンスに影響を与える可能性があり、市場状況の変化は予測の精度に影響を与える可能性があります。これらの要因を軽減するには、取引フレームワークに堅固なリスク管理対策を統合することが重要です。
#define HOUR_LOOKBACK 24
履歴データ分析のデフォルトの時間ウィンドウを定義し、24時間に設定します。このパラメータは、取引システムが市場パターンを分析し、さまざまな指標を計算する方法において重要な役割を果たします。
ルックバック期間は、システム内のいくつかの重要な計算に影響します。ボラティリティを分析する場合、コードは最大12期間(ルックバックの半分)を使用して、リターンの標準偏差を計算します。モメンタム計算では、24期間全体を使用して平均価格変動を計算します。これにより、最近の市場動向と長期的な傾向のバランスが保たれます。
24時間のルックバックは、毎日の市場サイクル全体を捉えるために選択されたものと思われます。これは、外国為替市場が主要な取引セッション(アジア、ヨーロッパ、アメリカのセッション)の開始と終了により24時間の周期的なパターンを示すことが多いため、理にかなっています。各セッションでは、取引量や価格行動パターンが異なります。
取引のニーズに応じてこの値を変更できます。ルックバック期間を短くすると(12時間など)、システムは最近の市場の変化に敏感になりますが、ノイズの影響を受けやすくなる可能性があります。より長いルックバック(48時間など)では、より安定したシグナルが提供されますが、市場の変化に対する反応が遅くなる可能性があります。HOUR_LOOKBACKを変更すると、より多くの履歴データを保存および分析する必要があるため、メモリの使用量と処理時間に影響することに注意してください。
// Input parameters input int InpPredictBars = 2; // Predict Bars (1-5) input double InpMinMove = 0.00001; // Minimum Move input double InpMinConfidence = 0.15; // Minimum Confidence input int InpLogInterval = 1; // Log Interval input int InpLookbackBars = 200; // Lookback Bars for Analysis
「InpPredictBars = 2」は、システムが何バー先を予測しようとするかを表します。値が2の場合、システムは次の2つのバーの価格変動を予測します。予測は期間が長くなるにつれて精度が低下する傾向があるため、範囲は1~5バーに制限されます。値が小さいほど(1など)、より即時の予測が可能になりますが、大きな動きを見逃す可能性があります。一方、値が大きいほど(4~5など)、より長い傾向を捉えようとしますが、精度が低くなる可能性があります。
「InpMinMove = 0.00001」は、予測が成功したと見なすために必要な最小の価格変動を設定します。外国為替ペアの場合、これは通常1ピップ(5桁のブローカーの場合は0.00001)に設定されます。これにより、単なる市場ノイズである可能性のある非常に小さな価格変動がシステムによってカウントされなくなります。戦略に応じて、より保守的な取引のためにこれを増やしたり、より積極的な取引のためにこれを減らしたりすることができます。
「InpMinConfidence = 0.15」(15%)は、予測を真剣に受け止めるために必要な信頼度の閾値です。量子システムは、信頼レベルが0から1の間の予測を生成します。信頼度が0.15未満の予測は「中立」とみなされ、無視されます。値が高いほど(0.25など)、システムの選択性は高まりますが、生成される信号は少なくなります。一方、値が低いほど、生成される信号は多くなりますが、品質が低下する可能性があります。
「InpLogInterval = 1」は、システムがパフォーマンスメトリックをログに記録する頻度(期間単位)を決定します。値が1の場合、すべての期間がログに記録されます。これはシステムパフォーマンスを監視するのに役立ちますが、ログ記録が頻繁すぎるとパフォーマンスに影響する可能性があります。ライブ取引ではこの値を増やす可能性があります。
「InpLookbackBars = 200」は、システムが分析に使用する履歴バーの数を設定します。200本のバーがあるため、システムには特徴とパターンを計算するのに十分な量の履歴データがあります。バーの数が多いほど(500など)、より多くの履歴コンテキストが提供されますが、より多くの処理能力が必要になります。一方、バーの数が少ないほど、最近の市場の変化に敏感になりますが、長期的なパターンを見逃す可能性があります。
これらのパラメータは、EAを実行する前にMetaTraderプラットフォームで調整できますが、適切な組み合わせを見つけるには、多くの場合、履歴データでテストし、ライブパフォーマンスを監視する必要があります。
今後の展望
量子コンピューティング技術の進展に伴い、取引においてより複雑なアプリケーションが登場することが予想されます。現在のシステムは量子力学に影響を受けたアルゴリズムを使用していますが、これは近い将来実現可能となる可能性のあるものの始まりにすぎません。次回の投稿では、量子コンピューティングが取引にどのように活用されているかをさらに深掘りし、より複雑で洗練されたアプリケーションを紹介する予定です。
EAの例
このマルチセッションForex EAは、量子に着想を得たを得たアルゴリズムを採用し、各時間枠に特定のパラメーターと分析方法を利用して、ヨーロッパ、アメリカ、アジアのセッション間で取引をおこないます。
このシステムの強みは、動的なポジションサイジング、アンチマーチンゲールプログレッション、株式ベースの保護を組み合わせた多層的なリスク管理にあります。量子に着想を得た分析システムを通じて、ATR、モメンタム、さまざまなテクニカル指標などの複数の市場特性を分析し、堅牢な取引シグナルを生成します。
重要な革新は、適応型トレーリングストップシステムと多時間枠分析コンポーネントであり、これにより、取引が短期(H1)と長期(H4)の両方のトレンドと一致することが保証されます。さらに、Maximum Favorable Excursion (MFE)アナライザーは、過去の価格動向に基づいて終了ポイントを継続的に最適化し、利益の可能性を最大化します。
これは、セッションと時間の選択、MFE制御、リスク管理を伴った、ほぼコインを投げる予測で達成できるものの簡単な例です。
このセットアップは、MFEから利益を得て、予測を使用してロングまたはショートを狙うだけです。このEAには大量のオプションと構成があるため、大規模な最適化をおこなうことはお勧めしません。
セットアップ#2
設定は同じですが、入力が異なります。MQL5クラウドネットワーク最適化は、スペインからは実行できないため(政治的な理由など)、私は実行できません。また、ローカルでは時間がかかりすぎるため、実行できませんが、このEAには多くのオプションがありますので、それらを使用してEAを完成させてください。時間とリソースに余裕がある場合は、大規模な最適化をおこなって、最適なものを確認してください。
注:特徴が変更され、戦略は完全に洗練されていませんが、例として役立つため、それを実行して完了することができます。ロットサイズの決定とリスク管理を実現し、さらに多くの作業を完了する必要があります。これはあくまで一例であり、取引は自己責任でおこなう必要があります。しかし、自分自身のEAを作成するための良い出発点となるでしょう。入力が多すぎるため、EURUSD1時間枠で使用した入力セットの1つ(最適化なし)をアップロードします。また、この例ではmqhを変更しましたが、自分でこれをおこなうこともできます。
このEAをどのように進めていくかは、まずこの記事を理解し、その後、重要な入力を確認して、それらがどこに配置されるか、その関数がどこに配置されるかなどを確認する必要があります。重要な関数はOnTick()です。OnTickの関数がどこから来ているのかを確認し、そこから変更を加え始めてください。このように始めれば、学習曲線は簡単になります。
結論
この研究では、量子コンピューティングの原理が取引業界でどのように活用できるかを調査しました。PythonプロトタイプからMQL5実装に移行し、量子テーマの取引システムを作成しました。シミュレーションと実際の取引環境の両方で安定したヒット率が得られており、結果は有望です。このアプローチは、従来のモデルが頻繁に失敗する高ボラティリティの状況で特に成功しました。これは量子シミュレーションであり、市場状況やデータ品質などの変数がパフォーマンスに影響を及ぼす可能性があることを覚えておくことが重要です。
要約すると、量子に着想を得た取引システムのこの調査は、量子コンピューティングの原理を活用して金融市場の複雑さに取り組むことで、アルゴリズム取引の未来を垣間見ることができます。MQL5への量子概念の統合は、実用的な展開に向けた重要な一歩となりますが、計算の高度化と現実世界への適用性の間で慎重にバランスを取る必要性も強調しています。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16300






- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索