//+------------------------------------------------------------------+
//| Êðåñòèêè-Íîëèêè.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
// âûâîäèì îêíî ñ ïàðàìåòðàìè ïðè çàïóñêå
#property show_inputs
// ïåðèîä îáíîâëåíèÿ ãðàôèêà
extern int delay = 100;
// ìèíèìàëüíîå êîëè÷åñòâî ïóíêòîâ äëÿ ðàçâîðîòà
extern int Razvorot=372;
// ìèíèìàëüíîå êîëè÷åñòâî ïóíêòîâ äëÿ ïðîäîëæåíèÿ òåíäåíöèè
extern int PryamoyHod=124;
// øèðèíà ñòîëáöîâ â êîëè÷åñòâå áàðîâ
extern int Dlina=2;
// ïîêàçûâàåì ñåòêó
extern bool Setka=false;
//âðåìÿ íà÷àëà ðàñ÷åòà äëÿ ãëóáîêèõ ãðàôèêîâ
extern string BeginDate="2000.01.01 00:00";
// ôëàã óñïåøíîãî âûïîëíåíèÿ èíèöèàëèçàöèè
bool initOk = true;
// ãëîáàëüíàÿ ïåðåìåííàÿ äëÿ ñîõðàíåíèÿ äîñòèãíóòîãî óðîâíÿ íà ìàðêåðå
double PP;
// ìàññèâû èìåí îáúåêòîâ äëÿ êîîðåêòíîãî óäàëåíèÿ òîëüêî òîãî ÷òî ñîçäàë ñêðèïò
string Names[],Names1[],VLines[],HLines[];
// ìàññèâ äî ìàðêåðà
int prev[];
// èíèöèàëèçàöèÿ ñêðèïòà
int init()
{
// ïûòàåìñÿ ñîçäàòü âåðòèêàëüíóþ ëèíèþ
if (!ObjectCreate("Our_Time", OBJ_VLINE, 0, WindowTimeOnDropped(), 0))
{
Print("Îøèáêà ïðè ñîçäàíèè âåðòèêàëüíîé ëèíèè Our_Time");
initOk = false;
return (0);
}
// óñòàíàâëèâàåì öâåòà ñîçäàííûõ ëèíèé
ObjectSet("Our_Time", OBJPROP_COLOR, Green);
// ObjectsDeleteAll();
// îáíîâëÿåì îêíî
WindowRedraw();
return (0);
}
// äåèíèöèàëèçàöèÿ ñêðèïòà
int deinit()
{
// åñëè èíèöèàëèçàöèÿ íå óäàëàñü - âûõîäèì
if (!initOk)
{
return (0);
}
// óíè÷òîæàåì âåðòèêàëüíóþ ëèíèþ
ObjectDelete("Our_Time");
// îáíîâëÿåì îêíî
//ObjectsDeleteAll();
//óäàëÿåì ïðîøëûé ðèñóíîê
for(int l=ArraySize(Names)-1;l>=0;l--)
{
ObjectDelete(Names[l]);
ObjectDelete(Names1[l]);
}
if(Setka)
{
for( l=ArraySize(VLines)-1;l>=0;l--)
ObjectDelete(VLines[l]);
for( l=ArraySize(HLines)-1;l>=0;l--)
ObjectDelete(HLines[l]);
}
WindowRedraw();
return (0);
}
int start()
{
//----
int nach_bar;
int temp2;
double Ptemp;
int bgbr=iBarShift(NULL,0,StrToTime(BeginDate));
double BegPrice=Open[bgbr];
bool krestik;
string name,name1,nameHLine,nameVLine;
int ch,chvl,chhl;
double min_znach,max_znach;
// åñëè èíèöèàëèçàöèÿ íå óäàëàñü - âûõîäèì
if (!initOk)
{
return (0);
}
// ïðåäûäóùèå ïîëîæåíèÿ óïðàâëÿþùèõ ëèíèé
datetime timePrevLine = -1;
while (!IsStopped())
{
// âûäåðæèâàåì ïàóçó äëÿ óìåíüøåíèÿ íàãðóçêè íà ñèñòåìó
Sleep(delay);
// ïðîâåðÿåì íàëè÷èå óïðàâëÿþùèõ ëèíèé íà ãðàôèêå (åñëè îòñóòñòâóþò - çàâåðøàåìñÿ)
if (ObjectFind("Our_Time") == -1)
{
Print("Íå íàéäåíà ëèíèÿ Our_Time");
break;
}
// ñ÷èòûâàåì ïîëîæåíèÿ óïðàâëÿþùèõ ëèíèé
datetime timeLine = ObjectGet("Our_Time", OBJPROP_TIME1);
// ïðîâåðÿåì íåîáõîäèìîñòü îáíîâëåíèÿ ïîñòðîåíèé
if (timeLine == timePrevLine)
{
continue;
}
//óäàëÿåì ïðîøëûé ðèñóíîê
for(int l=ch-1;l>=0;l--)
{
ObjectDelete(Names[l]);
ObjectDelete(Names1[l]);
}
ch=0;
if(Setka)
{
for( l=chvl-1;l>=0;l--)
ObjectDelete(VLines[l]);
chvl=0;
for( l=chhl-1;l>=0;l--)
ObjectDelete(HLines[l]);
chhl=0;
}
timePrevLine = timeLine;
// îïðåäåëÿåì ñìåùåíèÿ áàðîâ
int shiftLine = iBarShift(Symbol(), Period(), timeLine);
if (shiftLine==0)
{
Alert("Íåäîïóñòèìîå ïîëîæåíèå ìàðêåðíîé ëèíèè");
break;
}
// îñíîâíîå âû÷èñëåíèå
PP=z(prev,Razvorot,PryamoyHod,bgbr,shiftLine,BegPrice,0);
//ïðîâåðêà ïåðåïîëíåíèÿ îêíà îòîáðàæåíèÿ
if((bgbr-shiftLine)/Dlina<ArraySize(prev))
{
Alert("Äî ìàðêåðà: ðàçìåð ìàññèâà= "+ArraySize(prev)+" Êîëè÷åñòâî áàðîâ= "+(Bars-1-shiftLine));
break;
}
//áëîê îòðèñîâêè ***********************
//ïîäãîòîâèòåëüíûå ðàñ÷åòû, ñ êàêîãî áàðà ðèñîâàòü
nach_bar=shiftLine+ArraySize(prev)*Dlina;
Ptemp=BegPrice;//öåíà ñ êîòîðîé íà÷èíàåì ðàñ÷åò
//âû÷èñëÿåì íàèáîëüøóþ è íàèìåíüøóþ öåíó êîòîðàÿ áóäåò íà ãðàôèêå äëÿ ñåòêè
if(Setka)
{
double promejut[];
ArrayResize(promejut,ArraySize(prev));
ArrayInitialize(promejut,0.0);
promejut[0]=BegPrice+prev[0]*PryamoyHod*Point;
for(int q=1;q<=ArraySize(prev)-1;q++)
{
promejut[q]=promejut[q-1]+prev[q]*PryamoyHod*Point;
}
min_znach=promejut[ArrayMinimum(promejut)];
max_znach=promejut[ArrayMaximum(promejut)];
Print(min_znach+" "+max_znach);
//ñòðîèì âèðòèêàëüíûå ëèíèè ñåòêè
for(int a=nach_bar;a>=shiftLine;a=a-Dlina)
{
chvl++;
ArrayResize(VLines,chvl);
nameVLine="VLine"+chvl;
VLines[chvl-1]=nameVLine;
ObjectCreate(nameVLine,OBJ_VLINE,0,Time[a],0);
ObjectSet(nameVLine,OBJPROP_COLOR,Silver);
}
//ñòðîèì ãîðèçîíòàëüíûå ëèíèè ñåòêè
for(double o=min_znach;o<=max_znach;o=o+PryamoyHod*Point)
{
chhl++;
ArrayResize(HLines,chhl);
nameHLine="HLine"+chhl;
HLines[chhl-1]=nameHLine;
ObjectCreate(nameHLine,OBJ_HLINE,0,Time[1],o);
ObjectSet(nameHLine,OBJPROP_COLOR,Silver);
}
}
for(int i=0;i<=ArraySize(prev);i++)//öèêë äëÿ âñåõ ñòîëáöîâ
{
//Print(prev[i]);
if(prev[i]<0)//ôëàã äëÿ îïðåäåëåíèÿ êðåñòèêà èëè íîëèêà
{
krestik=false;
temp2=-prev[i];
}
else
{
krestik=true;
temp2=prev[i];
}
if(i!=0)//óñëîâèå äëÿ îïðåäåëåíèÿ íà÷àëà îòðèñîâêè â ïåðâûé ðàç íè÷åãî íå ñìåùàåì
{
if(krestik)//ñìåùàåì ââåðõ
{
Ptemp=Ptemp+PryamoyHod*Point;
}
else//ñìåùàåì âíèç
{
Ptemp=Ptemp-PryamoyHod*Point;
}
}
for(int j=temp2;j>0;j--)//öèêë äëÿ ýëåìåíòîâ ñòîëáöà
{
name="Prev"+i+"a"+j;
name1="Prev_"+i+"a"+j;
if(krestik)
{
ch++;
ArrayResize(Names,ch);
ArrayResize(Names1,ch);
Names[ch-1]=name;
Names1[ch-1]=name1;
//ðèñóåì êðåñòèê
//Print(Ptemp+" "+(Ptemp+PryamoyHod*Point));
ObjectCreate(name,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp+PryamoyHod*Point);
ObjectSet(name,OBJPROP_COLOR,OldLace);
ObjectSet(name,OBJPROP_BACK,true);
//ðèñóåì ãðàíèöó
ObjectCreate(name1,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp+PryamoyHod*Point);
ObjectSet(name1,OBJPROP_COLOR,Black);
ObjectSet(name1,OBJPROP_BACK,false);
Ptemp=Ptemp+PryamoyHod*Point;
}
else
{
ch++;
ArrayResize(Names,ch);
ArrayResize(Names1,ch);
Names[ch-1]=name;
Names1[ch-1]=name1;
//ðèñóåì íîëèê
//Print(Ptemp+" "+(Ptemp-PryamoyHod*Point));
ObjectCreate(name,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp-PryamoyHod*Point);
ObjectSet(name,OBJPROP_COLOR,Red);
ObjectSet(name,OBJPROP_BACK,true);
//ðèñóåì ãðàíèöó
ObjectCreate(name1,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp-PryamoyHod*Point);
ObjectSet(name1,OBJPROP_COLOR,Black);
ObjectSet(name1,OBJPROP_BACK,false);
Ptemp=Ptemp-PryamoyHod*Point;
}
}
}
Comment(shiftLine);
}
//----
return(0);
}
//+------------------------------------------------------------------+
// ****************************************************************************************
// ôóíêöèÿ äëÿ ôîðìèðîâàíèÿ ìàññèâà ïîñòðîåíèÿ ôóíêöèÿ âîçâðàùàåò ïîñëåäíåå äîñòèãíóòîå çíà÷åíèå
// k[]-èñêîìûé ìàññèâ
// razv-ðàçâîðîò â ïóíêòàõ
// prhod-ïðÿìîé õîä â ïóíêòàõ
// begin-íîìåð áàðà íà÷àëà ðàñ÷åòà
// end-íîìåð áàðà êîíåö ðàñ÷åòà
// begin_price-öåíà ñ êîòîðîé âåäåì ðàñ÷åò
// vektor-êóäà ñ÷èòàåì -1 âíèç, +1 íàâåðõ
//*****************************************************************************************
double z (int& k[],int razv,int prhod,int begin,int end,double begin_price,int vektor)
{
double pr=begin_price;//òåêóùàÿ öåíà
int index=0;//òåêóùèé èíäåêñ ìàññèâà
int temp1;
ArrayResize(k,1);//ïåðåèíèöèàëèçèðóåì ìàññèâ
ArrayInitialize(k,vektor); //çàäåì íàïðàâëåíèå äâèæåíèÿ
for(int i=begin;i>=end;i--)//ïðîõîä ïî áàðàì äî ìàðêåðà
{
if(k[index]>=0)//ïðîâåðêà ÷òî çàïèñàíî â ìàññèâ ïîñëåäíèì êðåñòèê èëè íîëèê Õ=+,0=0 èëè -
{
if(High[i]>=pr+prhod*Point)//ïðîâåðêà íà ïðÿìîé õîä
{
//ñìîòðèì íà ñêîëüêî êðåñòèêîâ óøëà öåíà
temp1=((High[i]-pr)/Point)/prhod;
//çàïîìèàåì äîñòèãíóòûé óðîâåíü
pr=pr+prhod*temp1*Point;
//çàïîëíÿåì ìàññèâ
k[index]=k[index]+temp1;
continue;
}
if(Low[i]<=pr-razv*Point)//ïðîâåðêà íà îáðàòíûé õîä
{
//ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
temp1=((pr-Low[i])/Point)/prhod;
//çàïîìèíàåì äîñòèãíóòûé óðîâåíü
pr=pr-prhod*temp1*Point;
//óâåëè÷èâàåì êîëè÷åñòâî ýëåìåíòîâ ìàññèâà íà åäèíèöó
index++;
ArrayResize(k,index+1);
//çàïîëíÿåì ìàññèâ
k[index]=-temp1;
}
}
else
{
if(Low[i]<=pr-prhod*Point)//ïðîâåðêà íà ïðÿìîé õîä
{
//ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
temp1=((pr-Low[i])/Point)/prhod;
//çàïîìèàåì äîñòèãíóòûé óðîâåíü
pr=pr-prhod*temp1*Point;
//çàïîëíÿåì ìàññèâ
k[index]=k[index]-temp1;
continue;
}
if(High[i]>=pr+razv*Point)//ïðîâåðêà íà îáðàòíûé õîä
{
//ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
temp1=((High[i]-pr)/Point)/prhod;
//çàïîìèíàåì äîñòèãíóòûé óðîâåíü
pr=pr+prhod*temp1*Point;
//óâåëè÷èâàåì êîëè÷åñòâî ýëåìåíòîâ ìàññèâà íà åäèíèöó
index++;
ArrayResize(k,index+1);
//çàïîëíÿåì ìàññèâ
k[index]=temp1;
}
}
}
return(pr);
}
Comments