Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 11)
//+–+
input double LotSize = 0.1; // Размер лота
input int TakeProfit_Pips = 10; // Тейк-профит в пипсах
input int StopLoss_Pips = 5; // Стоп-лосс в пипсах
input int MaxDailyTrades = 100; // Максимум сделок в день
input double MaxSpread_Pips = 0.5; // Максимальный спред в пипсах
input bool UseEquityProtection = true;// Защита по эквити
input double EquityProtectionPercent = 5;// Макс. просадка эквити в %
input int MagicNumber = 789012; // Магический номер
input bool UseNewsFilter = true; // Фильтр новостей
input int NewsBeforeMinutes = 30; // Не торговать за N минут до новостей
input int NewsAfterMinutes = 30; // Не торговать N минут после новостей
// Входные параметры индикаторов
input int FastMA_Period = 5; // Период быстрой MA
input int SlowMA_Period = 10; // Период медленной MA
input ENUM_MA_METHOD MA_Method = MODE_EMA;// Метод MA
input int Volume_Threshold = 100; // Порог объема
input int Momentum_Period = 3; // Период момента
input double MinTickSpeed = 0.5; // Мин. скорость тиков (тиков/сек)
//+–+
//| Глобальные переменные |
//+–+
int handleFastMA, handleSlowMA, handleMomentum;
double fastMA[], slowMA[], momentum[];
datetime lastTradeTime = 0;
int todayTrades = 0;
datetime lastTradeDate = 0;
double initialEquity = 0;
MqlDateTime currentTime;
int tickCounter = 0;
datetime lastTickTime = 0;
double tickSpeed = 0;
// Структура для хранения информации о новостях
struct NewsEvent
{
datetime time;
string currency;
string event;
int impact; // 0=low, 1=medium, 2=high, 3=very high
};
//+–+
//| Expert initialization function |
//+–+
int OnInit()
{
// Проверка входных параметров
if(LotSize <= 0 || LotSize > 100)
{
Print("Некорректный размер лота!");
return INIT_PARAMETERS_INCORRECT;
}
if(TakeProfit_Pips <= 0 || StopLoss_Pips <= 0)
{
Print("Некорректные уровни TP/SL!");
return INIT_PARAMETERS_INCORRECT;
}
// Инициализация индикаторов
handleFastMA = iMA(_Symbol, PERIOD_M1, FastMA_Period, 0, MA_Method, PRICE_CLOSE);
handleSlowMA = iMA(_Symbol, PERIOD_M1, SlowMA_Period, 0, MA_Method, PRICE_CLOSE);
handleMomentum = iMomentum(_Symbol, PERIOD_M1, Momentum_Period, PRICE_CLOSE);
if(handleFastMA == INVALID_HANDLE || handleSlowMA == INVALID_HANDLE ||
handleMomentum == INVALID_HANDLE)
{
Print("Ошибка создания индикаторов!");
return INIT_FAILED;