Initial commit: MQL5 Scripts Collection (MetaTrader 5)

This commit is contained in:
GeneralTradingSarl
2025-06-24 00:33:04 +01:00
commit 60a549d89c
1959 changed files with 31907 additions and 0 deletions
@@ -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!
---
![Screenshot](library.png)
![Screenshot](script.png)
## Source Files
- `candle_signs.mq5`
---
> Made with ❤️ for the trading community.
@@ -0,0 +1,156 @@
//+------------------------------------------------------------------+
//| Candle_Signs`.mq5 |
//| Copyright 2025, Rajesh Kumar Nait |
//| https://www.mql5.com/en/users/rajeshnait/seller |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Rajesh Kumar Nait"
#property link "https://www.mql5.com/en/users/rajeshnait/seller"
#property version "1.00"
#include <Generic/HashMap.mqh>
class CandlePatternDetector {
private:
CHashMap<string, string> patternDatabase;
double tolerance;
string GenerateSignature(double open, double high, double low, double close) {
// Normalize candle dimensions
double bodySize = MathAbs(close - open);
double upperWick = high - MathMax(open, close);
double lowerWick = MathMin(open, close) - low;
double totalSize = high - low;
// Avoid division by zero
if(totalSize == 0) return "DOJI";
// Calculate ratios
double bodyRatio = bodySize / totalSize;
double upperWickRatio = upperWick / totalSize;
double lowerWickRatio = lowerWick / totalSize;
// Generate fuzzy signature
string signature = "";
// Body classification
if(bodyRatio < 0.1) signature += "DOJI_";
else if(bodyRatio < 0.3) signature += "SMALL_";
else if(bodyRatio < 0.7) signature += "MEDIUM_";
else signature += "LONG_";
// Wick classification
if(upperWickRatio < 0.1) signature += "NO_UPPER_WICK_";
else if(upperWickRatio < 0.3) signature += "SHORT_UPPER_WICK_";
else if(upperWickRatio < 0.7) signature += "MEDIUM_UPPER_WICK_";
else signature += "LONG_UPPER_WICK_";
if(lowerWickRatio < 0.1) signature += "NO_LOWER_WICK_";
else if(lowerWickRatio < 0.3) signature += "SHORT_LOWER_WICK_";
else if(lowerWickRatio < 0.7) signature += "MEDIUM_LOWER_WICK_";
else signature += "LONG_LOWER_WICK_";
// Direction
signature += (close > open) ? "BULLISH" : "BEARISH";
return signature;
}
void LoadDemoPatterns() {
// Common bullish patterns
AddCustomPattern(1.0, 1.1, 0.95, 1.08, "Bullish Engulfing");
AddCustomPattern(1.0, 1.05, 0.98, 1.03, "Hammer");
AddCustomPattern(1.0, 1.02, 0.99, 1.01, "Doji Star");
AddCustomPattern(1.0, 1.15, 0.9, 1.14, "Long Bullish Marubozu");
// Common bearish patterns
AddCustomPattern(1.0, 1.05, 0.9, 0.92, "Bearish Engulfing");
AddCustomPattern(1.0, 1.02, 0.85, 0.86, "Hanging Man");
AddCustomPattern(1.0, 1.01, 0.99, 1.0, "Gravestone Doji");
AddCustomPattern(1.0, 1.02, 0.8, 0.81, "Long Bearish Marubozu");
// Neutral patterns
AddCustomPattern(1.0, 1.01, 0.99, 1.0, "Perfect Doji");
AddCustomPattern(1.0, 1.05, 0.95, 1.0, "Spinning Top");
}
public:
CandlePatternDetector(double tol=0.2) {
tolerance = tol;
LoadDemoPatterns();
Print("Loaded ", patternDatabase.Count(), " demo candle patterns");
}
string FindCandleSign(int index) {
double open = iOpen(NULL, 0, index);
double high = iHigh(NULL, 0, index);
double low = iLow(NULL, 0, index);
double close = iClose(NULL, 0, index);
string currentSignature = GenerateSignature(open, high, low, close);
string value;
// Exact match
if(patternDatabase.TryGetValue(currentSignature, value))
return value;
// Fuzzy match with tolerance
string bestMatch = "";
double bestScore = 0;
// Correct HashMap iteration using CopyTo
string keys[];
string values[];
patternDatabase.CopyTo(keys, values);
for(int i = 0; i < ArraySize(keys); i++) {
double similarity = CompareSignatures(currentSignature, keys[i]);
if(similarity > bestScore && similarity >= (1.0 - tolerance)) {
bestScore = similarity;
bestMatch = values[i];
}
}
if(bestMatch != "")
return "SIMILAR_TO: " + bestMatch + " (Confidence: " + DoubleToString(bestScore*100, 1) + "%)";
return "UNKNOWN_PATTERN";
}
double CompareSignatures(string sig1, string sig2) {
string parts1[], parts2[];
StringSplit(sig1, '_', parts1);
StringSplit(sig2, '_', parts2);
if(ArraySize(parts1) != ArraySize(parts2))
return 0.0;
int matches = 0;
for(int i = 0; i < ArraySize(parts1); i++) {
if(parts1[i] == parts2[i])
matches++;
}
return (double)matches / ArraySize(parts1);
}
void AddCustomPattern(double open, double high, double low, double close, string comment) {
string signature = GenerateSignature(open, high, low, close);
patternDatabase.Add(signature, comment);
}
};
// Global instance
CandlePatternDetector *detector;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
// Example usage
void OnStart() {
detector = new CandlePatternDetector(0.3); // 30% tolerance
int currentCandle = 1; // Most recent closed candle
string patternInfo = detector.FindCandleSign(currentCandle);
Print("Candle Pattern: ", patternInfo);
delete detector;
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB