Files
2025-06-24 00:33:04 +01:00

78 lines
5.3 KiB
Plaintext

//+------------------------------------------------------------------+
//| LeadLagRelationshipTester.mq5 |
//| Хасанов Ильнур Фаритович (aharata) |
//| https://www.mql5.com/ru/users/aharata |
//+------------------------------------------------------------------+
#property copyright "Хасанов Ильнур Фаритович (aharata)"
#property link "https://www.mql5.com/ru/users/aharata"
#property version "1.00"
#property description "Скрипт для проверки индикатора LeadLagRelationship"
sinput uint inpTimerPeriod = 100; // период основного таймера в мс
sinput string inpFilename = "buffer.csv"; // название файла для отправки котировок (\Terminal\Common\Files)
sinput string inpGlobalVariableAsk = "ask"; // название глобальной переменной для аск
sinput string inpGlobalVariableBid = "bid"; // название глобальной переменной для бид
sinput int inpUseMode = 0; // режим канала; 0 - файл, 2 - глобальные перменные терминала
sinput int inpSetLag = 12000; // заданное отставание в мс
uint msCounter, memMsCounter = 0;
MqlTick tick, ticks[];
int sizeTicks = 0;
int fileHandle;
void OnStart()
{
if(!EventSetMillisecondTimer(inpTimerPeriod)) // количество миллисекунд
{
Print("Ошибка установки таймера, код ошибки:" + IntegerToString(GetLastError()));
ResetLastError();
}
sizeTicks = (int)MathRound(inpSetLag / inpTimerPeriod);
ArrayResize(ticks, sizeTicks, sizeTicks);
while(!IsStopped())
{
msCounter = GetTickCount();
if(msCounter - memMsCounter >= inpTimerPeriod)
{
SymbolInfoTick(Symbol(), tick);
ticks[0] = tick;
for(int i = sizeTicks - 1; i > 0; i--)
{
ticks[i] = ticks[i - 1];
}
tick = ticks[sizeTicks - 1];
if(inpUseMode == 0)
{
fileHandle = FileOpen(inpFilename, FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_READ|FILE_SHARE_WRITE);
if(fileHandle != INVALID_HANDLE)
{
FileWrite(fileHandle, tick.ask, tick.bid);
FileFlush(fileHandle);
FileClose(fileHandle);
}
Sleep(1);
}
if(inpUseMode == 2)
{
GlobalVariableSet(inpGlobalVariableAsk, tick.ask);
GlobalVariableSet(inpGlobalVariableBid, tick.bid);
}
memMsCounter = msCounter;
}
}
EventKillTimer();
if(inpUseMode == 0)
{
if(fileHandle != INVALID_HANDLE)
{
FileClose(fileHandle);
}
}
}