Initial commit: MQL5 Scripts Collection (MetaTrader 5)
This commit is contained in:
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
+20
@@ -0,0 +1,20 @@
|
||||
# 🚀 Unlock the Power of Trading!
|
||||
|
||||
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
|
||||
|
||||
---
|
||||
|
||||
**Support the project:**
|
||||
- Star this repository on GitHub
|
||||
- Share it with your trading friends
|
||||
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
|
||||
|
||||
---
|
||||

|
||||

|
||||
|
||||
## Source Files
|
||||
- `map_symbol.mq5`
|
||||
|
||||
---
|
||||
> Made with ❤️ for the trading community.
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
+113
@@ -0,0 +1,113 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| Map Symbol.mq5 |
|
||||
//| Copyright 2024, MetaQuotes Ltd. |
|
||||
//| https://www.mql5.com |
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "Copyright 2024, MetaQuotes Ltd."
|
||||
#property link "https://www.mql5.com/en/users/envex"
|
||||
#property version "1.00"
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Script program start function |
|
||||
//+------------------------------------------------------------------+
|
||||
// Declaration of an input parameter to specify the base symbol
|
||||
|
||||
string inputSymbol = "EURUSD"; // Base symbol entered by the user
|
||||
|
||||
// The main function of the script
|
||||
void OnStart()
|
||||
{
|
||||
// Retrieve all visible symbols in the Market Watch window
|
||||
string marketWatchSymbols[];
|
||||
int totalSymbols = SymbolsTotal(true); // Total number of symbols visible in Market Watch
|
||||
ArrayResize(marketWatchSymbols, totalSymbols); // Resize the array to store the symbols
|
||||
|
||||
// Fill the array with symbol names
|
||||
for(int i = 0; i < totalSymbols; i++)
|
||||
marketWatchSymbols[i] = SymbolName(i, true);
|
||||
|
||||
// Find the most similar symbol to the one specified by the user
|
||||
string mappedSymbol = FindMostSimilarSymbol(inputSymbol, marketWatchSymbols);
|
||||
|
||||
// Display the result as a comment on the chart
|
||||
Comment("The entered symbol is: ", inputSymbol, "\n",
|
||||
"The most similar symbol found is: ", mappedSymbol);
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Function to calculate the Levenshtein distance between strings |
|
||||
//+------------------------------------------------------------------+
|
||||
// This function implements the Levenshtein algorithm to calculate the minimum difference
|
||||
// (insertions, deletions, substitutions) between two strings.
|
||||
int LevenshteinDistance(string s, string t)
|
||||
{
|
||||
int len_s = StringLen(s); // Length of the first string
|
||||
int len_t = StringLen(t); // Length of the second string
|
||||
|
||||
// Handle empty strings: if one is empty, the distance equals the length of the other
|
||||
if(len_s == 0)
|
||||
return len_t;
|
||||
if(len_t == 0)
|
||||
return len_s;
|
||||
|
||||
// Declare and resize a dynamic array to store the distance matrix
|
||||
int total_size = (len_s + 1) * (len_t + 1);
|
||||
int dist_matrix[];
|
||||
ArrayResize(dist_matrix, total_size);
|
||||
|
||||
// Initialize the first column of the matrix
|
||||
for(int i = 0; i <= len_s; i++)
|
||||
dist_matrix[i * (len_t + 1)] = i;
|
||||
|
||||
// Initialize the first row of the matrix
|
||||
for(int j = 0; j <= len_t; j++)
|
||||
dist_matrix[j] = j;
|
||||
|
||||
// Fill the matrix by calculating the minimum distances
|
||||
for(int i = 1; i <= len_s; i++)
|
||||
{
|
||||
for(int j = 1; j <= len_t; j++)
|
||||
{
|
||||
// Calculate the substitution cost
|
||||
int cost = (StringGetCharacter(s, i - 1) == StringGetCharacter(t, j - 1)) ? 0 : 1;
|
||||
|
||||
// Calculate the costs of deletion, insertion, and substitution
|
||||
int deletion = dist_matrix[(i - 1) * (len_t + 1) + j] + 1;
|
||||
int insertion = dist_matrix[i * (len_t + 1) + (j - 1)] + 1;
|
||||
int substitution = dist_matrix[(i - 1) * (len_t + 1) + (j - 1)] + cost;
|
||||
|
||||
// Choose the minimum cost and assign it to the current cell
|
||||
dist_matrix[i * (len_t + 1) + j] = MathMin(deletion, MathMin(insertion, substitution));
|
||||
}
|
||||
}
|
||||
|
||||
// Return the value in the last cell of the matrix as the total distance
|
||||
return dist_matrix[len_s * (len_t + 1) + len_t];
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Function to find the most similar symbol |
|
||||
//+------------------------------------------------------------------+
|
||||
// Compares a base symbol with a list of symbols and returns the most similar one
|
||||
string FindMostSimilarSymbol(string baseSymbol, string &symbolList[])
|
||||
{
|
||||
int minDistance = INT_MAX; // Minimum distance initialized to the maximum integer value
|
||||
string closestSymbol = ""; // Variable to store the closest symbol
|
||||
|
||||
// Iterate over the symbol list and calculate the distance for each
|
||||
for(int i = 0; i < ArraySize(symbolList); i++)
|
||||
{
|
||||
int distance = LevenshteinDistance(baseSymbol, symbolList[i]); // Calculate the distance
|
||||
|
||||
// If a smaller distance is found, update the values
|
||||
if(distance < minDistance)
|
||||
{
|
||||
minDistance = distance;
|
||||
closestSymbol = symbolList[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Return the closest symbol found
|
||||
return closestSymbol;
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
Reference in New Issue
Block a user