Moving Average
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «moving averagecross_ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 4, основанного на стратегии пересечения цены со скользящей средней. Советник анализирует значения Open[1] и Close[1] предыдущего бара относительно настраиваемой скользящей средней и при пересечении генерирует сигналы на покупку или продажу.
Советник включает систему управления рисками, рассчитывающую размер лота на основе свободных средств счёта и параметров риска с возможностью уменьшения лота при серии убытков. Также реализованы два режима трейлинг-стопа: отложенный (ожидает смещения цены) и немедленный (перемещает стоп-лосс без задержки).
Для информирования трейдера реализованы звуковые, email и всплывающие уведомления при открытии и закрытии позиций. Доступен режим «только уведомления», при котором советник не открывает реальных позиций, а лишь сигнализирует о событиях. Поддерживаются настраиваемые уровни тейк-профита, стоп-лосса и проскальзывания.
Советник работает на языке MQL4 и обрабатывает событие OnTick, проверяя условия открытия и закрытия ордеров при каждом новом тике. Торговые операции выполняются через стандартные API MetaTrader 4 (OrderSend, OrderModify, OrderClose).
Настройки программы
| Настройка | Описание |
|---|---|
| MagicNumber | Номер магии — Номер магии для идентификации ордеров, открытых советником, среди всех ордеров на счёте. |
| AlertOnly | Только уведомления — Переключатель режима только уведомлений. При включении советник генерирует алерты, но не открывает реальных торговых позиций. |
| 0 = disabled (SoundAlert) | Звуковые уведомления — Переключатель включения звуковых уведомлений при сигналах. 0 — отключено. |
| EmailAlert | Email-уведомления — Переключатель включения email-уведомлений о сигналах на покупку и продажу. |
| UserComment | Комментарий к ордерам — Текстовый комментарий, добавляемый к ордерам советника. |
| mm | Управление рисками — Группа настроек управления рисками и размером лота. |
| Lots | Размер лота — Начальный фиксированный размер лота, используемый при расчёте оптимального размера позиции. |
| MaximumRisk | Максимальный риск — Максимальный процент риска от свободных средств счёта, используемый при расчёте размера лота. |
| DecreaseFactor | Коэффициент уменьшения лота — Коэффициент уменьшения лота при наличии серии убыточных ордеров в истории. Используется для риск-менеджмента. |
| m0 | Настройки скользящей средней — Группа настроек скользящей средней. |
| MA_Period | Период скользящей средней — Период (количество баров) расчёта скользящей средней. |
| m1 | Режимы скользящей средней — Группа режимов скользящей средней. |
| m2 | Описание режимов скользящей средней — Описание режимов: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA. |
| MA_Mode | Режим скользящей средней — Режим скользящей средней: 0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA. |
| ap0 | Применяемая цена — Группа настроек применяемой цены для скользящей средней. |
| ap1 | Варианты применяемой цены — Описание вариантов применяемой цены: 0=Close, 1=Open, 2=High, 3=Low, 4=Median, 5=Typical, 6=Weighted. |
| ap2 | Дополнительные варианты цены — Дополнительные варианты применяемой цены для расчёта скользящей средней. |
| MA_Price | Применяемая цена для скользящей средней — Тип цены для расчёта скользящей средней: 0 — Close, 1 — Open, 2 — High, 3 — Low и другие варианты. |
| MA_Shift | Сдвиг скользящей средней — Сдвиг скользящей средней в барах. |
| TakeProfit | Тейк-профит — Тейк-профит в пунктах. |
| 0= no stoploss (StopLoss) | Стоп-лосс — Стоп-лосс в пунктах. Значение 0 означает отсутствие стоп-лосса. |
| Slippage | Проскальзывание — Допустимое проскальзывание цены при исполнении ордеров, в пунктах. |
| ts0 | Настройки трейлинг-стопа — Группа настроек трейлинг-стопа. |
| ts1 | Метод трейлинг-стопа: нет — Описание метода трейлинг-стопа: 1. Нет. |
| ts2 | Метод трейлинг-стопа: стандартный — Описание метода трейлинг-стопа: 2. Стандартный по входу. |
| ts3 | Метод трейлинг-стопа: немедленный — Описание метода трейлинг-стопа: 3. Немедленный. |
| TrailingStopMethod | Метод трейлинг-стопа — Метод трейлинг-стопа: 1 — нет, 2 — отложенный (ожидает смещения цены), 3 — немедленный. |
| ts12 | Настройки отложенного трейлинг-стопа — Настройки для метода трейлинг-стопа 2 (отложенный). |
| TrailingStop | Расстояние трейлинг-стопа — Расстояние трейлинг-стопа в пунктах, используемое в режимах 2 и 3. |
Поиск по коду файла
#include <stdlib.mqh>
#include <stderror.mqh>
extern int MagicNumber = 20050610;
extern bool AlertOnly = false;
extern bool SoundAlert = true; // 0 = disabled
extern bool EmailAlert = true;
extern string UserComment = "MA_EA";
extern string mm = "MoneyManagement settings";
extern double Lots = 0.1;
extern double MaximumRisk = 0.02;
extern double DecreaseFactor = 3;
extern string m0 = "Moving Average Settings";
extern double MA_Period = 12;
extern string m1 = " Modes";
extern string m2 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int MA_Mode = 1;
extern string ap0 = "Applied Price";
extern string ap1 = "0=close, 1=open, 2=high, 3=low, 4=median((h+l/2))";
extern string ap2 = ", 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)";
extern int MA_Price = 0;
extern double MA_Shift = 0;
extern int TakeProfit = 130;
extern int StopLoss=60;// 0= no stoploss
extern int Slippage = 3;
extern string ts0 = "---TrailingStopLoss---";
extern string ts1 = " 1. None";
extern string ts2 = " 2. Standard at input";
extern string ts3 = " 3. Trail immediately";
extern int TrailingStopMethod = 2;
extern string ts12 = "Settings for Type 2";
extern double TrailingStop = 20;
double myPoint;
int init()
{
// код доступен только после оплаты
}
void DoAlerts(int cmd)
{
if (cmd == OP_BUY)
{
if (SoundAlert) Alert(Symbol()," Price Cross MA Up @ Hour ",Hour()," Minute ",Minute());
if (EmailAlert) SendMail("BUY Alert for " + Symbol(), " Price Cross MA Up @ Hour " + Hour() + " Minute " + Minute());
}
if (cmd == OP_SELL)
{
if (SoundAlert) Alert(Symbol()," Price Cross MA Down @ Hour ",Hour()," Minute ",Minute());
if (EmailAlert) SendMail("SELL Alert for " + Symbol(), " Price Cross MA Down @ Hour " + Hour() + " Minute " + Minute());
}
}
void CheckForOpen()
{
double ma;
if(Volume[0]>1) return;
ma=iMA(NULL,0,MA_Period,MA_Shift,MA_Mode,MA_Price,0);
if(Open[1]>ma && Close[1]<ma)
{
DoAlerts(OP_SELL);
if (!AlertOnly) OpenTrade(OP_SELL);
return;
}
if(Open[1]<ma && Close[1]>ma)
{
DoAlerts(OP_BUY);
if (!AlertOnly) OpenTrade(OP_BUY);
return;
}
}
void CheckForClose()
{
double ma;
if(Volume[0]>1) return;
ma=iMA(NULL,0,MA_Period,MA_Shift,MA_Mode,MA_Price,0);
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderMagicNumber()!=MagicNumber) continue;
if(OrderType()==OP_BUY)
{
if(Open[1]>ma && Close[1]<ma)
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
else
HandleTrailingStop(OP_BUY, OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit());
}
if(OrderType()==OP_SELL)
{
if(Open[1]<ma && Close[1]>ma)
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
else
HandleTrailingStop(OP_SELL, OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit());
}
}
}
void start()
{
// код доступен только после оплаты
}
void OpenTrade(int signal)
{
int res, err, ticket;
double mLots;
double TPprice,STprice;
RefreshRates();
mLots = LotsOptimized();
if (signal==OP_BUY)
{
res=OrderSend(Symbol(),OP_BUY,mLots,Ask,Slippage,0,0,UserComment,MagicNumber,0,Green);
if (res > 0)
{
ticket = res;
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopLong(OrderOpenPrice(), StopLoss);
STprice = ValidStopLoss(OP_BUY,Bid, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else if (signal==OP_SELL)
{
res=OrderSend(Symbol(),OP_SELL,mLots,Bid,Slippage,0,0,UserComment,MagicNumber,0,Red);
if (res > 0)
{
ticket = res;
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeShort(OrderOpenPrice(),TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopShort(OrderOpenPrice() ,StopLoss);
STprice = ValidStopLoss(OP_SELL,Ask, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
Показано первые 50% кода (символов: 7432)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.