Пожалуйста, подскажите, как сделать следующее.
Izzatilla Ikramov:
Нужно чтобы при удалении индикатора с графика остались сигналы. Такой шаблон при сохранении запомнит разметку.
На графике запускаем индикатор, он наносит свои сигналы на график. Как сделать так, что бы при сохранении шаблона и отправки его другу без индикатора, друг мог увидеть все сигналы на графике нужного инструмента.
new-rena:
Нужно чтобы при удалении индикатора с графика остались сигналы. Такой шаблон при сохранении запомнит разметку.
Какие команды могут удалять сигналы с графика?
Нужно чтобы при удалении индикатора с графика остались сигналы. Такой шаблон при сохранении запомнит разметку.
Izzatilla Ikramov:
Какие команды могут удалять сигналы с графика?
А что такое сигнал (в Вашем конкретном случае)? Если это графический объект - то можно смело сохранять шаблон - вся графика сохраниться в шаблоне.
Какие команды могут удалять сигналы с графика?
Izzatilla Ikramov:
Какие команды могут удалять сигналы с графика?
в OnDeinit() (МТ4 - в deinit()) команда ObjectsDeleteAll(). Попробуйте закомментировать эту команду и затем удалить индикатор с графика. Разметка должна сохраниться в шаблоне
Какие команды могут удалять сигналы с графика?
Не получается, посмотрите пожалуйста код
//+------------------------------------------------------------------+
//| izaSignals.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property version "1.00"
#property strict
#property indicator_chart_window
enum eSignalType { Panel, Chart };
input eSignalType signalType = Chart; //Signal type
input string PanelSettings = "=========================================="; //Panel Settings
input int SignalDayQty = 3; //Signal days qty
input bool ShowValue = false; //Show values
input string ChartSettings = "=========================================="; //Chart Settings
input string symbol = ""; //Signal symbol
input bool showValue = false; //Show values
input bool useEMAFilter = false; //Use EMA filter
string url = "http://192.168.1.1/generate.php?"; //
string obj_prefix = "iza_";
long cID=0;
datetime ud=0;
struct sRow
{
string symbol;
datetime date;
string signal;
double value;
};
int OnInit()
{
if(TimeCurrent()>D'30.09.2017') { Alert(""); return(INIT_FAILED); }
return(INIT_SUCCEEDED);
ChartSetInteger(0,CHART_FOREGROUND,false);
ud=0;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
Comment("");
ud=0;
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
if(_Period<PERIOD_D1 && rates_total==prev_calculated) return(rates_total);
if(ud==iTime(_Symbol,PERIOD_H4,0)) return(rates_total);
bool res;
sRow row[];
string _symbol,text;
if(signalType==Panel)
{
MqlDateTime sd,ed;
TimeToStruct(TimeCurrent()-SignalDayQty*PERIOD_D1*60,sd);
string start_date=IntegerToString(sd.day)+"."+IntegerToString(sd.mon)+"."+IntegerToString(sd.year);
TimeToStruct(TimeCurrent(),ed);
string end_date=IntegerToString(ed.day)+"."+IntegerToString(ed.mon)+"."+IntegerToString(ed.year);
string request_url = url+"start_date="+start_date+"&"+ "end_date="+end_date; //Print(request_url);
res = GrabWeb(request_url,text);
//Print("L: ",StringLen(text));
//Print("text:",StringTrimLeft(text));
if(res)
{
Comment("");
convertResult(text,row);
drawTable(row);
ud=iTime(_Symbol,PERIOD_H4,0);
setLabel(obj_prefix,"lblUpdateTime",10,15,clrGray,"Last time update: "+TimeToString(TimeCurrent()),8,CORNER_LEFT_LOWER);
}
}
else
{
MqlDateTime sd,ed;
TimeToStruct(ud-PERIOD_D1*3*60,sd);
string start_date=IntegerToString(sd.day)+"."+IntegerToString(sd.mon)+"."+IntegerToString(sd.year);
TimeToStruct(TimeCurrent()+PERIOD_D1*60,ed);
string end_date=IntegerToString(ed.day)+"."+IntegerToString(ed.mon)+"."+IntegerToString(ed.year);
if(symbol=="") _symbol=_Symbol; else _symbol=symbol;
string request_url = url+"start_date="+start_date+"&"+ "end_date="+end_date+"&symbol="+_symbol; //Print(request_url);
res = GrabWeb(request_url,text);
//Print("L: ",StringLen(text));
//Print("text:",StringTrimLeft(text));
if(res)
{
Comment("");
convertResult(text,row);
drawSignals(row);
ud=iTime(_Symbol,PERIOD_H4,0);
setLabel(obj_prefix,"lblUpdateTime",10,15,clrGray,"Last time update: "+TimeToString(TimeCurrent()),8,CORNER_LEFT_LOWER);
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
bool convertResult(string in, sRow& rowout[])
{
string out[], row[], t="";
int l;
StringReplace(in,"\n","");
StringReplace(in,"<table>","");
StringReplace(in,"</table>","");
StringReplace(in,"<tbody>","");
StringReplace(in,"</tbody>","");
StringReplace(in,"<td>","");
StringReplace(in,"</td>","|");
StringReplace(in,"<tr>","");
StringReplace(in,"</tr>",";");
StringSplit(in,StringGetCharacter(";",0),out);
for(int i=0;i<ArraySize(out);i++)
{
StringTrimLeft(out[i]);
StringTrimRight(out[i]);
//Print(out[i]);
StringSplit(out[i],StringGetCharacter("|",0),row);
if(ArraySize(row)>=4)
{
l = ArraySize(rowout);
ArrayResize(rowout,l+1);
StringReplace(row[0],"/","");
rowout[l].symbol=row[0]; //Print(row[0]," ",rowout[l].symbol);
rowout[l].date=StringToTime(row[1]); //Print(row[1]," ",rowout[l].date);
rowout[l].signal=row[2];
StringReplace(row[3],",",".");
rowout[l].value=StringToDouble(row[3]);
}
}
return(true);
}
void drawSignals(sRow& rowin[])
{
ObjectSetString(0,obj_prefix+"lblNextDaySignal",OBJPROP_TEXT,CharToString(32));
string t;
int ind;
double ema13,ema26;
for(int i=0;i<ArraySize(rowin);i++)
{
if((symbol=="" && rowin[i].symbol==_Symbol) || (symbol!="" && rowin[i].symbol==symbol))
{
if(rowin[i].signal=="long")
{
t="long signal ";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+="("+DoubleToString(rowin[i].value,2)+")";
ema13 = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_OPEN,ind);
ema26 = iMA(_Symbol,_Period,26,0,MODE_EMA,PRICE_OPEN,ind);
if((useEMAFilter && ema13>ema26) || !useEMAFilter)
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGreen,t+" ",8,90,ANCHOR_RIGHT);
setArrowUp(obj_prefix+"arr_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGreen,1);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGreen,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
else
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGray,t+" ",8,90,ANCHOR_RIGHT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGreen,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
if(rowin[i].signal=="short")
{
t="short signal ";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+=" ("+DoubleToString(rowin[i].value,2)+")";
ema13 = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_OPEN,ind);
ema26 = iMA(_Symbol,_Period,26,0,MODE_EMA,PRICE_OPEN,ind);
if((useEMAFilter && ema13<ema26) || !useEMAFilter)
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrRed," "+t,8,90,ANCHOR_LEFT);
setArrowDn(obj_prefix+"arr_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrRed,1);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrRed,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
else
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrGray," "+t,8,90,ANCHOR_LEFT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrRed,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
if(rowin[i].signal=="no")
{
t="no signal";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+=" ("+DoubleToString(rowin[i].value,2)+")";
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrGray," "+t,8,90,ANCHOR_LEFT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGray,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
}
}
void drawTable(sRow& rowin[])
{
ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
color sgnColor;
int dx=10,dy,stepx=100,stepy=15;
ObjectCreate(0,obj_prefix+"Table",OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_XDISTANCE,5);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_YDISTANCE,20);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_XSIZE,stepx*ArraySize(d)+stepx/2*ArraySize(d));
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_YSIZE,stepy*(ArraySize(s)+2));
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_BGCOLOR,clrDarkBlue);
for(int i=0;i<ArraySize(d);i++)
{
dy=30;
setLabel(obj_prefix,"lbl"+TimeToString(d[i],TIME_DATE),dx+stepx,dy,clrWhite,TimeToString(d[i],TIME_DATE),10,CORNER_LEFT_UPPER);
dy+=stepy;
for(int j=0;j<ArraySize(s);j++)
{
if(i==0) setLabel(obj_prefix,"lbl"+s[j],dx,dy,clrWhite,s[j],10,CORNER_LEFT_UPPER);
for(int k=0;k<ArraySize(rowin);k++)
{
if(rowin[k].date==d[i] && rowin[k].symbol==s[j])
{
if(rowin[k].signal=="short") sgnColor=clrRed;
else if(rowin[k].signal=="long") sgnColor=clrGreen;
else sgnColor=clrGray;
setLabel(obj_prefix,"sgn"+s[j]+TimeToString(d[i],TIME_DATE),dx+stepx,dy,sgnColor,rowin[k].signal,10,CORNER_LEFT_UPPER);
if(ShowValue)
setLabel(obj_prefix,"val"+s[j]+TimeToString(d[i],TIME_DATE),dx+stepx+stepx-50,dy,sgnColor,DoubleToString(rowin[k].value,2),10,CORNER_LEFT_UPPER);
}
}
dy+=stepy;
}
dx+=stepx;
}
}
void getSymbolArray(sRow& in[],string& out[])
{
for(int i=0;i<ArraySize(in);i++)
{
int as=ArraySize(out);
if(as==0)
{ ArrayResize(out,as+1); out[as]=in[i].symbol; }
else
{ if(!arrayStringExist(out,in[i].symbol)) { ArrayResize(out,as+1); out[as]=in[i].symbol; } }
}
}
void getDateArray(sRow& in[],datetime& out[])
{
for(int i=0;i<ArraySize(in);i++)
{
int as=ArraySize(out);
if(as==0)
{ ArrayResize(out,as+1); out[as]=in[i].date; }
else
{ if(!arrayDateExist(out,in[i].date)) { ArrayResize(out,as+1); out[as]=in[i].date; } }
}
}
bool arrayDateExist(datetime& in[],datetime search)
{
bool adte = false;
for(int i=0;i<ArraySize(in);i++)
if(in[i]==search) { adte=true; break; }
return(adte);
}
bool arrayStringExist(string& in[],string search)
{
bool ase = false;
for(int i=0;i<ArraySize(in);i++)
if(in[i]==search) { ase=true; break; }
return(ase);
}
void setText(string prefix, string name, datetime dt, double p, color c, string text, int fs, double corner, ENUM_ANCHOR_POINT anchor, string fn="Arial")
{
ObjectCreate(cID,prefix+name,OBJ_TEXT,0,0,0);
ObjectSetInteger(cID,prefix+name,OBJPROP_TIME,dt);
ObjectSetDouble(cID,prefix+name,OBJPROP_PRICE,p);
ObjectSetDouble(cID,prefix+name,OBJPROP_ANGLE,corner);
ObjectSetInteger(cID,prefix+name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,prefix+name,OBJPROP_FONTSIZE,fs);
ObjectSetInteger(cID,prefix+name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,prefix+name,OBJPROP_SELECTABLE,false);
ObjectSetInteger(cID,prefix+name,OBJPROP_ANCHOR,anchor);
ObjectSetString(cID,prefix+name,OBJPROP_FONT,fn);
ObjectSetString(cID,prefix+name,OBJPROP_TEXT,text);
}
void setLabel(string prefix, string name, int xd, int yd, color c, string text, int fs, int corner, string fn="Arial")
{
ObjectCreate(cID,prefix+name,OBJ_LABEL,0,0,0);
ObjectSetInteger(cID,prefix+name,OBJPROP_CORNER,corner);
ObjectSetInteger(cID,prefix+name,OBJPROP_XDISTANCE,xd);
ObjectSetInteger(cID,prefix+name,OBJPROP_YDISTANCE,yd);
ObjectSetInteger(cID,prefix+name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,prefix+name,OBJPROP_FONTSIZE,fs);
ObjectSetInteger(cID,prefix+name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,prefix+name,OBJPROP_SELECTABLE,false);
ObjectSetString(cID,prefix+name,OBJPROP_FONT,fn);
ObjectSetString(cID,prefix+name,OBJPROP_TEXT,text);
}
void setArrowUp(string name, datetime t, double p, int c, int w)
{
ObjectCreate(cID,name,OBJ_ARROW_UP,0,0,0);
ObjectSetInteger(cID,name,OBJPROP_TIME,t);
ObjectSetDouble(cID,name,OBJPROP_PRICE,p);
ObjectSetInteger(cID,name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,name,OBJPROP_WIDTH,w);
ObjectSetInteger(cID,name,OBJPROP_ANCHOR,ANCHOR_RIGHT);
ObjectSetInteger(cID,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,name,OBJPROP_SELECTABLE,false);
}
void setArrowDn(string name, datetime t, double p, int c, int w)
{
ObjectCreate(cID,name,OBJ_ARROW_DOWN,0,0,0);
ObjectSetInteger(cID,name,OBJPROP_TIME,t);
ObjectSetDouble(cID,name,OBJPROP_PRICE,p);
ObjectSetInteger(cID,name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,name,OBJPROP_WIDTH,w);
ObjectSetInteger(cID,name,OBJPROP_ANCHOR,ANCHOR_LEFT);
ObjectSetInteger(cID,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,name,OBJPROP_SELECTABLE,false);
}
bool bWinInetDebug = true;
int hSession_IEType;
int hSession_Direct;
int Internet_Open_Type_Preconfig = 0;
int Internet_Open_Type_Direct = 1;
int Internet_Open_Type_Proxy = 3;
int Buffer_LEN = 512;
#import "wininet.dll"
int InternetAttemptConnect (int x);
int InternetOpenW(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0);
int InternetOpenUrlW(int hInternetSession, string sUrl, string sHeaders = "", int lHeadersLength = 0, int lFlags = 0, int lContext = 0);
int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
bool GrabWeb(string request, string& webpage)
{
if(!IsDllsAllowed()) { Comment("DLL's are forbidden!"); return(false); }
int rv = InternetAttemptConnect(0);
if(rv != 0) { Comment("Internet Attempt error!"); return(false); }
int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
if(hInternetSession <= 0) { Comment("Internet Open error!"); return(0); }
int hURL = InternetOpenUrlW(hInternetSession, request, "", 0, 0, 0);
if(hURL <= 0) { Comment("Internet Open Url error!"); InternetCloseHandle(hInternetSession); return(false); }
int cBuffer[256];
int dwBytesRead[1];
string TXT = "";
while(!IsStopped())
{
bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
if(dwBytesRead[0] == 0) break;
string text = "";
for(int i = 0; i < 256; i++)
{
text += CharToStr((uchar)(cBuffer[i] & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 8) & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 16) & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 24) & 0x000000FF));
}
TXT += text;
}
webpage = TXT;
InternetCloseHandle(hInternetSession);
return(true);
}
//| izaSignals.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property version "1.00"
#property strict
#property indicator_chart_window
enum eSignalType { Panel, Chart };
input eSignalType signalType = Chart; //Signal type
input string PanelSettings = "=========================================="; //Panel Settings
input int SignalDayQty = 3; //Signal days qty
input bool ShowValue = false; //Show values
input string ChartSettings = "=========================================="; //Chart Settings
input string symbol = ""; //Signal symbol
input bool showValue = false; //Show values
input bool useEMAFilter = false; //Use EMA filter
string url = "http://192.168.1.1/generate.php?"; //
string obj_prefix = "iza_";
long cID=0;
datetime ud=0;
struct sRow
{
string symbol;
datetime date;
string signal;
double value;
};
int OnInit()
{
if(TimeCurrent()>D'30.09.2017') { Alert(""); return(INIT_FAILED); }
return(INIT_SUCCEEDED);
ChartSetInteger(0,CHART_FOREGROUND,false);
ud=0;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
Comment("");
ud=0;
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
if(_Period<PERIOD_D1 && rates_total==prev_calculated) return(rates_total);
if(ud==iTime(_Symbol,PERIOD_H4,0)) return(rates_total);
bool res;
sRow row[];
string _symbol,text;
if(signalType==Panel)
{
MqlDateTime sd,ed;
TimeToStruct(TimeCurrent()-SignalDayQty*PERIOD_D1*60,sd);
string start_date=IntegerToString(sd.day)+"."+IntegerToString(sd.mon)+"."+IntegerToString(sd.year);
TimeToStruct(TimeCurrent(),ed);
string end_date=IntegerToString(ed.day)+"."+IntegerToString(ed.mon)+"."+IntegerToString(ed.year);
string request_url = url+"start_date="+start_date+"&"+ "end_date="+end_date; //Print(request_url);
res = GrabWeb(request_url,text);
//Print("L: ",StringLen(text));
//Print("text:",StringTrimLeft(text));
if(res)
{
Comment("");
convertResult(text,row);
drawTable(row);
ud=iTime(_Symbol,PERIOD_H4,0);
setLabel(obj_prefix,"lblUpdateTime",10,15,clrGray,"Last time update: "+TimeToString(TimeCurrent()),8,CORNER_LEFT_LOWER);
}
}
else
{
MqlDateTime sd,ed;
TimeToStruct(ud-PERIOD_D1*3*60,sd);
string start_date=IntegerToString(sd.day)+"."+IntegerToString(sd.mon)+"."+IntegerToString(sd.year);
TimeToStruct(TimeCurrent()+PERIOD_D1*60,ed);
string end_date=IntegerToString(ed.day)+"."+IntegerToString(ed.mon)+"."+IntegerToString(ed.year);
if(symbol=="") _symbol=_Symbol; else _symbol=symbol;
string request_url = url+"start_date="+start_date+"&"+ "end_date="+end_date+"&symbol="+_symbol; //Print(request_url);
res = GrabWeb(request_url,text);
//Print("L: ",StringLen(text));
//Print("text:",StringTrimLeft(text));
if(res)
{
Comment("");
convertResult(text,row);
drawSignals(row);
ud=iTime(_Symbol,PERIOD_H4,0);
setLabel(obj_prefix,"lblUpdateTime",10,15,clrGray,"Last time update: "+TimeToString(TimeCurrent()),8,CORNER_LEFT_LOWER);
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
bool convertResult(string in, sRow& rowout[])
{
string out[], row[], t="";
int l;
StringReplace(in,"\n","");
StringReplace(in,"<table>","");
StringReplace(in,"</table>","");
StringReplace(in,"<tbody>","");
StringReplace(in,"</tbody>","");
StringReplace(in,"<td>","");
StringReplace(in,"</td>","|");
StringReplace(in,"<tr>","");
StringReplace(in,"</tr>",";");
StringSplit(in,StringGetCharacter(";",0),out);
for(int i=0;i<ArraySize(out);i++)
{
StringTrimLeft(out[i]);
StringTrimRight(out[i]);
//Print(out[i]);
StringSplit(out[i],StringGetCharacter("|",0),row);
if(ArraySize(row)>=4)
{
l = ArraySize(rowout);
ArrayResize(rowout,l+1);
StringReplace(row[0],"/","");
rowout[l].symbol=row[0]; //Print(row[0]," ",rowout[l].symbol);
rowout[l].date=StringToTime(row[1]); //Print(row[1]," ",rowout[l].date);
rowout[l].signal=row[2];
StringReplace(row[3],",",".");
rowout[l].value=StringToDouble(row[3]);
}
}
return(true);
}
void drawSignals(sRow& rowin[])
{
ObjectSetString(0,obj_prefix+"lblNextDaySignal",OBJPROP_TEXT,CharToString(32));
string t;
int ind;
double ema13,ema26;
for(int i=0;i<ArraySize(rowin);i++)
{
if((symbol=="" && rowin[i].symbol==_Symbol) || (symbol!="" && rowin[i].symbol==symbol))
{
if(rowin[i].signal=="long")
{
t="long signal ";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+="("+DoubleToString(rowin[i].value,2)+")";
ema13 = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_OPEN,ind);
ema26 = iMA(_Symbol,_Period,26,0,MODE_EMA,PRICE_OPEN,ind);
if((useEMAFilter && ema13>ema26) || !useEMAFilter)
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGreen,t+" ",8,90,ANCHOR_RIGHT);
setArrowUp(obj_prefix+"arr_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGreen,1);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGreen,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
else
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],Low[ind],clrGray,t+" ",8,90,ANCHOR_RIGHT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGreen,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
if(rowin[i].signal=="short")
{
t="short signal ";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+=" ("+DoubleToString(rowin[i].value,2)+")";
ema13 = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_OPEN,ind);
ema26 = iMA(_Symbol,_Period,26,0,MODE_EMA,PRICE_OPEN,ind);
if((useEMAFilter && ema13<ema26) || !useEMAFilter)
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrRed," "+t,8,90,ANCHOR_LEFT);
setArrowDn(obj_prefix+"arr_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrRed,1);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrRed,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
else
{
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrGray," "+t,8,90,ANCHOR_LEFT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrRed,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
if(rowin[i].signal=="no")
{
t="no signal";
ind=iBarShift(_Symbol,_Period,rowin[i].date);
if(showValue) t+=" ("+DoubleToString(rowin[i].value,2)+")";
if(rowin[i].date<=Time[0])
{
setText(obj_prefix,"sgn_"+TimeToString(rowin[i].date,TIME_DATE),Time[ind],High[ind],clrGray," "+t,8,90,ANCHOR_LEFT);
}
else
{
setLabel(obj_prefix,"lblNextDaySignal",10,30,clrGray,"Last Signal for: "+TimeToString(rowin[i].date,TIME_DATE)+" "+t,8,CORNER_LEFT_LOWER);
}
}
}
}
}
void drawTable(sRow& rowin[])
{
ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
color sgnColor;
int dx=10,dy,stepx=100,stepy=15;
ObjectCreate(0,obj_prefix+"Table",OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_XDISTANCE,5);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_YDISTANCE,20);
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_XSIZE,stepx*ArraySize(d)+stepx/2*ArraySize(d));
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_YSIZE,stepy*(ArraySize(s)+2));
ObjectSetInteger(0,obj_prefix+"Table",OBJPROP_BGCOLOR,clrDarkBlue);
for(int i=0;i<ArraySize(d);i++)
{
dy=30;
setLabel(obj_prefix,"lbl"+TimeToString(d[i],TIME_DATE),dx+stepx,dy,clrWhite,TimeToString(d[i],TIME_DATE),10,CORNER_LEFT_UPPER);
dy+=stepy;
for(int j=0;j<ArraySize(s);j++)
{
if(i==0) setLabel(obj_prefix,"lbl"+s[j],dx,dy,clrWhite,s[j],10,CORNER_LEFT_UPPER);
for(int k=0;k<ArraySize(rowin);k++)
{
if(rowin[k].date==d[i] && rowin[k].symbol==s[j])
{
if(rowin[k].signal=="short") sgnColor=clrRed;
else if(rowin[k].signal=="long") sgnColor=clrGreen;
else sgnColor=clrGray;
setLabel(obj_prefix,"sgn"+s[j]+TimeToString(d[i],TIME_DATE),dx+stepx,dy,sgnColor,rowin[k].signal,10,CORNER_LEFT_UPPER);
if(ShowValue)
setLabel(obj_prefix,"val"+s[j]+TimeToString(d[i],TIME_DATE),dx+stepx+stepx-50,dy,sgnColor,DoubleToString(rowin[k].value,2),10,CORNER_LEFT_UPPER);
}
}
dy+=stepy;
}
dx+=stepx;
}
}
void getSymbolArray(sRow& in[],string& out[])
{
for(int i=0;i<ArraySize(in);i++)
{
int as=ArraySize(out);
if(as==0)
{ ArrayResize(out,as+1); out[as]=in[i].symbol; }
else
{ if(!arrayStringExist(out,in[i].symbol)) { ArrayResize(out,as+1); out[as]=in[i].symbol; } }
}
}
void getDateArray(sRow& in[],datetime& out[])
{
for(int i=0;i<ArraySize(in);i++)
{
int as=ArraySize(out);
if(as==0)
{ ArrayResize(out,as+1); out[as]=in[i].date; }
else
{ if(!arrayDateExist(out,in[i].date)) { ArrayResize(out,as+1); out[as]=in[i].date; } }
}
}
bool arrayDateExist(datetime& in[],datetime search)
{
bool adte = false;
for(int i=0;i<ArraySize(in);i++)
if(in[i]==search) { adte=true; break; }
return(adte);
}
bool arrayStringExist(string& in[],string search)
{
bool ase = false;
for(int i=0;i<ArraySize(in);i++)
if(in[i]==search) { ase=true; break; }
return(ase);
}
void setText(string prefix, string name, datetime dt, double p, color c, string text, int fs, double corner, ENUM_ANCHOR_POINT anchor, string fn="Arial")
{
ObjectCreate(cID,prefix+name,OBJ_TEXT,0,0,0);
ObjectSetInteger(cID,prefix+name,OBJPROP_TIME,dt);
ObjectSetDouble(cID,prefix+name,OBJPROP_PRICE,p);
ObjectSetDouble(cID,prefix+name,OBJPROP_ANGLE,corner);
ObjectSetInteger(cID,prefix+name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,prefix+name,OBJPROP_FONTSIZE,fs);
ObjectSetInteger(cID,prefix+name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,prefix+name,OBJPROP_SELECTABLE,false);
ObjectSetInteger(cID,prefix+name,OBJPROP_ANCHOR,anchor);
ObjectSetString(cID,prefix+name,OBJPROP_FONT,fn);
ObjectSetString(cID,prefix+name,OBJPROP_TEXT,text);
}
void setLabel(string prefix, string name, int xd, int yd, color c, string text, int fs, int corner, string fn="Arial")
{
ObjectCreate(cID,prefix+name,OBJ_LABEL,0,0,0);
ObjectSetInteger(cID,prefix+name,OBJPROP_CORNER,corner);
ObjectSetInteger(cID,prefix+name,OBJPROP_XDISTANCE,xd);
ObjectSetInteger(cID,prefix+name,OBJPROP_YDISTANCE,yd);
ObjectSetInteger(cID,prefix+name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,prefix+name,OBJPROP_FONTSIZE,fs);
ObjectSetInteger(cID,prefix+name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,prefix+name,OBJPROP_SELECTABLE,false);
ObjectSetString(cID,prefix+name,OBJPROP_FONT,fn);
ObjectSetString(cID,prefix+name,OBJPROP_TEXT,text);
}
void setArrowUp(string name, datetime t, double p, int c, int w)
{
ObjectCreate(cID,name,OBJ_ARROW_UP,0,0,0);
ObjectSetInteger(cID,name,OBJPROP_TIME,t);
ObjectSetDouble(cID,name,OBJPROP_PRICE,p);
ObjectSetInteger(cID,name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,name,OBJPROP_WIDTH,w);
ObjectSetInteger(cID,name,OBJPROP_ANCHOR,ANCHOR_RIGHT);
ObjectSetInteger(cID,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,name,OBJPROP_SELECTABLE,false);
}
void setArrowDn(string name, datetime t, double p, int c, int w)
{
ObjectCreate(cID,name,OBJ_ARROW_DOWN,0,0,0);
ObjectSetInteger(cID,name,OBJPROP_TIME,t);
ObjectSetDouble(cID,name,OBJPROP_PRICE,p);
ObjectSetInteger(cID,name,OBJPROP_COLOR,c);
ObjectSetInteger(cID,name,OBJPROP_WIDTH,w);
ObjectSetInteger(cID,name,OBJPROP_ANCHOR,ANCHOR_LEFT);
ObjectSetInteger(cID,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(cID,name,OBJPROP_SELECTABLE,false);
}
bool bWinInetDebug = true;
int hSession_IEType;
int hSession_Direct;
int Internet_Open_Type_Preconfig = 0;
int Internet_Open_Type_Direct = 1;
int Internet_Open_Type_Proxy = 3;
int Buffer_LEN = 512;
#import "wininet.dll"
int InternetAttemptConnect (int x);
int InternetOpenW(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0);
int InternetOpenUrlW(int hInternetSession, string sUrl, string sHeaders = "", int lHeadersLength = 0, int lFlags = 0, int lContext = 0);
int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
bool GrabWeb(string request, string& webpage)
{
if(!IsDllsAllowed()) { Comment("DLL's are forbidden!"); return(false); }
int rv = InternetAttemptConnect(0);
if(rv != 0) { Comment("Internet Attempt error!"); return(false); }
int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
if(hInternetSession <= 0) { Comment("Internet Open error!"); return(0); }
int hURL = InternetOpenUrlW(hInternetSession, request, "", 0, 0, 0);
if(hURL <= 0) { Comment("Internet Open Url error!"); InternetCloseHandle(hInternetSession); return(false); }
int cBuffer[256];
int dwBytesRead[1];
string TXT = "";
while(!IsStopped())
{
bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
if(dwBytesRead[0] == 0) break;
string text = "";
for(int i = 0; i < 256; i++)
{
text += CharToStr((uchar)(cBuffer[i] & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 8) & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 16) & 0x000000FF));
if(StringLen(text) == dwBytesRead[0]) break;
text += CharToStr((uchar)((cBuffer[i] >> 24) & 0x000000FF));
}
TXT += text;
}
webpage = TXT;
InternetCloseHandle(hInternetSession);
return(true);
}
void OnDeinit(const int reason)
{
//if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
//Comment("");
//ud=0;
}
так
{
//if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
//Comment("");
//ud=0;
}
new-rena:
так и сделал - сигналы на графике удаляются вместе с индикатором.
void OnDeinit(const int reason)
{
//if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
//Comment("");
//ud=0;
}
так{
//if(!IsTesting()) ObjectsDeleteAll(0,obj_prefix);
//Comment("");
//ud=0;
}
Izzatilla Ikramov:
так и сделал - сигналы на графике удаляются вместе с индикатором.
так и сделал - сигналы на графике удаляются вместе с индикатором.
Это тоже попробуйте закомментить
void drawTable(sRow& rowin[])
{
//ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
{
//ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
new-rena:
Получилось, большое спасибо. Оказывается последнее изменение лишнее.
Это тоже попробуйте закомментить
void drawTable(sRow& rowin[])
{
//ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
{
//ObjectsDeleteAll(0,obj_prefix);
datetime d[]; getDateArray(rowin,d);
string s[]; getSymbolArray(rowin,s);
Izzatilla Ikramov:
Получилось, большое спасибо. Оказывается последнее изменение лишнее.
Забыли нажать на кнопку "Компилировать"?
Получилось, большое спасибо. Оказывается последнее изменение лишнее.
На графике запускаем индикатор, он наносит свои сигналы на график. Как сделать так, что бы при сохранении шаблона и отправки его другу без индикатора, друг мог увидеть все сигналы на графике нужного инструмента.