коментарий и действие порадовало
// при удалении нашего индикатора нужно удалить все объекты, // которые мы уже создали ObjectsDeleteAll();
коментарий и действие порадовало
// при удалении нашего индикатора нужно удалить все объекты, // которые мы уже создали ObjectsDeleteAll();
Вы просто приняли решение за пользователя, что ему никакие объекты на экране вообще не нужны. Как говорится "после меня хоть потоп..."
Но на графике ведь может быть разметка не только вашим индюком.
Поэтому идентифицируйте свои объекты одним общим префиксом и потом удаляйте только свои объекты.
//------------------------------------------------------------------ ObjectsDeleteAll2 void ObjectsDeleteAll2(int wnd=-1, int type=-1, string pref="") { string st, names[]; int i, n=ObjectsTotal(); ArrayResize(names, n); for (i=0; i<n; i++) names[i]=ObjectName(i); for (i=0; i<n; i++) { if (wnd>=0) if (ObjectFind(names[i])!=wnd) continue; if (type>=0) if (ObjectType(names[i])!=type) continue; if (pref!="") if (StringSubstr(names[i], 0, StringLen(pref))!=pref) continue; ObjectDelete(names[i]); } }
Вы просто приняли решение за пользователя, что ему никакие объекты на экране вообще не нужны. Как говорится "после меня хоть потоп..."
Но на графике ведь может быть разметка не только вашим индюком.
Поэтому идентифицируйте свои объекты одним общим префиксом и потом удаляйте только свои объекты.
//------------------------------------------------------------------ ObjectsDeleteAll2 void ObjectsDeleteAll2(int wnd=-1, int type=-1, string pref="") { string st, names[]; int i, n=ObjectsTotal(); ArrayResize(names, n); for (i=0; i<n; i++) names[i]=ObjectName(i); for (i=0; i<n; i++) { if (wnd>=0) if (ObjectFind(names[i])!=wnd) continue; if (type>=0) if (ObjectType(names[i])!=type) continue; if (pref!="") if (StringSubstr(names[i], 0, StringLen(pref))!=pref) continue; ObjectDelete(names[i]); } }
вот более удобная версия. а еще посмотрите на красивые решения на сайте ForexTools. Сергей в этом плане всегда на передовой.
//---Настройка MA extern int FastSMA=13; extern int SlowSMA=24; //---Настройка WPR extern int WPRPeriod=13; //---Настройка MACD extern int FastMACD=12; extern int SlowMACD=26; extern int SignalMACD=9; //---Настройка OsMA extern int FastPeriod=12; extern int SlowPeriod=26; extern int SignalPeriod=9; //---Настройка CCI extern int CCIPeriod = 14; //---Настройка MOM extern int MOMPeriod = 14; //---Настройка RSI extern int RSIPeriod = 14; //---- Параметры ADX extern int ADXPeriod = 14; //----Настройка индикатора. extern int scaleX=20; extern int scaleY=20; extern int offsetX=35; extern int offsetY=20; extern int fontSize=16; extern int corner=2; extern int symbolCodeBuy=228; extern int symbolCodeSell=230; extern int symbolCodeNoSignal=178; extern color signalBuyColor=Blue, signalSellColor=Red, noSignalColor=WhiteSmoke, textColor=Gold; int period[]={1,5,15,30,60,240,1440,10080,43200}; string periodString[]={"M1","M5","M15","M30","H1","H4","D1","W1","MN1"}, // создаем еще один массив с названиями индикаторов signalNameString[]={"MA","WPR","SAR","MACD","OsMA","CCI","MOM","RSI","ADX"};//9 string sID="MST", arr[3], font="Wingdings"; color clr[3]; //------------------------------------------------------------------ init int init() { clr[0]=signalBuyColor; clr[1]=signalSellColor; clr[2]=noSignalColor; arr[0]=CharToStr(symbolCodeBuy); arr[1]=CharToStr(symbolCodeSell); arr[2]=CharToStr(symbolCodeNoSignal); // таблица сигналов for(int x=0;x<9;x++) for(int y=0;y<9;y++) SetLabel(sID+"signal"+x+y, 0, arr[2], clr[2], x*scaleX+offsetX+5, y*scaleY+40, corner, fontSize, font); // названия таймфреймов for(x=0;x<9;x++) SetLabel(sID+"textPeriod"+x, 0, periodString[x], textColor, x*scaleX+offsetX+6, offsetY+10, corner, 8, "Tahoma"); // названия индикаторов for(y=0;y<9;y++) SetLabel(sID+"textSignal"+y, 0, signalNameString[y], textColor, offsetX-25, y*(scaleY)+offsetY+24, corner, 8, "Tahoma"); for(x=0;x<9;x++) SetLabel(sID+"MainSignal"+x, 0, arr[2], clr[2], x*scaleX+offsetX+5, 5, corner, fontSize, font); return(0); } //------------------------------------------------------------------ deinit int deinit() { ObjectsDeleteAll2(0, OBJ_LABEL, sID); return(0); } //------------------------------------------------------------------ start int start() { int Sum[9]; ArrayInitialize(Sum, 0); int x, y, sign=-1; for(x=0; x<9; x++) { y=0; if(iMA(Symbol(), period[x], FastSMA,0,0,0,0)>iMA(Symbol(), period[x], SlowSMA,0,0,0,0)) { sign=OP_BUY; Sum[x]++; } else {sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; sign=2; if(MathAbs(iWPR(Symbol(),period[x],WPRPeriod,0))<20.0) { sign=OP_BUY; Sum[x]++; } else if(MathAbs(iWPR(Symbol(),period[x],WPRPeriod,0))>80.0) { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if(iSAR(Symbol(),period[x],0.02,0.2,0)<Close[0]) { sign=OP_BUY; Sum[x]++; } else {sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iMACD(Symbol(),period[x],FastMACD,SlowMACD,SignalMACD,PRICE_CLOSE,MODE_MAIN,0)>iMACD(Symbol(),period[x],FastMACD,SlowMACD,SignalMACD,PRICE_CLOSE,MODE_MAIN,1)) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iOsMA(Symbol(),period[x],FastPeriod,SlowPeriod,SignalPeriod,PRICE_CLOSE,0) > 0) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iCCI(Symbol(),period[x],CCIPeriod,PRICE_CLOSE,0) > 0) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iMomentum(Symbol(),period[x],MOMPeriod,PRICE_CLOSE,0) > 100) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iRSI(Symbol(),period[x],RSIPeriod,PRICE_CLOSE,0) > 50) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); y++; if (iADX(Symbol(),period[x],ADXPeriod,PRICE_CLOSE,MODE_PLUSDI,0) > iADX(Symbol(),period[x],ADXPeriod,PRICE_CLOSE,MODE_MINUSDI,0)) { sign=OP_BUY; Sum[x]++; } else { sign=OP_SELL; Sum[x]--; } ObjectSetText(sID+"signal"+x+y, arr[sign], fontSize, font, clr[sign]); } for (x=0; x<9; x++) { sign=2; if (Sum[x]>0) sign=OP_BUY; else sign=OP_SELL; ObjectSetText(sID+"MainSignal"+x, arr[sign], fontSize,"Wingdings", clr[sign]); } return(0); } //------------------------------------------------------------------ SetLabel void SetLabel(string name, int wnd, string text, color clr, int x, int y, int corn, int fontsize, string font) { ObjectCreate(name, OBJ_LABEL, wnd, 0, 0); ObjectSet(name, OBJPROP_CORNER, corn); ObjectSetText(name, text, fontsize, font, clr); ObjectSet(name, OBJPROP_XDISTANCE, x); ObjectSet(name, OBJPROP_YDISTANCE, y); } //------------------------------------------------------------------ ObjectsDeleteAll2 void ObjectsDeleteAll2(int wnd=-1, int type=-1, string pref="") { string st, names[]; int i, n=ObjectsTotal(); ArrayResize(names, n); for (i=0; i<n; i++) names[i]=ObjectName(i); for (i=0; i<n; i++) { if (wnd>=0) if (ObjectFind(names[i])!=wnd) continue; if (type>=0) if (ObjectType(names[i])!=type) continue; if (pref!="") if (StringSubstr(names[i], 0, StringLen(pref))!=pref) continue; ObjectDelete(names[i]); } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
My Signal Table:
Author: intoffy