Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
7a9e784
add risk disclaimer
rosasurfer Mar 27, 2026
200f4f0
fix/prevent creation of duplicate instance ids
rosasurfer Mar 28, 2026
e05e95c
rename inputs Entry.At.* to Entry.on*
rosasurfer Mar 28, 2026
c2f3078
fix conversion of MODE_TREND, MODE_UNKNOWN_TREND to signed short
rosasurfer Mar 28, 2026
52d1e4c
update log messages
rosasurfer Mar 28, 2026
83e2e9f
remove input Entry.onZigZagReversal, fix detection of DC widenings
rosasurfer Mar 29, 2026
8a625d5
update log messages
rosasurfer Mar 29, 2026
fcb3fcb
prepare repositioning of status display on changed chart legend
rosasurfer Mar 29, 2026
ea84cce
merge master into 59-update-zigzag-ea
rosasurfer Apr 1, 2026
a4e590e
update error flags
rosasurfer Apr 1, 2026
52d5362
merge development into 59-update-zigzag-ea
rosasurfer Apr 3, 2026
704ec45
update command line tasks
rosasurfer Apr 3, 2026
9776bbb
drop obsolete StrIsPhoneNumber()
rosasurfer Apr 3, 2026
076e0b5
debug reversal detection
rosasurfer Apr 4, 2026
f4b01f3
adjust order comment
rosasurfer Apr 4, 2026
5fad81b
fix detection of signal levels on Donchian Channel widening
rosasurfer Apr 4, 2026
a65ba28
fix string conversions again
rosasurfer Apr 4, 2026
f039a9c
guard against Donchian Channel errors
rosasurfer Apr 4, 2026
49400ab
bugfix in array handling
rosasurfer Apr 5, 2026
affeb1d
log + guard against invalid ZigZag data
rosasurfer Apr 5, 2026
5612a96
fix style issues
rosasurfer Apr 5, 2026
3982b8c
experts: drop the default virtual ticker configuration
rosasurfer Apr 5, 2026
d90fae9
debug suspect data updates after assumed price feed outages
rosasurfer Apr 5, 2026
88db873
update log messages
rosasurfer Apr 5, 2026
3bc41b3
add debug messages to IsZigZagReversalBar()
rosasurfer Apr 6, 2026
8e774bc
debug IsZigZagReversalBar() and ZigZag::onReversal()
rosasurfer Apr 6, 2026
8a1888e
stop test on ERR_ILLEGAL_STATE warning
rosasurfer Apr 7, 2026
dc3f1cd
fix invalid reversal signal with Entry.onChannelWidening=1
rosasurfer Apr 7, 2026
8ef42e5
change status/log filename to "ZigZag EA, yyyy.mm.dd HH.MM, <symbol>,…
rosasurfer Apr 7, 2026
64d1ef3
fix detection of ZigZag reversals
rosasurfer Apr 7, 2026
e455cdf
update log/signal messages
rosasurfer Apr 8, 2026
6d2eb63
debug double crossings
rosasurfer Apr 8, 2026
4bce09e
signal stop on TakeProfit
rosasurfer Apr 8, 2026
e285209
implement error callback EmergencyStop()
rosasurfer Apr 9, 2026
63085cc
stop tester on indicator error
rosasurfer Apr 10, 2026
a0433ca
fix UI deadlock in tester
rosasurfer Apr 9, 2026
9d500ee
ZigZag: reset current bar before recalculation
rosasurfer Apr 9, 2026
eda906e
ZigZag: add basic test routine for bar 0 ticks
rosasurfer Apr 10, 2026
17f3ba3
ZigZag: working recalculation with debug code
rosasurfer Apr 10, 2026
b6b931e
increase loglevel of EmergencyStop()
rosasurfer Apr 10, 2026
1e9a133
simplify tracking of reversal bars
rosasurfer Apr 11, 2026
6efe7be
fix detection of Donchian channel widenings
rosasurfer Apr 11, 2026
e977277
restore flawed reversal signaling
rosasurfer Apr 11, 2026
ded131b
signal DLL warnings
rosasurfer Apr 11, 2026
d0e6901
MCI errors must not trigger MQL runtime errors
rosasurfer Apr 11, 2026
4231740
reset DLL warnings after signaling
rosasurfer Apr 11, 2026
31f8be8
update handling of DLL warnings
rosasurfer Apr 12, 2026
5560dd7
rename CheckErrors() to HandleErrors()
rosasurfer Apr 12, 2026
409660c
adjust position of EA status display
rosasurfer Apr 12, 2026
c84c3e2
update notification onTakeProfit()
rosasurfer Apr 15, 2026
62d7723
fix rounding issues
rosasurfer Apr 15, 2026
b6f1395
remove test/debug code
rosasurfer Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
587 changes: 323 additions & 264 deletions mql40/experts/ZigZag EA.mq4

Large diffs are not rendered by default.

14 changes: 12 additions & 2 deletions mql40/experts/tools/Account Guard.mq4
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
#include <rsf/stddefines.mqh>
int __InitFlags[] = {INIT_TIMEZONE, INIT_BUFFERED_LOG};
int __DeinitFlags[];
int __virtualTicks = 800; // milliseconds (must be short as the EA monitors all symbols)

////////////////////////////////////////////////////// Configuration ////////////////////////////////////////////////////////

Expand Down Expand Up @@ -149,6 +148,9 @@ int onInit() {
if (!absLimit) return(catch("onInit(6) illegal parameter DrawdownLimit: "+ DoubleQuoteStr(DrawdownLimit) +" (must be != 0)", ERR_INVALID_PARAMETER));
DrawdownLimit = DoubleToStr(absLimit, 2);
}

// configure virtual ticks in milliseconds (must be short as the EA monitors all symbols)
__virtualTicks = 800;
return(catch("onInit(7)"));
}

Expand Down Expand Up @@ -414,7 +416,7 @@ double ComputeClosedProfit(string symbol, datetime from) {
if (!hst.tickets[i]) continue; // skip discarded tickets

if (hst.lotSizes[i] < 0.005) { // lotSize = 0: hedging order
// TODO: check behaviour if OrderComment() is a custom value
// TODO: check behavior if OrderComment() is a custom value
if (!StrStartsWith(hst.comments[i], "close hedge by #")) {
return(!catch("ComputeClosedProfit(3) #"+ hst.tickets[i] +" - unknown comment for assumed hedging position "+ DoubleQuoteStr(hst.comments[i]), ERR_RUNTIME_ERROR));
}
Expand Down Expand Up @@ -494,6 +496,14 @@ bool CloseOpenOrders(string symbol = "") {
}


/**
* Callback function invoked by the global error handler.
*/
void EmergencyStop() {
// does nothing in this EA
}


/**
* Return a string representation of all input parameters (for logging purposes).
*
Expand Down
14 changes: 10 additions & 4 deletions mql40/experts/tools/HtmlReport2Chart.mq4
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,16 @@
*
*
* TODO:
* - cache the parsed data over init cycles and convert to indicator
* - ParseAccountStatement
* process open orders
*
* - ParseTestReport
* apply optional timezone config for report server
* on-load initialize status with "show"
*
* - cache the parsed data over init cycles (performance only)
*/
#include <rsf/stddefines.mqh>
int __InitFlags[];
int __DeinitFlags[];
int __virtualTicks = 0;

////////////////////////////////////////////////////// Configuration ////////////////////////////////////////////////////////

Expand Down Expand Up @@ -129,6 +126,7 @@ int onTick() {
*/
bool onCommand(string cmd, string params, int keys) {
string fullCmd = cmd +":"+ params +":"+ keys;
fullCmd = StrLeftTo(fullCmd, "::0");

if (cmd == "toggle-open-orders") {
return(ToggleOpenOrders());
Expand Down Expand Up @@ -580,6 +578,14 @@ bool ValidateInputs() {
}


/**
* Callback function invoked by the global error handler.
*/
void EmergencyStop() {
// does nothing in this EA
}


/**
* Return a string representation of all input parameters (for logging purposes).
*
Expand Down
2 changes: 1 addition & 1 deletion mql40/include/rsf/MT4Expander.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
// charts and timeframes
bool IsCustomTimeframe(int timeframe);
bool IsStandardTimeframe(int timeframe);
int SetupTickTimer(int hWnd, int millis, int flags);
int SetupTickTimer(int hWnd, int milliseconds, int flags);
bool ReleaseTickTimer(int timerId);

// configuration
Expand Down
4 changes: 2 additions & 2 deletions mql40/include/rsf/api.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ bool StrIsDigits(string value);;
bool StrIsEmailAddress(string value);;
bool StrIsInteger(string value);;
bool StrIsNumeric(string value);;
bool StrIsPhoneNumber(string value);;
string StrLeftTo(string value, string substring, int count=1);;
string StrPadLeft(string str, int pad_length, string pad_string=" ");;
string StrRepeat(string str, int times);;
Expand Down Expand Up @@ -728,6 +727,7 @@ string ec_ProgramName (int &ec[]);;
int ec_SetAccountNumber (int &ec[], int number);
string ec_SetAccountServer (int &ec[], string server);;
int ec_SetDllError (int &ec[], int error);;
int ec_SetDllWarning (int &ex[], int error);:
int ec_SetLoglevel (int &ec[], int level);;
int ec_SetLoglevelAlert (int &ec[], int level);;
int ec_SetLoglevelDebug (int &ec[], int level);;
Expand Down Expand Up @@ -863,7 +863,7 @@ bool ReopenAlertDialog(int sound);;
string SearchPathA(string file);
string SearchPathW(string file);
bool SetLogfileA(int ec[], string filename);;
int SetupTickTimer(int hWnd, int millis, int flags);;
int SetupTickTimer(int hWnd, int milliseconds, int flags);;
bool SetWindowDoubleA(int hWnd, string name, double value);;
bool SetWindowIntegerA(int hWnd, string name, int value);;
bool SetWindowStringA(int hWnd, string name, string value);;
Expand Down
Loading