реклама
Бургер менюБургер меню

Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 12)

18

}

// Установка массивов как таймсерии

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);

}