Скачать MetaTrader 5

Индикаторы: My Signal Table

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
188100
MetaQuotes Software Corp.  

My Signal Table:

Моя версия Signal Table

Author: intoffy

o_o
Модератор
24290
o_o  

коментарий и действие порадовало

 // при удалении нашего индикатора нужно удалить все объекты,
   // которые мы уже создали
   ObjectsDeleteAll();
Ivan Tretykov
136
Ivan Tretykov  
sergeev:

коментарий и действие порадовало

 // при удалении нашего индикатора нужно удалить все объекты,
   // которые мы уже создали
   ObjectsDeleteAll();
А что не так???
o_o
Модератор
24290
o_o  

Вы просто приняли решение за пользователя, что ему никакие объекты на экране вообще не нужны. Как говорится "после меня хоть потоп..."

Но на графике ведь может быть разметка не только вашим индюком.

Поэтому идентифицируйте свои объекты одним общим префиксом и потом удаляйте только свои объекты.

//------------------------------------------------------------------ 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]);
        }
}
Ivan Tretykov
136
Ivan Tretykov  
sergeev:

Вы просто приняли решение за пользователя, что ему никакие объекты на экране вообще не нужны. Как говорится "после меня хоть потоп..."

Но на графике ведь может быть разметка не только вашим индюком.

Поэтому идентифицируйте свои объекты одним общим префиксом и потом удаляйте только свои объекты.

//------------------------------------------------------------------ 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]);
        }
}
Ну, да... извините... Я об этом не подумал... Все-таки, ваш опыт программирования и мой... сравнили тоже...
o_o
Модератор
24290
o_o  

вот более удобная версия. а еще посмотрите на красивые решения на сайте 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]);
        }
}
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий