MACD Not So Sample
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «macd_not_so_sample.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MACD Not So Sample — это торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник предназначен для автоматической торговли и работает исключительно с инструментом EURUSD на таймфрейме H4.
Советник использует индикатор MACD и скользящую среднюю EMA для анализа рыночной ситуации и принятия решений об открытии и закрытии позиций. Перед входом в сделку проверяется наличие достаточного свободного маржа на счёте.
Поддерживаются фиксированный и процентный режимы управления размером позиции. Реализованы механизмы фиксации прибыли через TakeProfit и защитное управление позициями через TrailingStop. Советник автоматически закрывает позиции при развороте сигнала MACD и корректирует стоп-лосс при движении цены в нужном направлении.
Настройки программы
| Настройка | Описание |
|---|---|
| 12; (fast) | fast — Период быстрой линии MACD |
| 26; (slow) | slow — Период медленной линии MACD |
| 9; (sign) | sign — Период сигнальной линии MACD |
| 30; (TrailingStop) | TrailingStop — Расстояние для трейлинг-стопа в пунктах |
| 26; (MATrendPeriod) | MATrendPeriod — Период скользящей средней EMA для определения тренда |
| 3; (MACDOpenLevel) | MACDOpenLevel — Уровень MACD для открытия позиции |
| 2; (MACDCloseLevel) | MACDCloseLevel — Уровень MACD для закрытия позиции |
| TakeProfit | TakeProfit — Величина тейк-профита в пунктах |
| UseMM | UseMM — Включение управления размером позиции пропорционально марже |
| PercentMM | PercentMM — Процент свободной маржи для расчёта размера позиции |
| Lots | Lots — Фиксированный размер лота для сделки |
Поиск по коду файла
#define MagicNum 10701
extern int fast = 47;//12;
extern int slow = 166;//26;
extern int sign = 11;//9;
extern double TrailingStop = 19;//30;
extern double MATrendPeriod = 8;//26;
extern double MACDOpenLevel = 1;//3;
extern double MACDCloseLevel = 3;//2;
extern double TakeProfit = 550;
extern bool UseMM = false;
extern int PercentMM = 10;
extern double Lots = 0.1;
double GetLots()
{
if (UseMM)
{
double a;
a = NormalizeDouble((PercentMM * AccountFreeMargin() / 100000), 1);
if(a > 49.9) return(49.9);
else if(a < 0.1)
{
Print("Lots < 0.1");
return(0);
}
else return(a);
}
else return(Lots);
}
int CalculateCurrentOrders()
{
int orderT = OrdersTotal(), buys = 0, sells = 0;
for(int i = 0; i < orderT; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
if(OrderType() == OP_BUY) buys++;
if(OrderType() == OP_SELL) sells++;
}
}
if(buys > 0) return(buys);
else if(sells > 0) return(-sells);
else return(0);
}
int start()
{
// код доступен только после оплаты
}
if (Symbol() != "EURUSD")
{
Comment("Not a right Symbol: ", Symbol(), " <> EURUSD");
return(0);
}
if (Period() != 240)
{
Comment("Not a right Period!!! It should be H4");
return(0);
}
double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious, MaCurrent, MaPrevious;
int cnt, ticket, total;
if(Bars < 100)
{
Print("Bars less than 100");
return(0);
}
if(TakeProfit < 10)
{
Print("TakeProfit less than 10");
return(0);
}
MacdCurrent = iMACD(NULL, 0, fast, slow, sign, PRICE_CLOSE, MODE_MAIN, 0);
MacdPrevious = iMACD(NULL, 0, fast, slow, sign, PRICE_CLOSE, MODE_MAIN, 1);
SignalCurrent = iMACD(NULL, 0, fast, slow, sign, PRICE_CLOSE, MODE_SIGNAL, 0);
SignalPrevious = iMACD(NULL,0,fast, slow, sign, PRICE_CLOSE, MODE_SIGNAL, 1);
MaCurrent = iMA(NULL, 0, MATrendPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
MaPrevious = iMA(NULL, 0, MATrendPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);
if(CalculateCurrentOrders() == 0)
{
if(AccountFreeMargin() < (1000 * GetLots()))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if(MacdCurrent < 0 && MacdCurrent > SignalCurrent && MacdPrevious < SignalPrevious && MathAbs(MacdCurrent) > (MACDOpenLevel*Point) && MaCurrent > MaPrevious)
{
ticket=OrderSend(Symbol(), OP_BUY, GetLots(), Ask, 3, 0Показано первые 50% кода (символов: 3598)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.