Save this file as VisualJournal.mq4 in your MQL4/Experts folder.
Code: Select all
//+------------------------------------------------------------------+
//| VisualJournal.mq4 |
//| Automatically takes screenshots of your chart at entry and exit. |
//+------------------------------------------------------------------+
#property strict
input int FastEMA = 9;
input int SlowEMA = 21;
input int ScreenWidth = 1920;
input int ScreenHeight = 1080;
bool inTrade = false;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 1. PLACEHOLDER STRATEGY LOGIC (Replace with your own rules)
// Checking the previous completed candle (shift 1) and the one before it (shift 2)
double fast1 = iMA(Symbol(), 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double slow1 = iMA(Symbol(), 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double fast2 = iMA(Symbol(), 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, 2);
double slow2 = iMA(Symbol(), 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, 2);
bool isEntrySetup = (fast1 > slow1 && fast2 <= slow2); // Bullish Crossover
bool isExitSetup = (fast1 < slow1 && fast2 >= slow2); // Bearish Crossunder
// 2. ENTRY LOGIC & SCREENSHOT
if (isEntrySetup && !inTrade)
{
inTrade = true;
// Create a safe, timestamped filename
string timeStr = TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS);
StringReplace(timeStr, ":", "-");
StringReplace(timeStr, ".", "-");
string filename = "Journal_ENTRY_" + Symbol() + "_" + timeStr + ".png";
// Take the screenshot programmatically
if(WindowScreenShot(filename, ScreenWidth, ScreenHeight)) {
Alert("📸 ENTRY SCREENSHOT SAVED: ", filename, " - Review your raw setup later.");
Print("Screenshot saved to MQL4/Files/", filename);
} else {
Print("Error taking entry screenshot: ", GetLastError());
}
}
// 3. EXIT LOGIC & SCREENSHOT
if (isExitSetup && inTrade)
{
inTrade = false;
// Create a safe, timestamped filename
string timeStr = TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS);
StringReplace(timeStr, ":", "-");
StringReplace(timeStr, ".", "-");
string filename = "Journal_EXIT_" + Symbol() + "_" + timeStr + ".png";
// Take the screenshot programmatically
if(WindowScreenShot(filename, ScreenWidth, ScreenHeight)) {
Alert("📸 EXIT SCREENSHOT SAVED: ", filename, " - Compare execution to your plan.");
Print("Screenshot saved to MQL4/Files/", filename);
} else {
Print("Error taking exit screenshot: ", GetLastError());
}
}
}