New EA and Indi

This commit is contained in:
Kunthawat Greethong
2026-01-25 10:34:54 +07:00
parent 39ce46877e
commit 04aa2eb2e6
37 changed files with 17051 additions and 0 deletions

291
Buffer EA/PHASE8_SUMMARY.md Normal file
View File

@@ -0,0 +1,291 @@
# Phase 8 Implementation Summary
## State Manager Enhancement
---
## ✅ Completed Enhancements
### 1. StateManager.mqh - Enhanced
#### Added Features
- ✅ Debug mode support with detailed logging
- ✅ Enhanced parameter validation
- ✅ State value validation
- ✅ Better error handling with error codes
- ✅ New helper methods
- ✅ Edge case handling
#### Specific Improvements
##### Constructor
- Added `m_enable_debug` flag for debug logging
##### SetParameters()
- ✅ Symbol validation (not empty)
- ✅ Magic number validation (> 0)
- ✅ Parameter logging when debug enabled
- ✅ Added `SetDebugMode()` method
##### LoadState()
- ✅ State value validation (>= 0)
- ✅ Invalid state value correction
- ✅ Enhanced error messages with error codes
- ✅ Debug logging of load process
- ✅ Initialization of missing Global Variables
##### SaveState()
- ✅ Input validation (>= 0)
- ✅ Enhanced error messages with error codes
- ✅ Debug logging of save process
- ✅ Validation before saving
##### ClearState()
- ✅ Enhanced error messages with error codes
- ✅ Debug logging of clear process
- ✅ Logging of each Global Variable deletion
- ✅ Status reporting for missing variables
##### New Helper Methods
-`GetGVNames()` - Get Global Variable names
-`StateExists()` - Check if state exists
---
## 📊 Code Statistics
| Metric | Before | After | Change |
|--------|--------|-------|--------|
| Total Lines | 155 | 250 | +95 |
| Methods | 5 | 7 | +2 |
| Validations | 0 | 4 | +4 |
| Debug Logs | 0 | 15 | +15 |
---
## 🎯 Success Criteria
- [x] Enhanced state persistence with validation
- [x] Global variable management improvements
- [x] Error handling
- [x] Debug logging
- [x] Edge case handling
---
## 🔧 Key Improvements
### 1. Parameter Validation
```mql5
if(magic_number <= 0)
{
Print("[ERROR] Invalid magic number: ", magic_number, ". Using default 24680");
m_magic_number = 24680;
}
```
### 2. State Value Validation
```mql5
if(accumulated_loss < 0)
{
Print("[WARNING] Invalid accumulated loss found: ", accumulated_loss, ". Resetting to 0");
accumulated_loss = 0;
GlobalVariableSet(m_gv_accum_loss, 0);
}
```
### 3. Debug Logging
```mql5
[StateManager] Loading state...
[StateManager] Loaded accumulated loss: 150.00
[StateManager] Loaded consecutive losses: 2
[StateManager] State loaded successfully
```
---
## 📝 Logging Examples
### Initialization
```
[StateManager] Parameters set:
Symbol: XAUUSD
Magic number: 24680
GV Accum Loss: UnivBufEA_XAUUSD_24680_AccumLoss
GV Consec Loss: UnivBufEA_XAUUSD_24680_ConsecLoss
```
### Load State
```
[StateManager] Loading state...
[StateManager] Loaded accumulated loss: 150.00
[StateManager] Loaded consecutive losses: 2
[StateManager] State loaded successfully
```
### Save State
```
[StateManager] Saving state...
Accumulated loss: 150.00
Consecutive losses: 2
[StateManager] State saved successfully
```
### Clear State
```
[StateManager] Clearing state...
[StateManager] Deleted accumulated loss Global Variable
[StateManager] Deleted consecutive losses Global Variable
[StateManager] State cleared successfully
```
### Error Handling
```
[ERROR] Invalid symbol: empty string
[ERROR] Invalid magic number: 0. Using default 24680
[ERROR] Invalid accumulated loss to save: -50.00
[ERROR] Failed to save accumulated loss. Error: Global variables not allowed (Code: 4057)
[WARNING] Invalid accumulated loss found: -50.00. Resetting to 0
```
---
## 🐛 Edge Cases Handled
1. ✅ Invalid symbol (empty string)
2. ✅ Invalid magic number (<= 0)
3. ✅ Invalid accumulated loss (< 0)
4. Invalid consecutive losses (< 0)
5. Global Variable not found (initialization)
6. Global Variable deletion failure
7. Global Variable save failure
8. Corrupted state values (negative)
---
## 📋 Global Variable Names
### Format
```
UnivBufEA_{Symbol}_{MagicNumber}_{Suffix}
```
### Examples
```
UnivBufEA_XAUUSD_24680_AccumLoss
UnivBufEA_XAUUSD_24680_ConsecLoss
```
### Suffixes
- `_AccumLoss`: Accumulated loss value
- `_ConsecLoss`: Consecutive losses count
---
## 📋 State Persistence
### What is Persisted
1. **Accumulated Loss**: Total loss since last reset
2. **Consecutive Losses**: Number of consecutive losing trades
### When is State Saved
- On EA deinitialization
- After each trade closes
### When is State Loaded
- On EA initialization
- Survives EA restarts
- Survives terminal restarts
### When is State Cleared
- Manual clear via `ClearState()`
- For backtesting purposes
---
## 🚀 Next Steps: Phase 9
### What's Next?
Phase 9 will implement **UI Manager** functionality:
1. Enhanced UI management
2. Loss display improvements
3. Manual mode enhancements
4. Error handling
5. Debug logging
6. Integration with main EA
7. Testing UI logic
**Estimated time:** ~15-20 minutes
---
## 📋 Testing Checklist
Before moving to Phase 9, verify:
- [ ] StateManager compiles without errors
- [ ] Debug mode works correctly
- [ ] Parameter validation works
- [ ] State loads correctly
- [ ] State saves correctly
- [ ] State clears correctly
- [ ] Invalid state values are corrected
- [ ] All edge cases are covered
---
## 💡 Notes
1. **Debug Mode**: Controlled by `EnableDebugPrints` input parameter
2. **Global Variables**: Survive EA and terminal restarts
3. **Validation**: All state values validated before use
4. **Error Codes**: All errors include error code and description
5. **Logging Format**: Consistent `[StateManager]` prefix for easy filtering
---
## 🔧 Usage Examples
### Basic Usage
```mql5
// Load state
double accum_loss;
int consec_losses;
g_state_manager.LoadState(accum_loss, consec_losses);
// Save state
g_state_manager.SaveState(accum_loss, consec_losses);
// Clear state
g_state_manager.ClearState();
```
### Debug Mode
```mql5
// Enable debug logging
g_state_manager.SetDebugMode(true);
// Load state (will log details)
g_state_manager.LoadState(accum_loss, consec_losses);
```
### Check State
```mql5
// Check if state exists
if(g_state_manager.StateExists())
{
Print("State exists");
}
// Get GV names
string accum_name, consec_name;
g_state_manager.GetGVNames(accum_name, consec_name);
Print("Accum Loss GV: ", accum_name);
Print("Consec Loss GV: ", consec_name);
```
---
**Phase 8 Status: ✅ COMPLETE**
Ready to proceed with Phase 9: UI Manager Implementation