
プライスアクション分析ツールキットの開発(第3回):Analytics Master EA
内容
はじめに
前回のエピソードで分析コメントスクリプトを開発しましたが、そのプロパティに関する制限があることがわかりました。以下にその概要を説明します。Analytical Commentスクリプトが取引コミュニティに与えた大きな影響を認識しつつ、Analytics Masterと呼ばれるエキスパートアドバイザー(EA)を開発しました。 このEAは同じ分析を提供するだけでなく、より優れた取引洞察のための追加のメトリックも提供します。この新しいツールには、スクリプトのようにメトリック情報を一度しか書き込めない制限がなく、2時間ごとに継続的にメトリックを更新できる機能 など、いくつかの利点があります。 EAは分析の精度を向上させ、ユーザーに最新の情報を提供します。
場合によっては、EAにスクリプトのような機能を統合し、さらなる性能向上を図ることも可能です。つまり、通常スタンドアロンスクリプトが実行するアクションに似た特定のタスクを、EAのコード内で直接実装できるということです。EAは、プログラムコード、カスタマイズ可能な設定、取引ロジック、リスク管理を組み合わせることで、取引戦略をより効率的に自動化 します。以下に、スクリプトとEAの比較を表にまとめました。
スクリプト | EA |
---|---|
特定のタスクを実行し、ほぼ瞬時に実行を完了するように設計されています。タスクが完了すると終了し、継続して実行することはできません。 | バックグラウンドで継続的に実行され、市場の状況を監視し、事前に定義された条件に基づいて取引を実行します。 |
ティックやタイマーなどのイベントを処理できません。手動で起動した場合にのみコードを実行できます。 | 市場のイベントや変化に対応できるため(OnTick、OnTimer、OnTradeなど)、取引戦略の応答性が向上します。 |
通常、スクリプトは取引(開始、変更、または終了)を実行できますが、進行中の取引は管理できません。一度実行されると、取引の状態を監視したり、それに反応したりすることはできません。 | ポジションを動的に管理し、取引条件を追跡し、トレーリングストップを適用し、市場状況に基づいて戦略を動的に調整できます。 |
通常、1回の実行用に設計されており、ユーザーが手動で実行するたびに特定の構成(入力パラメータなど)が必要になる場合があります。 | セッション間でユーザー定義のパラメータを維持し、起動後はユーザーの介入なしに実行できます。 |
単純なアクションベースのタスク(例:注文の一括クローズやインジケーターの適用)に最適です。 | 継続的な意思決定と市場状況への適応を必要とする複雑なロジック、アルゴリズム、システムを組み込むことができます。 |
履歴データを分析できますが、再実行せずに新しい受信データに継続的に適応したり学習したりすることはできません。 | 履歴データを分析し、リアルタイムの受信データに基づいて意思決定をおこなうことで、適応型戦略が可能になります。 |
実行と終了が速いため、継続的に実行されるEAと比較して、実行時のパフォーマンスへの影響も限られています。 | 継続的に実行されるため、特に多くの取引を管理したり複雑なアルゴリズムを使用したりする場合は、CPUとメモリの消費量が増加する可能性があります。 |
以前のツール(Analytical Commentツール)のレビュー
弊社の以前のツールであるAnalytical Commentスクリプトは、次のような前取引日の主要な指標を分析するように設計されていました。
- 前日の始値
- 前日の終値
- 前日の取引量
- 当日の取引量
- 支持と抵抗のレベル
この情報は、垂直に整理された表形式で表示されます。さらに、図1に示すように、過去の始値と終値、および取引量に基づいて、潜在的な市場動向の予測が計算されています。
図2:データプレゼンテーション
私たちのスクリプトはチャート上にトレンドラインをうまく描画し、主要な支持レベルと抵抗レベルを強調表示しました。市場の方向性の予測も良好だったようです。図2では、Analytical Commentツールの結果をまとめています。
図2:Analytical Commentの結果
Analytical Commentスクリプトの詳細については、次のリンクをクリックしてください:https://www.mql5.com/ja/articles/15927
Analytics Master (EA)の概要
スクリプトからEAに移行すると、以前のツールのレビューで述べたように、以前はスクリプトによって提供されていた一部の情報は、EAを通じて引き続きアクセスできるようになります。ただし、EAは追加の洞察も提供し、元のスクリプトの機能を超えるタスクを実行します。
さらに、EAは、口座残高に基づいて、市場のボラティリティ、市場スプレッド、エクイティ、残高、および可能な最小および最大のロットサイズを計算できるようになりました。この情報を知ることがなぜ重要なのか、さらに詳しく説明します。
- 市場のボラティリティ
ボラティリティは、指定された期間におけるデータの平均値付近の分散を統計的に測定したものです。市場のボラティリティを計算することは、金融市場における効果的なリスク管理、取引実行、戦略的計画にとって非常に重要です。このEAは市場のボラティリティの計算を自動化し、プロセスを合理化してユーザーフレンドリーにします。市場のボラティリティは通常、以下の式を使用して測定されますが、EAでは使いやすさを考慮してこの関数を簡素化しています。
図3:ボラティリティの計算式
ボラティリティを計算するには、まず上記のように標準偏差を決定します。年間ボラティリティを取得するには、標準偏差に年間の総取引日数の平方根(約252)を掛けます。詳細はhttps://quantra.quantinsti.com/glossary/Volatilityでご覧ください。
- 市場スプレッド
市場スプレッドは、単に「スプレッド」と呼ばれることが多く、金融市場における特定の資産の売り値と買い値の差のことです。市場スプレッドの値を知ることが重要な理由の一つは、取引コストを正確に評価することです。スプレッドを理解することで、トレーダーや投資家はポジションのエントリーおよびエグジット時にかかるコストを把握しやすくなります。
スプレッドが狭い場合、通常は取引コストが低く、より有利な価格での約定が可能であることを意味します。これは、高頻度取引(HFT)を行うトレーダーや、日々多数の取引を実行するトレーダーにとって特に重要です。逆に、スプレッドが広いと取引コストが高くなり、戦略の見直しや、よりコスト効率の良い別の資産を選択する必要性が生じる可能性があります。したがって、市場スプレッドを把握することは、取引の収益性や全体的な投資パフォーマンスに直接影響を与える重要な要素となります。
図4:市場スプレッドの計算式
- 可能なロットサイズ
トレーダーの利便性を向上させるために、私たちのEAは市場情報の計算を簡素化し、2時間ごとにデータを更新します。これにより、トレーダーは常に最新の市場情報を把握し、より正確で戦略的な意思決定をおこなうことができます。
EAコードの調査(主な機能と特徴)
コードにはいくつかの機能が含まれています。
- 前日と当日の取引データを取得して表示
- 価格変動に基づいて市場の方向性を分析
- チャート上にトレンドラインを描画
- リスク管理の原則に基づいてポジションサイズを計算
以下はEAのコードです。
//+------------------------------------------------------------------+ //| Analytics Master EA.mq5| //| Copyright 2024, Christian Benjamin| //| https://www.mql5,com| //+------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/ja/users/lynnchris" #property description "EA for market analysis and commenting" #property version "1.0" #property strict // Inputs for risk management input double RiskPercentage = 1.0; // Percentage of account balance to risk per trade input double StopLossMultiplier = 1.0; // Multiplier for determining the stop loss distance input int ATR_Period = 14; // Period for ATR calculation // Global variables for storing values datetime lastUpdateTime = 0; double previousDayOpen, previousDayClose, previousDayHigh, previousDayLow; double previousDayVolume; double currentDayVolume; double support, resistance; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { lastUpdateTime = 0; // Set the initial update time return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0); // Clean up any drawn objects on the current chart } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { UpdateMetrics(); // Call to the function that fetches and displays the metrics } //+------------------------------------------------------------------+ //| Update metrics and display them | //+------------------------------------------------------------------+ void UpdateMetrics() { // Check if 2 hours have passed since the last update if(TimeCurrent() - lastUpdateTime >= 2 * 3600) { // Fetch previous day's data datetime prevDay = iTime(NULL, PERIOD_D1, 1); previousDayOpen = iOpen(NULL, PERIOD_D1, 1); previousDayClose = iClose(NULL, PERIOD_D1, 1); previousDayHigh = iHigh(NULL, PERIOD_D1, 1); previousDayLow = iLow(NULL, PERIOD_D1, 1); previousDayVolume = iVolume(NULL, PERIOD_D1, 1); // Fetch current day's volume currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Volume for today // Calculate support and resistance support = previousDayLow - (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level resistance = previousDayHigh + (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level // Determine market direction string marketDirection = AnalyzeMarketDirection(previousDayOpen, previousDayClose, previousDayHigh, previousDayLow); // Calculate possible lot size based on risk management double lotSize = CalculateLotSize(support, resistance); // Retrieve account metrics double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE); double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY); // Calculate market spread manually double marketBid = SymbolInfoDouble(_Symbol, SYMBOL_BID); double marketAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double marketSpread = marketAsk - marketBid; // Calculate spread double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); double maxLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); // Calculate market volatility using ATR int atrHandle = iATR(NULL, PERIOD_H1, ATR_Period); // Get the ATR handle double atrValue = 0.0; if(atrHandle != INVALID_HANDLE) // Check if the handle is valid { double atrBuffer[]; // Array to hold the ATR values if(CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) // Copy the latest ATR value { atrValue = atrBuffer[0]; // Retrieve the ATR value from the buffer } IndicatorRelease(atrHandle); // Release the indicator handle } // Create the output string including the last update time string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES); string infoStr = StringFormat("Prev Day Open: %.2f\nPrev Day Close: %.2f\nPrev Day High: %.2f\nPrev Day Low: %.2f\n" "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\nMarket Direction: %s\n" "Support: %.2f\nResistance: %.2f\nAccount Balance: %.2f\nAccount Equity: %.2f\n" "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n" "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f", previousDayOpen, previousDayClose, previousDayHigh, previousDayLow, previousDayVolume, currentDayVolume, marketDirection, support, resistance, accountBalance, accountEquity, marketSpread, minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize); // Log the information Print(infoStr); // Display information on the chart Comment(infoStr); // Remove old trend lines and create new ones for previous day's high/low ObjectsDeleteAll(0); // Draw continuous trend lines DrawContinuousTrendLine("PrevDayHigh", previousDayHigh); DrawContinuousTrendLine("PrevDayLow", previousDayLow); // Update last update time lastUpdateTime = TimeCurrent(); } } //+------------------------------------------------------------------+ //| Analyze market direction | //+------------------------------------------------------------------+ string AnalyzeMarketDirection(double open, double close, double high, double low) { string direction; if(close > open) { direction = "Bullish"; } else if(close < open) { direction = "Bearish"; } else { direction = "Neutral"; } // Include current trends or patterns based on high and low for further analysis if(high > open && high > close) { direction += " with bullish pressure"; // Example addition for context } else if(low < open && low < close) { direction += " with bearish pressure"; // Example addition for context } return direction; } //+------------------------------------------------------------------+ //| Draw a continuous trend line to the left on the chart | //+------------------------------------------------------------------+ void DrawContinuousTrendLine(string name, double price) { datetime startTime = TimeCurrent() - 720 * 3600; // Extend 24 hours into the past ObjectCreate(0, name, OBJ_TREND, 0, startTime, price, TimeCurrent(), price); ObjectSetInteger(0, name, OBJPROP_COLOR, (StringFind(name, "High") >= 0) ? clrRed : clrBlue); ObjectSetInteger(0, name, OBJPROP_WIDTH, 2); // Set thickness of the line ObjectSetInteger(0, name, OBJPROP_XSIZE, 0); // Set this property to extend the line infinitely to the left } //+------------------------------------------------------------------+ //| Calculate the lot size based on risk management | //+------------------------------------------------------------------+ double CalculateLotSize(double support, double resistance) { double stopLossDistance = MathAbs((support - resistance) * StopLossMultiplier); double riskAmount = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercentage / 100.0); // Get the tick size for the current symbol double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); // Calculate the lot size based on the stop loss and tick size double lotSize = riskAmount / (stopLossDistance / tickSize); // Adjusted for the correct pip size lotSize = NormalizeDouble(lotSize, 2); // Normalize the lot size to two decimal places // Ensure lot size is above minimum lot size allowed by broker double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); if(lotSize < minLotSize) lotSize = minLotSize; return lotSize; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
コードの内訳
1. 初期化とプロパティ
input double RiskPercentage = 1.0; // Percentage of account balance to risk per trade input double StopLossMultiplier = 1.0; // Multiplier for determining the stop loss distance input int ATR_Period = 14; // Period for ATR calculation // Global variables for storing values datetime lastUpdateTime = 0; double previousDayOpen, previousDayClose, previousDayHigh, previousDayLow; double previousDayVolume; double currentDayVolume; double support, resistance;
入力パラメータを使用すると、ユーザーは取引の好みに応じてEAの動作をカスタマイズできます。グローバル変数は、前日の始値、終値、高値、安値、取引量、支持/抵抗レベルなどの履歴データを格納するために宣言されます。
2. OnInitおよびOnDeinit関数
int OnInit() { lastUpdateTime = 0; // Set the initial update time return INIT_SUCCEEDED; }
OnInit:この関数は、EAが初期化されるときに実行されます。最終更新時刻をゼロに設定します。
void OnDeinit(const int reason) { ObjectsDeleteAll(0); // Clean up any drawn objects on the current chart }
OnDeinit:この関数は、EAが削除または停止されたときに呼び出され、すべてのチャートオブジェクトを削除してクリーンアップします。
3. OnTickのメインロジック
void OnTick() { UpdateMetrics(); // Call to the function that fetches and displays the metrics }
この関数はティック(価格変更)ごとにトリガーされます。UpdateMetrics関数を呼び出してデータを収集し、分析します。
4. UpdateMetrics関数
void UpdateMetrics() { if (TimeCurrent() - lastUpdateTime >= 2 * 3600) // Check if 2 hours have passed since last update { // Fetch previous day's data datetime prevDay = iTime(NULL, PERIOD_D1, 1); previousDayOpen = iOpen(NULL, PERIOD_D1, 1); previousDayClose = iClose(NULL, PERIOD_D1, 1); previousDayHigh = iHigh(NULL, PERIOD_D1, 1); previousDayLow = iLow(NULL, PERIOD_D1, 1); previousDayVolume = iVolume(NULL, PERIOD_D1, 1); // Fetch current day's volume currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Volume for today // Calculate support and resistance support = previousDayLow - (previousDayHigh - previousDayLow) * 0.382; resistance = previousDayHigh + (previousDayHigh - previousDayLow) * 0.382; // Determine market direction string marketDirection = AnalyzeMarketDirection(previousDayOpen, previousDayClose, previousDayHigh, previousDayLow); // Calculate possible lot size based on risk management double lotSize = CalculateLotSize(support, resistance); // Retrieve account metrics double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE); double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY); // Calculate market spread manually double marketBid = SymbolInfoDouble(_Symbol, SYMBOL_BID); double marketAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double marketSpread = marketAsk - marketBid; // Calculate market volatility using ATR int atrHandle = iATR(NULL, PERIOD_H1, ATR_Period); double atrValue = 0.0; if (atrHandle != INVALID_HANDLE) // Check if the handle is valid { double atrBuffer[]; if (CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) { atrValue = atrBuffer[0]; } IndicatorRelease(atrHandle); // Release the indicator handle } // Create the output string including the last update time string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES); string infoStr = StringFormat("Prev Day Open: %.2f\nPrev Day Close: %.2f\nPrev Day High: %.2f\nPrev Day Low: %.2f\n" "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\nMarket Direction: %s\n" "Support: %.2f\nResistance: %.2f\nAccount Balance: %.2f\nAccount Equity: %.2f\n" "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n" "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f", previousDayOpen, previousDayClose, previousDayHigh, previousDayLow, previousDayVolume, currentDayVolume, marketDirection, support, resistance, accountBalance, accountEquity, marketSpread, minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize); // Log the information Print(infoStr); // Display information on the chart Comment(infoStr); // Remove old trend lines and create new ones for previous day's high/low ObjectsDeleteAll(0); // Draw continuous trend lines DrawContinuousTrendLine("PrevDayHigh", previousDayHigh); DrawContinuousTrendLine("PrevDayLow", previousDayLow); // Update last update time lastUpdateTime = TimeCurrent(); } }
- 時間の確認:この関数は、最後の更新から2時間が経過した場合にのみ実行されるため、過剰な計算が最小限に抑えられます。
- データ取得:iTime、iOpen、iClose、iHigh、iLow、iVolumeは、前日と当日のデータを収集するために使用されます。
- 支持と抵抗:このスクリプトは、前日の安値と高値に基づいてフィボナッチレベルを計算します。
- 市場動向分析:AnalyzeMarketDirection関数を呼び出して市場の状況を評価します。
- ロットサイズの計算:リスク管理の原則に基づいて取引する金額を決定するために、CalculateLotSize関数を呼び出します。
- 口座と市場のメトリック:より良い取引決定のために、口座残高、エクイティ、市場スプレッドを取得します。
- ATR計算:市場のボラティリティを測定するためにAverage True Range (ATR)を取得します。
- 出力情報:関連するメトリックをinfoStr文字列にフォーマットして表示し、Printを使用してログに記録します。
- トレンドラインの作成:古いトレンドラインを消去し、前日の高値と安値に基づいて新しいトレンドラインを作成します。
5. 市場動向分析
string AnalyzeMarketDirection(double open, double close, double high, double low) { string direction; if (close > open) { direction = "Bullish"; } else if (close < open) { direction = "Bearish"; } else { direction = "Neutral"; } // Include current trends or patterns based on high and low for further analysis if (high > open && high > close) { direction += " with bullish pressure"; // Example addition for context } else if (low < open && low < close) { direction += " with bearish pressure"; // Example addition for context } return direction; }
- 市場の方向性を決定する:この関数は、前日の始値、終値、高値、安値を取得して、市場が強気、弱気、または中立であるかを判断します。
- 追加の洞察:高値と安値に基づいてプレッシャー指標をチェックし、市場状況のより文脈的な分析を提供します。
6. トレンドライン描画
void DrawContinuousTrendLine(string name, double price) { datetime startTime = TimeCurrent() - 24 * 3600; // Extend 24 hours into the past ObjectCreate(0, name, OBJ_TREND, 0, startTime, price, TimeCurrent(), price); ObjectSetInteger(0, name, OBJPROP_COLOR, (StringFind(name, "High") >= 0) ? clrRed : clrBlue); ObjectSetInteger(0, name, OBJPROP_WIDTH, 2); // Set thickness of the line ObjectSetInteger(0, name, OBJPROP_XSIZE, 0); // Set this property to extend the line infinitely to the left }
- トレンドラインを描く:この関数は、チャート上に前日の高値または安値のトレンドラインを作成し、それを24時間遡って延長します。
- カスタマイズ:各線には色(高い場合は赤、低い場合は青)と指定された幅があります。
7. ロットサイズの計算
double CalculateLotSize(double support, double resistance) { double stopLossDistance = MathAbs((support - resistance) * StopLossMultiplier); double riskAmount = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercentage / 100.0); // Get the tick size for the current symbol double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); // Calculate the lot size based on the stop loss and tick size double lotSize = riskAmount / (stopLossDistance / tickSize); lotSize = NormalizeDouble(lotSize, 2); // Normalize the lot size to two decimal places // Ensure lot size is above minimum lot size allowed by broker double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); if (lotSize < minLotSize) lotSize = minLotSize; return lotSize; }
- リスク管理:この関数は、ユーザーの口座残高に対する定義されたリスク率と計算されたストップロス距離に基づいてロットサイズを計算します。
- 正規化:ロットサイズがブローカーによって設定された許容範囲内であることを確認します。
コードの実装とテスト
MetaTrader5でのEAの実装:ステップごとのガイド- MetaTrader5を開く:コンピュータでMetaTrader 5取引プラットフォームを起動します。
- MetaEditorにアクセスする:MetaEditorを開くには、メニューバーで[ツール]>[MetaQuotes言語エディタ]をクリックするか、F4キーを押します。あるいは、MetaEditorを別途インストールしている場合は、直接実行することもできます。
- EAを挿入する:MetaEditorで、[ファイル]>[新規作成]>[エキスパートアドバイザー]を選択するか、既存のEAファイル(.mq5)を開きます。新しいEAを作成する場合は、プロンプトに従って名前を付けて定義します。
- EAをコンパイルする:EAコードを編集したら、[コンパイル]ボタンをクリックします(またはF7キーを押します)。エラーがないことを確認してください。コンパイルが成功すると実行可能ファイルが生成されます。
- EAをMetaTrader5にロードする:MetaTrader 5プラットフォームに戻り、ナビゲーターパネルを開きます(Ctrl+N)。コンパイルされたEAは、EAセクションで見つかります。
- EAをチャートに添付する:EAを目的のチャートにドラッグアンドドロップするか、EAを右クリックして[チャートに追加]を選択します。パラメータのカスタマイズのための設定ウィンドウが表示されます。
- 自動取引を有効にする:MetaTrader5ツールバーの[アルゴリズム取引]ボタンが緑色で、自動売買が有効になっていることを確認します(赤色の場合はクリックして有効にします)。プロンプトが表示されたら、EA設定の[自動取引を許可]オプションをオンにします。
- パフォーマンスを監視する:チャート上のEAのパフォーマンスに注目してください。必要に応じて、バックテストに戦略テスターを使用します。
- 必要に応じて設定を調整する:チャート上で右クリックすると、EA設定ウィンドウから直接パラメータや設定を変更できます。
図5:分析結果
図5は、EAをチャートに追加した場合、表示される結果を示しています。
図6:分析結果
上の図6は、主要な市場指標を自動的に計算し、それをチャート形式で表示できるEAの全体的なパフォーマンスを示しています。EAは前日の支持抵抗レベルに基づいてトレンドラインを描画します。最後の2つの図に示されているように、市場情報は2時間ごとに定期的に更新され、最新の更新タイムスタンプも表示されます。
結論
要約すると、Analytics Master EAの導入が成功したことは、自動取引における大きな前進を意味します。このEAは、主要な市場指標の分析を自動化するだけでなく、支持と抵抗のレベルに関する貴重な洞察も提供し、トレーダーがより賢明な意思決定をおこなうのに役立ちます。効果的なリスク管理を統合し、リアルタイムの更新を提供することで、トレーダーが市場の複雑さを自信を持って乗り越えられるようサポートします。全体として、このツールは取引の効率を高め、ユーザーが取引戦略について情報を入手し、積極的に行動できるようにします。
時間をかけてEAを過去のデータでバックテストし、さまざまな市場状況でのパフォーマンスを理解してください。これにより、取引スタイルに合わせて設定を微調整できるようになります。EAによって提供される指標と洞察を定期的に確認します。市場の状況は急速に変化する可能性があるため、タイムリーな意思決定をおこなうには最新情報を把握しておくことが重要です。常にリスク管理戦略を遵守してください。個人のリスク許容度とアカウントサイズに合わせてリスクパーセンテージ設定を調整します。EAからの洞察を補完するために、取引戦略、市場行動、テクニカル分析に関する教育リソースを活用します。問題が発生した場合や改善の提案がある場合は、開発者にフィードバックを提供することを検討してください。ユーザーの入力は、将来の機能強化をおこなう上で非常に貴重です。
これらの推奨事項に従うことで、Analytics Master EAの効果を最大限に高め、全体的な取引エクスペリエンスを向上させることができます。
日付 | ツール名 | 詳細 | バージョン | アップデート | 備考 |
---|---|---|---|---|---|
01/10/24 | Chart Projector | 前日のプライスアクションをゴースト効果でオーバーレイするスクリプト | 1.0 | 初回リリース | Lynnchris Tool Chestの最初のツール |
18/11/24 | Analytical Comment | 前日の情報を表形式で提供し、市場の将来の方向性を予測する | 1.0 | 初回リリース | Lynnchris Tool Chestの2番目のツール |
27/11/24 | Analytics Master | 2時間ごとに市場指標を定期的に更新 | 1.01 | v.2 | Lynnchris Tool Chestの3番目のツール |
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16434




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