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:
Получилось, большое спасибо. Оказывается последнее изменение лишнее.
Забыли нажать на кнопку "Компилировать"?
Получилось, большое спасибо. Оказывается последнее изменение лишнее.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На графике запускаем индикатор, он наносит свои сигналы на график. Как сделать так, что бы при сохранении шаблона и отправки его другу без индикатора, друг мог увидеть все сигналы на графике нужного инструмента.