geSCtrl_Tick





//+------------------------------------------------------------------+
//|																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