Хорошо.
Т.е.
1) мне нужно создать новый топик для доработки данного скрипта?
2) прикручивание алертов к данному скрипту так же следует оформлять новым топиком, правильно понял Вас?
//+------------------------------------------------------------------+
//
// st2050 chart swither
// v1 - basic
// v1.1 - beta release (AS and arrow keys)
// v2 - WASD version (AD + WS jump to next/prev symbol)
//
//+------------------------------------------------------------------+
#include <WinUser32.mqh>
#import "user32.dll"
int GetTopWindow(int hWnd);
#import
#property indicator_chart_window
#property description "st2050 from forexsystemsru.com"
#property description "------------------------------------------------------------------------------------------------------------------"
#property description "Navigate charts with WASD and arrows keys on keyboard:"
#property description "A/D - previous/next chart"
#property description "W/S - previous/next symbol (if correctly grouped)"
extern string Info = "Experimental params - rename tabs (not required)";
extern bool RenameTabs = false;
extern bool RenameTabs_Lower = false;
extern bool RenameTabs_Comma = false;
extern bool RenameTabs_Space = true;
long Mas_i[100];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
return(0);
}
void RenameTabs_()
{
long currChart_ID=ChartFirst();
int hChartParent;
int _period;
string _symbol, _symbolX;
for(int i=0;i<100;i++)
{
_period=ChartPeriod(currChart_ID);
_symbol=ChartSymbol(currChart_ID);
hChartParent = GetParent(WindowHandle(_symbol,_period));
_symbolX = _symbol;
if (RenameTabs_Lower) StringToLower(_symbolX);
if (RenameTabs_Comma) _symbolX = _symbolX + ",";
if (RenameTabs_Space) _symbolX = _symbolX + " ";
SetWindowTextW(hChartParent,_symbolX+getTfAsString(_period));
currChart_ID=ChartNext(currChart_ID);
if(currChart_ID==-1) break;
}
}
//---------------------------------------------------------------------------------------------
// Expert ChartEvent function
//---------------------------------------------------------------------------------------------
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if (id==CHARTEVENT_KEYDOWN)
{
long _WindowID = 0;
if ((int(lparam)==65)|| (int(lparam)==37))
{
//_WindowID = GetChartID("prev");
_WindowID = GetChartID2(-1);
}
if ((int(lparam)==68) || (int(lparam)==39))
{
//_WindowID = GetChartID("next");
_WindowID = GetChartID2(1);
}
if ((int(lparam)==83) || (int(lparam)==40))
{
_WindowID=GetChartIDnextSymbol(-1);
}
if ((int(lparam)==87) || (int(lparam)==38))
{
_WindowID=GetChartIDnextSymbol(1);
}
if (_WindowID>0)
{
ChartSetInteger(_WindowID,CHART_BRING_TO_TOP,0,true);
ChartRedraw(_WindowID);
if (RenameTabs) RenameTabs_();
}
}
if (id==CHARTEVENT_CHART_CHANGE)
{
if (RenameTabs) RenameTabs_();
}
}
string getTfAsString( int _tf)
{
if (_tf == PERIOD_M1) {return "M1";}
if (_tf == PERIOD_M5) {return "M5";}
if (_tf == PERIOD_M15) {return "M15";}
if (_tf == PERIOD_M30) {return "M30";}
if (_tf == PERIOD_H1) {return "H1";}
if (_tf == 120) {return "H2";}
if (_tf == PERIOD_H4) {return "4";}
if (_tf == 480) {return "H8";}
if (_tf == 720) {return "12";}
if (_tf == PERIOD_D1) {return "D1";}
if (_tf == PERIOD_W1) {return "W1";}
if (_tf == PERIOD_MN1) {return "MN1";}
return "--";
}
//+------------------------------------------------------------------+
//| Get Chart ID function |
//+------------------------------------------------------------------+
long GetChartID2(int offset)
{
int i=0,limit=99,thisChartIDarr=0, maxChartIDarr=-1;
long chartID = ChartFirst();
long thisChartID = ChartID();
while(i<limit)
{
Mas_i[i]=chartID;
if (chartID==thisChartID) thisChartIDarr=i;
chartID=ChartNext(chartID);
if ((maxChartIDarr==-1)&&(chartID==-1)) maxChartIDarr=i;
i++;
}
i=thisChartIDarr+offset;
if (offset>0)
{
if (i>maxChartIDarr) i=i-maxChartIDarr-1;
}
if (offset<0)
{
if (i<0) i=maxChartIDarr+i+1;
}
return(Mas_i[i]);
}
long GetChartIDnextSymbol(int direction)
{
int i=0,limit=99,thisChartIDarr=0, maxChartIDarr=-1;
long chartID = ChartFirst();
long thisChartID = ChartID();
long targetChartID=-1;
string thisSymbol = ChartSymbol(thisChartID);
//filling ChartID array
while(i<limit)
{
Mas_i[i]=chartID;
if (chartID==thisChartID) thisChartIDarr=i;
chartID=ChartNext(chartID);
if ((maxChartIDarr==-1)&&(chartID==-1)) maxChartIDarr=i;
i++;
}
if (direction>0)
//just find next symbol
{
for(i=thisChartIDarr; i<=maxChartIDarr; i++)
{
if ( thisSymbol!=ChartSymbol(Mas_i[i]) )
{
targetChartID=Mas_i[i];
break;
}
}
}
if (direction<0)
//ooo!
{
string targetSymbol="";
int targetArrID=0;
//try to find prev chart with other symbol
for(i=thisChartIDarr; i>=0; i--)
{
if ( thisSymbol!=ChartSymbol(Mas_i[i]) )
{
if(targetSymbol=="") targetSymbol=ChartSymbol(Mas_i[i]);
if (targetSymbol!="")
{
if (i==0) targetChartID=Mas_i[0];
else
{
if (ChartSymbol(Mas_i[i])!=targetSymbol)
{
targetChartID=(Mas_i[i+1]);
break;
}
}
}
}
}
//in not foung
//find first tab from right before symbol change
if (targetChartID==-1)
{
targetSymbol=ChartSymbol(Mas_i[maxChartIDarr]);
for(i=maxChartIDarr; i>=0; i--)
{
if (ChartSymbol(Mas_i[i])!=targetSymbol)
{
targetChartID=(Mas_i[i+1]);
break;
}
}
}
}
if (targetChartID==-1) targetChartID=Mas_i[0];
return(targetChartID);
}
//-----------------------------------------------------------------
// first try function, not used
//-----------------------------------------------------------------
long GetChartID(string type)
{
//---
long currChart, prevChart=ChartFirst();
long nextChart, thisChart = ChartID();
int i=0,limit=100;
if(type=="this")
{
return(thisChart);
}
nextChart = ChartNext(thisChart)<0 ? prevChart:ChartNext(thisChart);
if(type=="next")
{
return(nextChart);
}
while(i<limit)
{
currChart=ChartNext(prevChart);
if(currChart<0 || currChart==thisChart) break;
prevChart=currChart;
i++;
}
//---
return(prevChart);
}
//-----------------------------------------------------------------
// second try function, not used
//-----------------------------------------------------------------
long GetChartID2(int fromChartID, string type)
{
//---
long currChart, prevChart=ChartFirst();
long nextChart, thisChart = fromChartID;
int i=0,limit=100;
if(type=="this")
{
return(thisChart);
}
nextChart = ChartNext(thisChart)<0 ? prevChart:ChartNext(thisChart);
if(type=="next")
{
return(nextChart);
}
while(i<limit)
{
currChart=ChartNext(prevChart);
if(currChart<0 || currChart==thisChart) break;
prevChart=currChart;
i++;
}
//---
return(prevChart);
У тебя 16 уровень. Ты с 3 уровня сам можешь быть поручителем:
project.opentraders.ru/20424.html
USDPump