
My Fibonacci: The Ultimate Automated Fibonacci Indicator with Professional EA Integration

My Fibonacci: The Ultimate Automated Fibonacci Indicator with Professional EA Integration
Download My Fibonacci: https://www.mql5.com/en/market/product/148676
Introduction
Fibonacci analysis has long been regarded as one of the most powerful tools in technical analysis, yet the manual process of drawing and updating these levels introduces significant subjectivity and inefficiency. My Fibonacci revolutionizes this approach through intelligent automation combined with a sophisticated 20-buffer system designed specifically for Expert Advisor integration.
This indicator represents a quantum leap from traditional manual Fibonacci tools to institutional-grade automated intelligence. By leveraging advanced ZigZag integration, real-time market adaptation, and comprehensive algorithmic accessibility, My Fibonacci provides both visual traders and EA developers with unprecedented market intelligence capabilities.
Core Architecture and Automated Intelligence
ZigZag-Based Swing Detection
The foundation of My Fibonacci lies in its sophisticated integration with the proven ZigZag indicator. Rather than relying on subjective manual placement, the system continuously monitors price action and automatically identifies structurally significant swing points. This eliminates human bias while ensuring Fibonacci levels are drawn exclusively on meaningful market movements.
The automated system employs advanced swing validation algorithms that filter market noise while preserving genuine directional changes. This approach guarantees that every Fibonacci formation represents a legitimate market structure rather than temporary price fluctuations.
Adaptive Market Intelligence
My Fibonacci incorporates real-time market state analysis through dynamic ATR calculations and volatility assessment. The system automatically adapts its behavior based on current market conditions:
Normal Market Conditions: Seven core Fibonacci levels (0%, 23.6%, 38.2%, 50%, 61.8%, 100%, 161.8%)
High Volatility Periods: Ten comprehensive levels including 78.6% and 127.2% for enhanced precision
Market Context Awareness: Automatic adjustment of sensitivity and filtering based on timeframe and volatility
This intelligent adaptation ensures optimal performance across all market environments, from quiet consolidation periods to dynamic trending phases.
Complete Parameter Configuration Guide
Basic Settings Group
Fibonacci Name (inpName)
- Default: "MyFibonacci_v11"
- Purpose: Unique object identifier for chart drawing
- Usage: Enables multiple indicator instances with distinct naming
- Recommendation: Modify for multi-timeframe analysis setups
Main Line Color (inpLineColor)
- Default: Red (clrRed)
- Purpose: Visual appearance of primary Fibonacci trend line
- Usage: Customize for chart aesthetics and visibility preferences
- Recommendation: Choose colors that contrast well with chart background
Levels Color (inpLevelsColor)
- Default: Aqua (clrAqua)
- Purpose: Color scheme for all Fibonacci retracement and extension levels
- Usage: Consistent level identification across multiple charts
- Recommendation: Maintain consistent color scheme for rapid visual recognition
Ray Extension (inpRay)
- Default: False
- Purpose: Controls infinite rightward extension of Fibonacci levels
- Usage: Valuable for forward-looking support/resistance analysis
- Recommendation: Enable for position trading, disable for scalping
ZigZag Configuration Group
ZigZag Depth (inpDepth)
- Default: 12
- Purpose: Minimum bars required to form valid swing point
- Range: 5-25 (timeframe dependent)
- Impact: Lower values increase sensitivity but may generate noise
- Optimization Guide:
- M1-M5 Scalping: 5-8
- M15-H1 Intraday: 8-12
- H4-D1 Swing Trading: 12-18
- Daily+ Position Trading: 15-25
ZigZag Deviation (inpDeviation)
- Default: 5
- Purpose: Minimum price movement percentage to register swing
- Range: 3-10 (market volatility dependent)
- Impact: Prevents minor fluctuations from creating false swings
- Optimization: Increase for choppy markets, decrease for trending markets
ZigZag BackStep (inpBackStep)
- Default: 3
- Purpose: Minimum bars between consecutive swing points
- Range: 2-5
- Impact: Prevents multiple swing identification in close proximity
- Recommendation: Maintain default unless experiencing swing clustering
ZigZag Leg Selection (inpLeg)
- Default: 1 (most recent swing)
- Purpose: Selects which swing formation to use for Fibonacci calculation
- Range: 1-3
- Usage: Higher values utilize earlier swing formations
- Application: Useful for multiple Fibonacci analysis scenarios
Advanced Features Group
Enable Adaptive Levels (inpAdaptiveLevels)
- Default: True
- Purpose: Intelligent level selection based on market volatility
- Impact: Expands from 7 to 10 levels during high volatility
- Algorithm: Monitors ATR ratio against 20-period average
- Trigger: Activates when volatility exceeds 130% of average
Enable Volume Validation (inpVolumeValidation)
- Default: False
- Purpose: Incorporates volume analysis into swing validation
- Function: Confirms swing significance through volume patterns
- Recommendation: Enable for volume-based trading strategies
- Caution: May reduce signal frequency on low-volume instruments
Enable Smart Swing Filtering (inpSmartFiltering)
- Default: True
- Purpose: ATR-based swing quality assessment
- Function: Eliminates insignificant price movements from analysis
- Algorithm: Timeframe-adaptive ATR multiplier system
- Result: Dramatically improves swing point quality
Enable Adaptive Level Colors (inpAdaptiveColors)
- Default: False
- Purpose: Dynamic color coding based on market conditions
- Function: Enhanced visual treatment during high volume/volatility
- Usage: Highlights most relevant support/resistance zones
- Recommendation: Enable for visual trading, disable for EA integration
Minimum Swing Size ATR Multiplier (inpMinSwingATR)
- Default: 0.3
- Purpose: Swing magnitude validation threshold
- Function: Prevents Fibonacci drawing on minor movements
- Adaptive Behavior:
- M1-M5: 0.1x ATR (very permissive)
- M15: 0.15x ATR (permissive)
- M30: 0.2x ATR (moderate)
- H1: 0.25x ATR (selective)
- H4: 0.4x ATR (restrictive)
- Daily+: User-defined value
ATR Period (inpATRPeriod)
- Default: 14
- Purpose: Volatility calculation period for market state analysis
- Standard: 14-period provides reliable volatility measurements
- Alternatives: 10-period for faster response, 21-period for stability
- Usage: Critical for adaptive level activation and swing filtering
Volume Analysis Period (inpVolumePeriod)
- Default: 20
- Purpose: Volume average calculation period
- Function: Baseline for volume confirmation analysis
- Optimization: Shorter periods for responsive analysis, longer for stability
- Application: Only relevant when volume validation is enabled
Fibonacci Levels Group
My Fibonacci provides complete customization of all Fibonacci levels, enabling adaptation to specific trading methodologies and market characteristics.
Core Retracement Levels:
- Level 1 (0.0%): Swing starting point, baseline reference
- Level 2 (23.6%): Shallow retracement, trend strength indicator
- Level 3 (38.2%): Key retracement level for strong trends
- Level 4 (50.0%): Psychological midpoint, major decision level
- Level 5 (61.8%): Golden ratio, statistically most reliable level
Advanced Levels:
- Level 6 (78.6%): Deep retracement (high volatility activation)
- Level 7 (100.0%): Complete retracement, trend reversal threshold
- Level 8 (127.2%): Extension level (high volatility activation)
- Level 9 (161.8%): Primary extension target
- Level 10 (261.8%): Secondary extension target
Expert Advisor Integration: Complete Technical Specification
20-Buffer Architecture Overview
My Fibonacci implements a comprehensive buffer system specifically engineered for algorithmic trading. Each buffer serves a distinct purpose in providing complete market intelligence to Expert Advisors:
Buffer Categories:
- Buffers 0-6: Core Fibonacci price levels
- Buffers 7-10: Market state and formation information
- Buffers 11-13: Price relationship analysis
- Buffers 14-16: Real-time trading signals
- Buffers 17-19: Advanced market intelligence
Core Fibonacci Price Buffers (0-6)
These buffers provide direct access to calculated Fibonacci level prices, updated in real-time as new swing formations develop.
Buffer 0: Fibo_0_Buffer
- Content: 0% Fibonacci level price (swing starting point)
- Purpose: Baseline reference for all calculations
- EA Usage: Entry validation, trend context analysis
- Update Frequency: Every new swing formation
Buffer 1: Fibo_236_Buffer
- Content: 23.6% Fibonacci retracement level price
- Purpose: First retracement test in trending markets
- EA Usage: Early retracement entry signals
- Statistical Note: 23.6% often marks initial pullback completion
Buffer 2: Fibo_382_Buffer
- Content: 38.2% Fibonacci retracement level price
- Purpose: Key decision point for trend continuation vs deeper retracement
- EA Usage: Strong trend entry opportunities
- Trading Significance: Break indicates potential 50% or 61.8% test
Buffer 3: Fibo_500_Buffer
- Content: 50% Fibonacci retracement level price
- Purpose: Psychological midpoint, major support/resistance
- EA Usage: High-probability reversal zone identification
- Market Psychology: Strongest psychological level regardless of mathematics
Buffer 4: Fibo_618_Buffer
- Content: 61.8% Fibonacci retracement level price (Golden Ratio)
- Purpose: Most statistically reliable Fibonacci level
- EA Usage: Primary reversal signal generation
- Importance: Single most critical buffer for EA strategies
Buffer 5: Fibo_100_Buffer
- Content: 100% Fibonacci level price (complete retracement)
- Purpose: Trend reversal threshold, extension calculation base
- EA Usage: Breakout signal generation, stop loss placement
- Significance: Critical threshold for trend invalidation
Buffer 6: Fibo_1618_Buffer
- Content: 161.8% Fibonacci extension level price
- Purpose: Primary extension target for breakout strategies
- EA Usage: Profit target calculation, trend continuation validation
- Application: Essential for extension-based trading systems
Market State Buffers (7-10)
Buffer 7: Fibo_Direction_Buffer
- Content: Current Fibonacci formation direction
- Values: 1.0 (uptrend retracement), -1.0 (downtrend retracement)
- EA Usage: Automatic trading bias alignment
- Algorithm: Determined by swing range polarity
Buffer 8: Market_Volatility_Buffer
- Content: Real-time volatility state assessment
- Values: 1.0 (high), 0.0 (normal), -1.0 (low)
- EA Usage: Strategy adaptation, risk management
- Calculation: ATR ratio vs 20-period average with 130% threshold
Buffer 9: Active_Levels_Buffer
- Content: Number of currently active Fibonacci levels
- Values: 7.0 (standard), 10.0 (high volatility extended set)
- EA Usage: Strategy complexity adaptation
- Trigger: Automatic based on volatility assessment
Buffer 10: Update_Signal_Buffer
- Content: New Fibonacci formation notification
- Values: 1.0 (new formation), 0.0 (no change)
- EA Usage: Recalculation trigger, alert generation
- Frequency: Updates only when new swing detected
Price Relationship Buffers (11-13)
Buffer 11: Distance_Nearest_Buffer
- Content: Distance in points to nearest Fibonacci level
- Range: 0.0 to large values
- EA Usage: Proximity-based entry timing
- Calculation: Absolute distance using _Point normalization
Buffer 12: Nearest_Level_ID_Buffer
- Content: Identifier of closest Fibonacci level
- Values: 0-6 (corresponding to Buffers 0-6)
- EA Usage: Targeted level-specific strategies
- Application: Enables level-specific trade parameters
Buffer 13: Price_Position_Buffer
- Content: Normalized position between swing points
- Range: 0.0 (swing start) to 1.0 (swing end)
- EA Usage: Relative position analysis
- Calculation: (Current Price - Swing Start) / Swing Range
Trading Signal Buffers (14-16)
Buffer 14: Touch_Signal_Buffer
- Content: Price interaction classification with Fibonacci levels
- Values:
- 0.0: No significant interaction
- 1.0: Price touching level (within threshold)
- 2.0: Price bouncing from level
- 3.0: Price breaking through level
- EA Usage: Entry signal generation
- Threshold: 5 points default (configurable)
Buffer 15: SR_Strength_Buffer
- Content: Support/Resistance strength quantification
- Range: 1.0 to 10.0
- Base Calculation: 5.0 + modifiers
- Modifiers:
- High volume: +2.0
- High volatility: +1.0
- Very close proximity (<10 points): +2.0
- EA Usage: Trade confidence validation
Buffer 16: Volume_Confirm_Buffer
- Content: Volume confirmation status
- Values: 1.0 (confirmed), 0.0 (not confirmed)
- Calculation: Current volume vs average volume
- EA Usage: Signal validation, risk assessment
Advanced Analysis Buffers (17-19)
Buffer 17: MTF_Confluence_Buffer
- Content: Multi-timeframe confluence potential
- Range: 0.0 to 4.0
- Base: 1.0 + conditional additions
- Enhancements:
- High volatility alignment: +1.0
- High volume confirmation: +1.0
- EA Usage: Trade quality assessment
Buffer 18: Success_Rate_Buffer
- Content: Historical success rate estimation for nearest level
- Range: 0.0 to 100.0 (percentage)
- Level-Specific Rates:
- Key levels (38.2%, 50%, 61.8%): 75%
- Secondary levels (23.6%, 100%): 65%
- Other levels: 50% baseline
- EA Usage: Position sizing, trade filtering
Buffer 19: Risk_Reward_Buffer
- Content: Calculated risk-to-reward ratio
- Range: 0.1 to 5.0 (capped)
- Calculation: ATR-based target / Distance to nearest level
- EA Usage: Trade viability assessment, position sizing
Complete Expert Advisor Implementation
Basic Buffer Access Pattern
double GetFibonacciBuffer(int bufferIndex, int barIndex = 0)
{
return iCustom(_Symbol, 0, "MyFibonacci_v11", "MyFibonacci_v11", // Indicator name
clrRed, // Line color
clrAqua, // Levels color
false, // Ray extension
12, 5, 3, 1, // ZigZag: Depth, Deviation, BackStep, Leg
true, false, true, false, // Advanced: Adaptive, Volume, Smart, Colors
0.3, 14, 20, // Parameters: MinSwing, ATR, Volume periods
0.0, 23.6, 38.2, 50.0, 61.8, 78.6, 100.0, 127.2, 161.8, 261.8, // Levels bufferIndex, barIndex
);
}
Professional Data Structure
struct FibonacciAnalysis
{
// Core Price Levels
double level_0; // 0% - Swing Start
double level_236; // 23.6% - Shallow Retracement
double level_382; // 38.2% - Key Retracement
double level_500; // 50% - Psychological Level
double level_618; // 61.8% - Golden Ratio
double level_100; // 100% - Full Retracement
double level_1618; // 161.8% - Primary Extension
// Market State
double direction; // 1.0=up, -1.0=down
double volatility; // -1.0, 0.0, 1.0
double activeLevels; // 7.0 or 10.0
double updateSignal; // 1.0=new formation
// Price Relationships
double distanceNearest; // Points to nearest level
double nearestLevelID; // 0-6 level identifier
double pricePosition; // 0.0-1.0 within swing
// Trading Signals
double touchSignal; // 0-3 interaction type
double srStrength; // 1-10 strength rating
double volumeConfirm; // 0/1 confirmation
// Advanced Intelligence
double confluence; // 0-4 confluence rating
double successRate; // 0-100 historical rate
double riskReward; // 0.1-5.0 R:R ratio
// Validation
bool isValid; // Data integrity check
datetime timestamp; // Last update time
};
Complete Data Acquisition Function
bool GetCompleteFibonacciAnalysis(FibonacciAnalysis &analysis){
// Initialize structure
analysis.isValid = false;
analysis.timestamp = TimeCurrent();
// Core price levels (Buffers 0-6)
analysis.level_0 = GetFibonacciBuffer(0);
analysis.level_236 = GetFibonacciBuffer(1);
analysis.level_382 = GetFibonacciBuffer(2);
analysis.level_500 = GetFibonacciBuffer(3);
analysis.level_618 = GetFibonacciBuffer(4);
analysis.level_100 = GetFibonacciBuffer(5);
analysis.level_1618 = GetFibonacciBuffer(6);
// Market state (Buffers 7-10)
analysis.direction = GetFibonacciBuffer(7);
analysis.volatility = GetFibonacciBuffer(8);
analysis.activeLevels = GetFibonacciBuffer(9);
analysis.updateSignal = GetFibonacciBuffer(10);
// Price relationships (Buffers 11-13)
analysis.distanceNearest = GetFibonacciBuffer(11);
analysis.nearestLevelID = GetFibonacciBuffer(12);
analysis.pricePosition = GetFibonacciBuffer(13);
// Trading signals (Buffers 14-16)
analysis.touchSignal = GetFibonacciBuffer(14);
analysis.srStrength = GetFibonacciBuffer(15);
analysis.volumeConfirm = GetFibonacciBuffer(16);
// Advanced analysis (Buffers 17-19)
analysis.confluence = GetFibonacciBuffer(17);
analysis.successRate = GetFibonacciBuffer(18);
analysis.riskReward = GetFibonacciBuffer(19);
// Validate critical data
if(analysis.level_618 != EMPTY_VALUE && analysis.direction != EMPTY_VALUE && analysis.updateSignal != EMPTY_VALUE)
{
analysis.isValid = true;
}}
return analysis.isValid;
Advanced Trading Strategy Implementation
class FibonacciTradingSystem
{
private:
// Configuration
double minSRStrength;
double minRiskReward;
double minSuccessRate;
bool useVolumeValidation;
// State management
FibonacciAnalysis currentAnalysis;
datetime lastAnalysisTime;
public:
FibonacciTradingSystem()
{
minSRStrength = 6.0;
minRiskReward = 1.5;
minSuccessRate = 65.0;
useVolumeValidation = true;
lastAnalysisTime = 0;
}
// Main analysis and trade execution
void ProcessTick()
{
// Update analysis if new data available
if(!UpdateAnalysis()) return;
// Process trading opportunities
if(currentAnalysis.updateSignal == 1.0)
{
AnalyzeTradeOpportunities();
}
// Manage existing positions
ManageOpenPositions();
}
bool UpdateAnalysis()
{
if(TimeCurrent() == lastAnalysisTime) return false;
bool success = GetCompleteFibonacciAnalysis(currentAnalysis);
if(success)
{
lastAnalysisTime = currentAnalysis.timestamp; LogAnalysisUpdate();
}
return success;
}
void AnalyzeTradeOpportunities()
{
double currentPrice = Close[0];
// Golden Ratio Strategy (61.8% level)
if(IsNearLevel(currentPrice, currentAnalysis.level_618, 5))
{
EvaluateGoldenRatioSetup();
}
// Psychological Level Strategy (50% level)
if(IsNearLevel(currentPrice, currentAnalysis.level_500, 3))
{
EvaluatePsychologicalLevelSetup();
}
// Extension Breakout Strategy
if(currentAnalysis.touchSignal == 3.0)
{
// Break signal
EvaluateExtensionBreakout();
}
// Multi-level Confluence Strategy
if(currentAnalysis.confluence >= 3.0)
{
EvaluateConfluenceSetup();
}
}
void EvaluateGoldenRatioSetup()
{
TradeSetup setup;
setup.type = "GOLDEN_RATIO_618";
setup.entryLevel = currentAnalysis.level_618;
setup.direction = currentAnalysis.direction;
// Enhanced validation for golden ratio
bool highConfidence = (currentAnalysis.successRate >= 70.0 && currentAnalysis.srStrength >= 7.0 && currentAnalysis.riskReward >= 2.0);
if(highConfidence && ValidateVolumeConditions())
{
CalculateTradeParameters(setup);
ExecuteTradeSetup(setup);
}
}
void EvaluatePsychologicalLevelSetup()
{
// 50% level requires position validation
bool validPosition = (currentAnalysis.pricePosition >= 0.45 && currentAnalysis.pricePosition <= 0.55);
if(validPosition && currentAnalysis.srStrength >= minSRStrength)
{
TradeSetup setup;
setup.type = "PSYCHOLOGICAL_50";
setup.entryLevel = currentAnalysis.level_500;
setup.direction = currentAnalysis.direction;
CalculateTradeParameters(setup);
ExecuteTradeSetup(setup);
}
}
void EvaluateExtensionBreakout()
{
double currentPrice = Close[0];
bool validBreakout = false;
// Validate breakout context
if(currentAnalysis.direction == 1.0)
{
validBreakout = (currentPrice > currentAnalysis.level_100 && currentAnalysis.touchSignal == 3.0);
}
else if(currentAnalysis.direction == -1.0)
{
validBreakout = (currentPrice < currentAnalysis.level_100 && currentAnalysis.touchSignal == 3.0);
}
if(validBreakout && currentAnalysis.volumeConfirm == 1.0)
{
TradeSetup setup; setup.type = "EXTENSION_BREAKOUT";
setup.entryLevel = currentAnalysis.level_100;
setup.direction = currentAnalysis.direction;
setup.target = currentAnalysis.level_1618;
ExecuteTradeSetup(setup);
}
}
bool ValidateVolumeConditions()
{
if(!useVolumeValidation) return true;
return (currentAnalysis.volumeConfirm == 1.0);
}
void CalculateTradeParameters(TradeSetup &setup)
{
double currentPrice = (setup.direction == 1.0) ? Ask : Bid;
// Dynamic stop loss based on Fibonacci structure
if(setup.direction == 1.0)
{
// Long trade - stop below next lower level
if(setup.entryLevel == currentAnalysis.level_618)
{
setup.stopLoss = currentAnalysis.level_500 - (5 * Point);
}
else if(setup.entryLevel == currentAnalysis.level_500)
{
setup.stopLoss = currentAnalysis.level_382 - (5 * Point);
}
// Take profit at next higher level
if(setup.target == 0)
{
setup.target = (setup.entryLevel == currentAnalysis.level_618) ? currentAnalysis.level_100 : currentAnalysis.level_618;
}
}
else
{
// Short trade - stop above next higher level
if(setup.entryLevel == currentAnalysis.level_618)
{
setup.stopLoss = currentAnalysis.level_100 + (5 * Point);
}
setup.target = currentAnalysis.level_382;
}
// Position sizing based on risk/reward and confidence
setup.lotSize = CalculatePositionSize(setup);
}
double CalculatePositionSize(TradeSetup &setup)
{
double baseSize = 0.1;
// Base lot size
double riskAmount = AccountBalance() * 0.02;
// 2% risk
double stopDistance = MathAbs(setup.entryLevel - setup.stopLoss);
double positionSize = riskAmount / (stopDistance / Point * MarketInfo(_Symbol, MODE_TICKVALUE));
// Adjust based on confidence indicators
double confidenceMultiplier = 1.0;
if(currentAnalysis.successRate >= 75.0)
confidenceMultiplier += 0.2;
if(currentAnalysis.srStrength >= 8.0)
confidenceMultiplier += 0.1;
if(currentAnalysis.riskReward >= 3.0)
confidenceMultiplier += 0.15;
positionSize *= confidenceMultiplier;
return NormalizeDouble(MathMin(positionSize, baseSize * 2.0), 2);
}
void ExecuteTradeSetup(TradeSetup &setup)
{
int orderType = (setup.direction == 1.0) ? OP_BUY : OP_SELL;
double entryPrice = (setup.direction == 1.0) ? Ask : Bid;
string comment = StringConcatenate("Fibo_", setup.type, "_", DoubleToString(currentAnalysis.successRate, 1), "%");
int ticket = OrderSend(_Symbol, orderType, setup.lotSize, entryPrice, 3, setup.stopLoss, setup.target, comment, 0, 0, (orderType == OP_BUY) ? clrGreen : clrRed);
if(ticket > 0)
{
LogTradeExecution(setup, ticket);
}
else
{
Print("Trade execution failed: ", GetLastError());
}
}
void ManageOpenPositions()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS) || OrderSymbol() != _Symbol) continue;
// Fibonacci-based trailing stop management
UpdateFibonacciTrailingStop(OrderTicket());
}
}
void UpdateFibonacciTrailingStop(int ticket)
{
if(!OrderSelect(ticket, SELECT_BY_TICKET)) return;
double currentPrice = (OrderType() == OP_BUY) ? Bid : Ask;
double currentSL = OrderStopLoss();
double newSL = currentSL;
if(OrderType() == OP_BUY)
{
// Move stop to next lower Fibonacci level as price advances
if(currentPrice > currentAnalysis.level_618 && currentSL < currentAnalysis.level_500)
{
newSL = currentAnalysis.level_500 - (3 * Point);
}
else if(currentPrice > currentAnalysis.level_100 && currentSL < currentAnalysis.level_618)
{
newSL = currentAnalysis.level_618 - (3 * Point);
}
}
else
{
// Mirror logic for short positions
if(currentPrice < currentAnalysis.level_618 && currentSL > currentAnalysis.level_100)
{
newSL = currentAnalysis.level_100 + (3 * Point);
}
}
if(newSL != currentSL && IsValidStopLossMove(OrderType(), newSL, currentSL))
{
if(OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0))
{
Print("Fibonacci trailing stop updated to: ", newSL);
}
}
}
bool IsValidStopLossMove(int orderType, double newSL, double currentSL)
{
return ((orderType == OP_BUY && newSL > currentSL) || (orderType == OP_SELL && newSL < currentSL));
}
void LogAnalysisUpdate()
{
Print("=== Fibonacci Analysis Update ===");
Print("Direction: ", (currentAnalysis.direction == 1.0) ? "UP" : "DOWN");
Print("Volatility: ", GetVolatilityString(currentAnalysis.volatility));
Print("Active Levels: ", currentAnalysis.activeLevels);
Print("Nearest Level: ", GetLevelName(currentAnalysis.nearestLevelID), " Distance: ", currentAnalysis.distanceNearest, " points");
Print("S/R Strength: ", currentAnalysis.srStrength, "/10");
Print("Success Rate: ", currentAnalysis.successRate, "%");
Print("Risk/Reward: ", currentAnalysis.riskReward, ":1");
}
string GetVolatilityString(double vol)
{
if(vol == 1.0) return "HIGH";
if(vol == 0.0) return "NORMAL";
if(vol == -1.0) return "LOW";
return "UNKNOWN";
}
string GetLevelName(double levelID)
{
switch((int)levelID)
{
case 0: return "0% (Swing Start)";
case 1: return "23.6% (Shallow)";
case 2: return "38.2% (Key Level)";
case 3: return "50% (Psychological)";
case 4: return "61.8% (Golden Ratio)";
case 5: return "100% (Full Retracement)";
case 6: return "161.8% (Extension)";
default: return "Unknown Level";
}
}
void LogTradeExecution(TradeSetup &setup, int ticket)
{
Print("=== Trade Executed ==="); Print("Ticket: ", ticket);
Print("Setup: ", setup.type); Print("Entry: ", setup.entryLevel);
Print("Stop Loss: ", setup.stopLoss); Print("Take Profit: ", setup.target);
Print("Lot Size: ", setup.lotSize); Print("Confidence Score: ", currentAnalysis.successRate, "%");
}
};
// Trade setup structure
struct TradeSetup
{
string type;
double entryLevel;
double direction;
double stopLoss;
double target;
double lotSize;
};
// Global trading system instance
FibonacciTradingSystem* fibonacciSystem;
// EA initialization
int OnInit()
{
fibonacciSystem = new FibonacciTradingSystem();
return INIT_SUCCEEDED;
}
// EA tick processing
void OnTick()
{
fibonacciSystem.ProcessTick();
}
// EA cleanup
void OnDeinit(const int reason)
{
delete fibonacciSystem;
}
Advanced Signal Processing Techniques
Multi-Condition Signal Validation
enum SignalStrength { SIGNAL_WEAK = 1, SIGNAL_MODERATE = 2, SIGNAL_STRONG = 3, SIGNAL_VERY_STRONG = 4 }; SignalStrength EvaluateSignalStrength(FibonacciAnalysis &analysis) { int strengthPoints = 0; // Level significance (0-2 points) if(analysis.nearestLevelID == 4) strengthPoints += 2; // Golden ratio else if(analysis.nearestLevelID == 3) strengthPoints += 2; // 50% psychological else if(analysis.nearestLevelID == 2) strengthPoints += 1; // 38.2% key level // Support/Resistance strength (0-2 points) if(analysis.srStrength >= 8.0) strengthPoints += 2; else if(analysis.srStrength >= 6.0) strengthPoints += 1; // Risk/Reward favorability (0-2 points) if(analysis.riskReward >= 3.0) strengthPoints += 2; else if(analysis.riskReward >= 2.0) strengthPoints += 1; // Volume confirmation (0-1 points) if(analysis.volumeConfirm == 1.0) strengthPoints += 1; // Multi-timeframe confluence (0-1 points) if(analysis.confluence >= 3.0) strengthPoints += 1; // Historical success rate (0-1 points) if(analysis.successRate >= 75.0) strengthPoints += 1; // Touch signal quality (0-1 points) if(analysis.touchSignal >= 2.0) strengthPoints += 1; // Map points to strength enum if(strengthPoints >= 8) return SIGNAL_VERY_STRONG; if(strengthPoints >= 6) return SIGNAL_STRONG; if(strengthPoints >= 4) return SIGNAL_MODERATE; return SIGNAL_WEAK; }
Adaptive Risk Management
class FibonacciRiskManager { private: double maxRiskPerTrade; double maxDrawdown; double volatilityMultiplier; public: double CalculateOptimalPosition(FibonacciAnalysis &analysis, TradeSetup &setup) { double basePosition = AccountBalance() * maxRiskPerTrade; double stopDistance = MathAbs(setup.entryLevel - setup.stopLoss); // Base position size double positionSize = basePosition / (stopDistance / Point * MarketInfo(_Symbol, MODE_TICKVALUE)); // Volatility adjustment if(analysis.volatility == 1.0) positionSize *= 0.8; // Reduce in high volatility else if(analysis.volatility == -1.0) positionSize *= 1.2; // Increase in low volatility // Confidence adjustment double confidenceMultiplier = 1.0; SignalStrength strength = EvaluateSignalStrength(analysis); switch(strength) { case SIGNAL_VERY_STRONG: confidenceMultiplier = 1.5; break; case SIGNAL_STRONG: confidenceMultiplier = 1.2; break; case SIGNAL_MODERATE: confidenceMultiplier = 1.0; break; case SIGNAL_WEAK: confidenceMultiplier = 0.5; break; } positionSize *= confidenceMultiplier; // Apply maximum position limits double maxPosition = AccountBalance() * 0.05 / (stopDistance / Point * MarketInfo(_Symbol, MODE_TICKVALUE)); positionSize = MathMin(positionSize, maxPosition); return NormalizeDouble(positionSize, 2); } bool ValidateTradeRisk(FibonacciAnalysis &analysis, TradeSetup &setup) { // Check maximum concurrent risk double totalRisk = CalculateCurrentRisk(); double tradeRisk = CalculateTradeRisk(setup); if(totalRisk + tradeRisk > maxDrawdown) return false; // Validate minimum risk/reward if(analysis.riskReward < 1.5) return false; // Check correlation with existing positions if(HasHighCorrelation(setup)) return false; return true; } };
Performance Optimization and Best Practices
Efficient Buffer Management
class FibonacciBufferCache { private: double cachedBuffers[20]; datetime lastUpdate; bool isCacheValid; public: double GetCachedBuffer(int index) { if(!isCacheValid || TimeCurrent() != lastUpdate) { RefreshCache(); } return cachedBuffers[index]; } void RefreshCache() { for(int i = 0; i < 20; i++) { cachedBuffers[i] = GetFibonacciBuffer(i); } lastUpdate = TimeCurrent(); isCacheValid = true; } void InvalidateCache() { isCacheValid = false; } };
Resource Management
// Optimized update frequency class FibonacciUpdateManager { private: datetime lastFullUpdate; int updateInterval; // seconds public: bool ShouldUpdate() { datetime currentTime = TimeCurrent(); if(currentTime - lastFullUpdate >= updateInterval) { lastFullUpdate = currentTime; return true; } return false; } void SetUpdateInterval(int seconds) { updateInterval = MathMax(1, seconds); } };
Conclusion
My Fibonacci represents a paradigm shift in technical analysis automation, providing both visual traders and algorithmic developers with institutional-grade market intelligence. The comprehensive 20-buffer system enables the development of sophisticated trading strategies while maintaining the simplicity and reliability that make Fibonacci analysis a cornerstone of technical trading.
The indicator's sophisticated architecture combines proven mathematical principles with modern algorithmic capabilities, creating a tool that adapts to market conditions while providing consistent, reliable signals across all timeframes and market environments.
Whether used for visual chart analysis or as the foundation for advanced Expert Advisor development, My Fibonacci delivers professional capabilities with the accessibility and reliability demanded by serious traders and developers.
The complete source code examples, comprehensive parameter documentation, and detailed technical specifications provided in this guide enable immediate implementation of advanced Fibonacci-based trading strategies, representing a significant advancement in automated technical analysis capabilities for the MetaTrader community.