//+------------------------------------------------------------------+ //| geSCtrl_Tick.mq4 | //| forte928 | //| | //+------------------------------------------------------------------+ #property copyright "forte928" #property link "" /* Ñêðèïò ïðåäíàçíà÷åí äëÿ óñòàíîâêè äâóõ ïàðàìåòðîâ ñìåùåíèÿ è êîë-âà ðàñ÷åòíûõ äàííûõ äëÿ èíäèêàòîðà ñîâåòíèêà èëè æå äðóãîãî ñêðèïòà ÷åðåç ãëîáàëüíûå ïåðåìåííûå, à òàêæå ñóùåñòâóåò âîçìîæíîñòü àâòîìàòè÷åñêè ïðîõîäèòü ïî äèàïàçîíó äàííûõ îò íà÷àëüíî óñòàíîâëåíîãî áàðà äî íóëåãî ñ çàäåðæêîé â îò 1 ñåêóíäû.. Ìîè áëàãîäàðíîñòè çà íà÷àëüíóþ èäåþ Ïîääóáíîìó Îëåãó åãî ñêðèïò Mover.mq4.. */ //#include <WinUser32.mqh> âñòàâëÿë.Íàäî ðàçðåøèòü èìïîðò ÄËË â íàñòðîéêàõ ÌÒ4. //PostMessageA (WindowHandle (Symbol(), 0), WM_COMMAND, 33324, 0); // Ýìóëèðóåì òèê äëÿ èíäèêàòîðîâ //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ //============================================================== //Control Emulated --> "CE_" #include <WinUser32.mqh> // Çàãîëîâî÷íûé ôàéë áèáëèîòåêè "user32.dll" ôóíêöèé API Windows XP. #include <ge_VKKeyCode.mq4> //#include "ge_Debug.mq4" #define WM_COMMAND 0x0111 #define gnObject "CE_Ctrl" #define gnShift "CE_Shift" #define gnCount "CE_Count" #define gnEmulate "_Emulated" #define gnCalculate "_Calculated" #define gnPauseCount "_PauseCount" #property show_inputs //============================================================== string iSymbol; int iPeriod; bool IsWorking=true; // Ïðîâåðêà íà ïðîäîëæåíèå ðàáîòîñïîñîáíîñòè ñêðèïòà int TimeRight,TimeLeft; // Òåêóùàÿ îáðàáàòûâàåìàÿ ïîçèöèÿ (âðåìåíè) int TickPrd,TickLeft,TickRight; // Òåêóùàÿ îáðàáàòûâàåìàÿ ïîçèöèÿ (áàð) int TimeRSave,TimeLSave; // Çíà÷åíèå ñîõðàíåíîé ïîçèöèè (âðåìåíè) int SetBars =0; // óñòàíîâêà íà÷àëüíîãî áàðà ýìóëÿöèè òèêîâ datetime SetTime =0; // Óñòàíîâêà íà÷àëüíîãî âðåìåíè ýìóëÿöèè òèêîâ bool Emulated =false; // ôëàã ýìóëÿöèè ïîñòóïëåíèÿ òèêîâ, óñòàíîâêà çíà÷åíèÿ ÷åðåç F3 // false - ðó÷íàÿ (ïåðåìåùåíèå îáüåêòà ìûøêîé) // true - àâòîìàòè÷åñêîå ýìóëÿöè ïîñòóïàþùèé òèêîâ äî "0" áàðà bool Calculated =false; // ôëàã îêîí÷àíèÿ ïåðåñ÷åòà äàííûõ (èíäèêàòîð, ñîâåòíèê èëè ñêðèïò) extern int PauseCount =100; // Çàäåðæêà âûïîëíåíèÿ Ñêðèïòà ìèíèìàëüíîå çíà÷åíèå 100ìñ. int PauseWait =0; // Ñ÷åò÷èê ïàóçû âûïîëíåíèÿ Ñêðèïòà â ðåæèìå ýìóëÿöèè bool Modifed =false; // ôëàã íàëè÷èÿ èçìåíåíèÿ ïîçèöèè îáúåêòà /* Ïðèìåð èñïîëüçîâàíèÿ â èíäèêàòîðå : ... extern int Shift=0; // ïåðåìåíàÿ ñìåùåíèÿ íà÷àëüíûõ ðàñ÷åòíûõ äàííûõ èíäèêàòîðà extern int Count=1000; // ïåðåìåíàÿ êîë-âà ðàñ÷åòíûõ çíà÷åíèé èíäèêàòîðà ... #define gnShift "CE_Shift" #define gnCount "CE_Count" #define gnEmulate "_Emulated" #define gnCalculate "_Calculated" int start() { bool Emulated =false; bool Calculated =false; bool Checked =false; if ((GlobalVariableCheck(gnEmulate)==true)||(GlobalVariableCheck(gnCalculate)==true)) { Emulated=GlobalVariableGet(gnEmulate); Calculated=GlobalVariableGet(gnCalculate); Checked=true; } if (Checked==false) { int limit; int counted_bars=IndicatorCounted(); //---- ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; } else { if (Calculated==true) return(0); } //---- îñíîâíîé öèêë if (Checked==true) { Shift=GlobalVariableGet(gnShift); Count=GlobalVariableGet(gnCount); } double Rates[],TimeBuf1[]; ArrayResize(Rates);ArrayResize(TimeBuf1); for (Ix=0;Ix<Count;Ix++) Rates[Ix]=Close[Ix+Shift]; LineRegressOnArray(Rates,TimeBuf1,DeGree,LRCalc); // ðàñ÷åò ëèíåéíîé ðåãðåñèè ðåçóëüòàò â TimeBuf1 // SetIndexBuffer(0, FxView1); ArrayCopy(FxView1,TimeBuf1,Shift,0,Count); // îòîáðàæåíèå íà ëèíèè èíäèêàòîðà if ((Checked==true)&&(Calculated==false)) GlobalVariableSet(gnCalculate,true); //---- return(0); } //+-----------------------------------------------------------------------------------------------+\\ */ //************************************************************** int init() { // ïðîâåðêà íà íàëè÷èå çàïóùåãîãî Ñêðèïòà.. PauseWait=500; if (GlobalVariableCheck(gnEmulate)==true) { GlobalVariableDel(gnEmulate); Sleep(PauseWait); if (GlobalVariableCheck(gnEmulate)==true) { MessageBox("Ïîäîáíûé ñêðèïò çàïóùåí â äðóãîì îêíå","",IDOK); return; } } PauseWait=0; iSymbol=Symbol(); iPeriod=Period(); TickPrd=100; TimeRight=WindowTimeOnDropped();Print(TimeToStr(TimeRight,TIME_DATE|TIME_MINUTES)); TickRight=iBarShift(NULL,iPeriod,TimeRight); TickLeft=WindowFirstVisibleBar(); if ((TickLeft-TickRight)>TickPrd) TickLeft=TickRight+TickPrd; if ((TickLeft-TickRight)<TickPrd) TickRight=TickLeft-TickPrd; if (TickRight<0) {TickRight=0;TickLeft=TickPrd-1;} TimeLeft=Time[TickLeft]; TimeRight=Time[TickRight]; TimeRSave=TimeRight; TimeLSave=TimeLeft; ObjectCreate(gnObject,4,0,TimeLeft,0,TimeRight,0); ObjectSet(gnObject,OBJPROP_COLOR,Gold); GlobalVariableSet(gnShift,TickRight); GlobalVariableSet(gnCount,TickPrd); GlobalVariableSet(gnEmulate,Emulated); GlobalVariableSet(gnCalculate,Calculated); GlobalVariableSet(gnPauseCount,PauseCount); //PostMessageA (WindowHandle(iSymbol,iPeriod), WM_COMMAND, 33324, 0); // Îáíîâëÿåì îêíî. WindowRedraw(); } //************************************************************** int start() { if (PauseWait>0) return; PauseWait=0; int HandlWindow=WindowHandle(iSymbol,iPeriod); //---- while (IsWorking==true) { while(ObjectFind(gnObject)>=0) { // ïðîâåðêà íàëè÷èÿ ãëîáàëüíûûõ ïåðåìåííûõ óïðàâëåíèÿ if (GlobalVariableCheck(gnEmulate)==false) GlobalVariableSet(gnEmulate,Emulated); Emulated=GlobalVariableGet(gnEmulate); if (GlobalVariableCheck(gnCalculate)==false) GlobalVariableSet(gnCalculate,false); Calculated=GlobalVariableGet(gnCalculate); if (GlobalVariableCheck(gnPauseCount)==false) GlobalVariableSet(gnPauseCount,PauseCount); PauseCount=GlobalVariableGet(gnPauseCount); if (PauseCount<100) {PauseCount=100;GlobalVariableSet(gnPauseCount,PauseCount);} if (Emulated==true) { //ïðîâåðêà íàëè÷èÿ îêîí÷àíèÿ çàäåðæêè TimeRight=TimeRSave; TimeLeft=TimeLSave; PauseWait=PauseWait-100; if (PauseWait<=0) { PauseWait=PauseCount; TickRight=iBarShift(NULL,iPeriod,TimeRight)-1; TickLeft=iBarShift(NULL,iPeriod,TimeLeft)-1; if (TickRight>=0) { TimeRight=Time[TickRight]; TimeLeft=Time[TickLeft]; ObjectSet(gnObject,OBJPROP_TIME2,TimeRight); ObjectSet(gnObject,OBJPROP_TIME1,TimeLeft); } else GlobalVariableSet(gnEmulate,false); // îñòàíîâêà àâòîìàòè÷åñêîé ýìóëÿöèè òèêîâ } else{ if (TimeRight!=ObjectGet(gnObject,OBJPROP_TIME2)) ObjectSet(gnObject,OBJPROP_TIME2,TimeRight); if (TimeLeft!=ObjectGet(gnObject,OBJPROP_TIME1)) ObjectSet(gnObject,OBJPROP_TIME1,TimeLeft); } } else { TimeRight=ObjectGet(gnObject,OBJPROP_TIME2); TimeLeft=ObjectGet(gnObject,OBJPROP_TIME1); if (TimeRight>Time[0]) TimeRight=Time[0]; TickRight=iBarShift(NULL,iPeriod,TimeRight); TickLeft=iBarShift(NULL,iPeriod,TimeLeft); } // ïðîâåðêà è ñîõðàíåíèå ïîçèöèè îáüåêòà TickPrd=TickLeft-TickRight; if (TickPrd<10) { TickPrd=10; TickLeft=TickRight+TickPrd; TimeLeft=Time[TickLeft]; ObjectSet(gnObject,OBJPROP_TIME1,TimeLeft); } if (TimeRSave!=TimeRight || TimeLSave!=TimeLeft) { GlobalVariableSet(gnShift,TickRight); GlobalVariableSet(gnCount,TickPrd); TimeRSave=TimeRight; TimeLSave=TimeLeft; Modifed=true; // íàëè÷èå èçìåíåíèÿ ïîçèöèè îáüåêòà //Debug("Modifed"); if (WindowFirstVisibleBar()<TickLeft) { PostMessageA(HandlWindow, WM_KEYDOWN, VK_LEFT, 1);Sleep(50); PostMessageA(HandlWindow, WM_KEYDOWN, VK_LEFT, 1);Sleep(50); PostMessageA(HandlWindow, WM_KEYDOWN, VK_LEFT, 1);Sleep(50);PostMessageA(HandlWindow, WM_KEYUP, VK_LEFT, 1); } if ((WindowFirstVisibleBar()-WindowBarsPerChart())>TickRight) { PostMessageA(HandlWindow, WM_KEYDOWN, VK_RIGHT, 1);Sleep(50); PostMessageA(HandlWindow, WM_KEYDOWN, VK_RIGHT, 1);Sleep(50); PostMessageA(HandlWindow, WM_KEYDOWN, VK_RIGHT, 1);Sleep(50);PostMessageA(HandlWindow, WM_KEYUP, VK_RIGHT, 1); } } if ((Calculated==true)&&(Modifed==true)) { GlobalVariableSet(gnCalculate,False); Modifed=false; PostMessageA (HandlWindow, WM_COMMAND, 33324, 0); // Îáíîâëÿåì îêíî. PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Ýììóëÿöèÿ òèêà äëÿ ýêñïåðòà. //Debug("PostMessageA"); } WindowRedraw();//PostMessageA (HandlWindow, WM_COMMAND, 33324, 0); // Îáíîâëÿåì îêíî. //PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Ýììóëÿöèÿ òèêà äëÿ ýêñïåðòà. Comment("TimeLeft :",TimeToStr(TimeLSave,TIME_DATE|TIME_MINUTES)," LeftBar : ",TickLeft," RightBar : ",TickRight,"\n", WindowFirstVisibleBar()," ",WindowBarsPerChart()); Sleep(100); }//==================== îñíîâíîé öèêë âûïîëíåíèÿ Ñêðèïòà ===================================== int Result=MessageBox("Çàâåðøèòü âûïîëíåíèå Ñêðèïòà ?", "Question", MB_YESNO|MB_ICONQUESTION); if(Result!=IDYES) { ObjectCreate(gnObject,4,0,TimeLeft,0,TimeRight,0); ObjectSet(gnObject,OBJPROP_COLOR,Gold); WindowRedraw();//PostMessageA (WindowHandle(iSymbol,iPeriod), WM_COMMAND, 33324, 0); // Îáíîâëÿåì îêíî. } else IsWorking=False; } //============================================= PauseWait=0; return(0); } //************************************************************** void deinit() { if (PauseWait>0) return; ObjectDelete(gnObject); GlobalVariableDel(gnShift); GlobalVariableDel(gnCount); GlobalVariableDel(gnEmulate); GlobalVariableDel(gnCalculate); GlobalVariableDel(gnPauseCount); WindowRedraw();//PostMessageA (WindowHandle(iSymbol,iPeriod), WM_COMMAND, 33324, 0); // Îáíîâëÿåì îêíî. } //**************************************************************
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It opens Message Boxes to the user