Arrays 如何使用scrypt为mql5最小化图表列表?
在码头上打开的图表很少,例如:澳元CAD、DKKSEK、澳元日元、欧元ZAR、美元捷克克朗、美元瑞士法郎 还有一系列目标图表:丹麦克塞克、欧元、美元兑瑞士法郎 如何最小化除目标图表的图表窗口之外的所有图表窗口?Arrays 如何使用scrypt为mql5最小化图表列表?,arrays,charts,mql,mql5,metatrader5,Arrays,Charts,Mql,Mql5,Metatrader5,在码头上打开的图表很少,例如:澳元CAD、DKKSEK、澳元日元、欧元ZAR、美元捷克克朗、美元瑞士法郎 还有一系列目标图表:丹麦克塞克、欧元、美元兑瑞士法郎 如何最小化除目标图表的图表窗口之外的所有图表窗口?void loopOverCharts()//在所有图表上循环 void loopOverCharts()//loop over all the charts { long currChart,prevChart=ChartFirst(); int i=0,limit=1
void loopOverCharts()//在所有图表上循环
void loopOverCharts()//loop over all the charts
{
long currChart,prevChart=ChartFirst();
int i=0,limit=100;
processChart(prevChart);
while(i<limit)
{
currChart=ChartNext(prevChart);
if(currChart<0) break;
processChart(currChart);
prevChart=currChart;
i++;
}
}
void processChart(const long chartId)// process each chart
{
const string arrayOfSymbols[]={DKKSEK, EURZAR, USDCHF);
//going over array of symbols to figure out whether need to minimize of not
bool symbolToMinimize=true;
for(int i=ArraySize(arrayOfSymbols)-1;i>=0;i--)
{
if(ChartSymbol(chartId)==arrayOfSymbols[i])
{
symbolToMinimize=false;
break;
}
}
//if do not have chart symbol in the list - minimize it
if(symbolToMinimize)
ChartSetInteger(chartId,CHART_IS_MINIMIZED,true);
}
{
长currChart,prevChart=ChartFirst();
int i=0,极限=100;
过程图(prevChart);
while(i最小化图表在MQL5中不再有效。最好的办法是迭代图表并关闭不需要的图表,同时将确实需要的图表放在顶部。下面是一个示例
#define forEachInArray(TYPE, VAR, ARRAY) TYPE VAR;int SIZE##VAR=ArraySize(ARRAY);\
for(int I##VAR=0;(I##VAR<SIZE##VAR)&&(((VAR=ARRAY[I##VAR])==NULL)||true);I##VAR++)
#define forEachChartId(VAR) \
for(long VAR=ChartFirst();VAR>=0;VAR=ChartNext(VAR))
#include <charts/chart.mqh>
void OnStart()
{
string targets[] = {"EURUSD", "GBPJPY", "EURCAD"};
forEachChartId(id) {
if(id == ChartID())
continue;
chart_manage(id, targets);
}
chart_manage(ChartID(), targets);
}
void chart_manage(long id, string &targets[])
{
CChart chart;
chart.Attach(id);
forEachInArray(string, target, targets) {
if(chart.Symbol() == target) {
chart.BringToTop();
chart.Detach();
break;
}
}
}
#定义数组(类型、变量、数组)类型变量;int SIZE##VAR=ArraySize(数组)\
for(int I#VAR=0;(I#VAR=0;VAR=ChartNext(VAR))
#包括
void OnStart()
{
字符串目标[]={“欧元兑美元”、“英镑兑日元”、“欧元兑加元”};
forEachChartId(id){
如果(id==ChartID())
继续;
管理图表(id、目标);
}
图表管理(ChartID(),目标);
}
无效图表管理(长id、字符串和目标[])
{
CChart图;
图表。附上(id);
ForEachArray(字符串、目标、目标){
if(chart.Symbol()==目标){
chart.bringtop();
chart.Detach();
打破
}
}
}
请记住始终关闭脚本在上一次运行的图表。ChartSetInteger(chartId,chart\u最小化,true);
对最新版本不起任何作用,winapi
(winapi
)也不起作用:(这很遗憾。在这种情况下,除非MQ修复它