Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 12)
}
// Установка массивов как таймсерии
ArraySetAsSeries(fastMA, true);
ArraySetAsSeries(slowMA, true);
ArraySetAsSeries(momentum, true);
// Инициализация начального эквити
initialEquity = AccountInfoDouble(ACCOUNT_EQUITY);
// Сброс счетчика сделок при перезагрузке
ResetDailyTradesCounter();
// Создание таймера для мониторинга скорости тиков
EventSetTimer(1);
return INIT_SUCCEEDED;
}
//+–+
//| Expert deinitialization function |
//+–+
void OnDeinit(const int reason)
{
if(handleFastMA != INVALID_HANDLE) IndicatorRelease(handleFastMA);
if(handleSlowMA != INVALID_HANDLE) IndicatorRelease(handleSlowMA);
if(handleMomentum != INVALID_HANDLE) IndicatorRelease(handleMomentum);
EventKillTimer();
}
//+–+
//| Expert tick function |
//+–+
void OnTick()
{
// Подсчет скорости тиков
tickCounter++;
datetime currentTickTime = TimeCurrent();
if(lastTickTime == 0) lastTickTime = currentTickTime;
// Проверяем ежедневный лимит сделок
CheckDailyTradesLimit();
// Проверяем защиту по эквити
if(UseEquityProtection && !CheckEquityProtection()) return;
// Проверяем фильтр новостей
if(UseNewsFilter && IsNewsTime()) return;
// Проверяем спред
if(!CheckSpread()) return;
// Проверяем скорость тиков
if(!CheckTickSpeed()) return;
// Проверяем наличие открытых позиций
if(PositionSelect(_Symbol)) return;
// Получаем данные индикаторов
if(!UpdateIndicators()) return;
// Получаем тиковые данные
MqlTick lastTick;
if(!SymbolInfoTick(_Symbol, lastTick)) return;
// Получаем данные объемов
long volumeArray[];
ArraySetAsSeries(volumeArray, true);
if(CopyTickVolume(_Symbol, PERIOD_M1, 0, 3, volumeArray) <= 0) return;
// Генерируем сигналы
bool buySignal = GenerateBuySignal(lastTick, volumeArray);
bool sellSignal = GenerateSellSignal(lastTick, volumeArray);
// Открываем позиции
if(buySignal)
{
OpenPosition(ORDER_TYPE_BUY);
}
else if(sellSignal)
{
OpenPosition(ORDER_TYPE_SELL);
}