simple-macd-ea.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «simple-macd-ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Простой MACD-EA — это торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник анализирует ценовые данные, вычисляя разницу между двумя экспоненциальными скользящими средними (EMA) на таймфрейме M1, и определяет направление тренда на основе знака полученного значения.
При смене направления тренда советник автоматически открывает ордера на покупку или продажу с заданным объёмом лотов. Для управления открытыми позициями реализован механизм трейлинг-стопа, который перемещает стоп-лосс при достижении определённой прибыли, а также условное закрытие ордеров при достижении лимита шагов или времени.
Советник использует магический номер для идентификации своих ордеров и проверяет наличие не менее 100 баров перед началом работы. Все торговые операции выполняются через стандартные API MetaTrader 4: OrderSend, OrderClose и OrderModify.
Настройки программы
| Настройка | Описание |
|---|---|
| number of lots to trade (usually, 1 lot is $100k) (unlimited) (Lots) | Лот — Объём сделки в лотах. Определяет размер каждой открываемой позиции. |
| the amount of the trailing stop needed to maximize profit (unlimited) (TrailingStop) | Трейлинг-стоп — Расстояние трейлинг-стопа в пунктах. Определяет минимальную прибыль в пунктах для активации перемещения стоп-лосса. |
| (1-12) [low works for GBPUSD], high works for others. (MACD_level) | Период MACD — Период EMA, используемый в качестве основного периода для расчёта MACD-показателя на таймфрейме M1. |
| MAGIC | Магический номер — Магический номер, присваиваемый ордерам для их идентификации среди других ордеров на счёте. |
| tp_limit | Лимит трейлинг-стопа — Лимит количества шагов трейлинг-стопа. После достижения лимита ордер закрывается по стоп-лоссу. |
| wait_time_b4_SL | Время ожидания перед закрытием — Время ожидания (в тиках) перед условным закрытием позиции, если она остаётся без движения в нужном направлении. |
Поиск по коду файла
extern double Lots=1; // number of lots to trade (usually, 1 lot is $100k) (unlimited)
extern double TrailingStop=55; // the amount of the trailing stop needed to maximize profit (unlimited)
extern int MACD_level=500; //(1-12) [low works for GBPUSD], high works for others.
extern int MAGIC=123456;
extern int tp_limit=100;
int limit=1000;
int gap=1;
extern int wait_time_b4_SL=10000;
int trend=0,last_trend=0, pending_time, ticket, total, pace, tp_cnt;
bool sell_flag, buy_flag, find_highest=false, find_lowest=false;
double MACD_Strength=0;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int best_deal()
{
double MACDSignal1,MACDSignal2;
MACDSignal2=iMA(NULL,PERIOD_M1,MACD_level,0,MODE_EMA,Close[0],0)-iMA(NULL,PERIOD_M1,MACD_level+1,0,MODE_EMA,Close[0],0);
MACDSignal1=iMA(NULL,PERIOD_M1,MACD_level,0,MODE_EMA,Close[gap],gap)-iMA(NULL,PERIOD_M1,MACD_level+1,0,MODE_EMA,Close[gap],gap);
if ((find_highest && Close[0]>OrderOpenPrice()+Point*5) && MACDSignal2<MACDSignal1)
{ find_highest=false; return (1); }
else if ((find_lowest && Close[0]<OrderOpenPrice()-Point*5) && MACDSignal2>MACDSignal1)
{ find_lowest=false; return (1); }
return (0);
}
int MACD_Direction ()
{
double MACDSignal1,MACDSignal2,ind_buffer1[100], Signal1, Signal2;
MACDSignal2=iMA(NULL,PERIOD_M1,100,0,MODE_EMA,Close[0],0)-iMA(NULL,PERIOD_M1,MACD_level,0,MODE_EMA,Close[0],0);
MACDSignal1=iMA(NULL,PERIOD_M1,100,0,MODE_EMA,Close[gap],gap)-iMA(NULL,PERIOD_M1,MACD_level,0,MODE_EMA,Close[gap],gap);
MACD_Strength=MACDSignal2-MACDSignal1; if (MACD_Strength<0) MACD_Strength=MACD_Strength*(-1);
if(MACDSignal1<0) return (-1);
if(MACDSignal1>0) return (1);
else return (0);
}
void ClosePending()
{
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
pending_time=0;
}
else
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
pending_time=0;
}
}
}
void do_order(int type)
{
if (type==1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"PM",MAGIC,0,White); // buy
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{ Print("BUY order opened : ",OrderOpenPrice()); } // buy order successful
pace=tp_limit; tp_cnt=0; pending_time=0; find_highest=true;
}
else Print("Error opening SELL order : ",GetLastError());
buy_flag=false;
}
else if (type==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"PM",MAGIC,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{ Print("SELL order opened : ",OrderOpenPrice()); }
pace=tp_limit; tp_cnt=0; pending_time=0; find_lowest=true;
}
else Print("Error opening SELL order : ",GetLastError());
sell_flag=false;
}
}
int trailing_stop(int type)
{
pace++;
if(TrailingStop>0 && type==1 && pace>tp_limit && tp_cnt<tp_limit) // check for trailing stop value
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
Показано первые 50% кода (символов: 4474)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.