forked from rosh/MQL5Book
68 lines
2.6 KiB
MQL5
68 lines
2.6 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| ChartTemplate.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#include "..\..\Include\PRTF.mqh"
| |
#include "..\..\Include\Periods.mqh"
| |
#include "..\..\Include\TplFile.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
// make sure Momentum(14) is not yet added, and add if not
| |
const int w = ChartWindowFind(0, "Momentum(14)");
| |
if(w == -1)
| |
{
| |
const int momentum = iMomentum(NULL, 0, 14, PRICE_TYPICAL);
| |
| |
ChartIndicatorAdd(0, (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL), momentum);
| |
| |
// not necessary here, because the script will exit soon,
| |
// but it states explicitly our intention to not use this handle anymore
| |
IndicatorRelease(momentum);
| |
}
| |
| |
ResetLastError();
| |
| |
const string filename = _Symbol + "-" + PeriodToString(_Period) + "-momentum-rw";
| |
if(PRTF(ChartSaveTemplate(0, "/Files/" + filename)))
| |
{
| |
int handle = PRTF(FileOpen(filename + ".tpl",
| |
FILE_READ | FILE_WRITE | FILE_TXT | FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_UNICODE));
| |
// could use a second file for output
| |
// int writer = PRTF(FileOpen(filename + "w.tpl",
| |
// FILE_WRITE | FILE_TXT | FILE_SHARE_READ | FILE_SHARE_WRITE));
| |
| |
// parse tpl-file into this container
| |
Container main(handle);
| |
main.read();
| |
| |
// locate indicator in a nested container
| |
Container *found = main.find("/chart/window/indicator[name=Momentum]");
| |
if(found)
| |
{
| |
found.print();
| |
// add visualization on monthly timeframe, if not yet present
| |
Container *period = found.find("*/period[period_type=3]");
| |
if(period == NULL)
| |
{
| |
period = found.add("period");
| |
period.assign("period_type", "3");
| |
period.assign("period_size", "1");
| |
}
| |
else
| |
{
| |
Print("Monthly period already exists");
| |
}
| |
}
| |
| |
main.write(); // or main.write(writer);
| |
FileClose(handle);
| |
| |
PRTF(ChartApplyTemplate(0, "/Files/" + filename));
| |
}
| |
}
| |
//+------------------------------------------------------------------+
|