adx ea.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «adx ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный советник работает на платформе MetaTrader 4 и выполняет автоматическую торговлю на основе нескольких технических индикаторов. В качестве основных сигналов для входа в позицию используются ADX с линиями +DI/-DI, скользящие средние, индикатор Momentum, объёмы торгов и Bollinger Bands. Советник открывает позиции BUY или SELL при выполнении заданных условий и управляет ими с помощью стоп-лосса, тейк-профита, трейлинг-стопа и перевода в безубыток.
В советнике реализованы два основных режима генерации сигналов: стратегия прорыва (Breakout Strategies) и кросс-стратегия (Cross Strategy), каждая из которых может дополнительно фильтроваться по тренду через +DI/-DI. Параметры FastMA и SlowMA задают периоды скользящих средних, а Distance — дистанцию между ними. Дополнительно используются уровни входа и выхода, а также настройки управления рисками.
Управление позицией включает проверку условий закрытия на каждом тике, перевод позиции в безубыток при достижении заданной прибыли, а также перемещение стоп-лосса по трейлинг-стопу. Расчёт размера лота учитывает свободный маржинальный баланс и фактор уменьшения на основе истории убыточных сделок. Советник работает только с ордерами текущего символа и магическим номером.
Настройки программы
| Настройка | Описание |
|---|---|
| str1 | Заголовок стратегии прорыва — Заголовок раздела настроек стратегии прорыва. |
| Enable Breakout Strategies (Breakout_Strategies) | Стратегия прорыва — Включает или отключает стратегию прорыва для генерации сигналов на вход в позицию. При активации советник использует уровни Entry_Level и фильтрацию +DI/-DI для определения направления сделки. |
| Set the Breakout Level. (Entry_Level) | Уровень входа — Уровень входа для стратегии прорыва. Задаёт минимальное значение ADX или +DI, при котором возможно открытие позиции. |
| Use +DI/-DI Trend Filter (Trend_Filter) | Фильтр тренда — Включает или отключает фильтрацию тренда через сравнение линий +DI и -DI. При активации позиции открываются только в направлении доминирующего тренда. |
| Minimum.difference.+DI.-DI (Min_Price_Difference) | Минимальная разница ценовых линий — Минимальная разница между значениями +DI и -DI, необходимая для подтверждения направления тренда. |
| str2 | Разделитель настроек — Разделитель в настройках советника. |
| str3 | Заголовок кросс-стратегии — Заголовок раздела кросс-стратегии. |
| Enable Cross Strategies (Cross_Strategy) | Кросс-стратегия — Включает или отключает кросс-стратегию, которая анализирует пересечение линий ADX и направление основного тренда для генерации торговых сигналов. |
| Min_Level_Of_Main_Line | Минимальный уровень основной линии — Минимальный уровень ADX для основной линии, необходимый для подтверждения тренда в кросс-стратегии. |
| Main_Line_Sloping_Upwards | Направление основной линии вверх — Задаёт направление основной линии ADX для кросс-стратегии. При активации ожидается восходящий тренад основной линии. |
| Confirm_Cross_On_Breakout | Подтверждение кросса на прорыве — При активации кросс-стратегия требует подтверждения прорыва через сравнение текущих и предыдущих значений +DI и -DI перед открытием позиции. |
| str4 | Разделитель настроек — Разделитель в настройках советника. |
| str5 | Заголовок направления торговли — Заголовок раздела направления торговли. |
| Distance (Distance) | Дистанция между скользящими — Дистанция в пунктах между быстрой и медленной скользящими средними, используемая при формировании торговых сигналов. |
| FastMA (FastMA) | Быстрая скользящая средняя — Период быстрой скользящей средней (LWMA), используемой совместно с медленной скользящей для формирования сигналов. |
| SlowMA (SlowMA) | Медленная скользящая средняя — Период медленной скользящей средней (LWMA), используемой совместно с быстрой для формирования торговых сигналов. |
| str6 | Разделитель настроек — Разделитель в настройках советника. |
| Exit_Level | Уровень выхода — Уровень выхода, используемый при закрытии позиций. |
| Enable "no loss" (USEMOVETOBREAKEVEN) | Перевод в безубыток — Включает или отключает функцию перевода позиции в безубыток при достижении заданного уровня прибыли. |
| When to move break even (WHENTOMOVETOBE) | Расстояние до перевода в безубыток — Расстояние в пунктах от цены открытия, при достижении которого позиция переводится в безубыток. |
| How much pips to move sl (PIPSTOMOVESL) | Пункты перемещения стоп-лосса — Количество пунктов для перемещения стоп-лосса при переводе позиции в безубыток. |
| Lots size (Lots) | Размер лота — Размер лота для открытия позиции, задаётся в единицах торгового инструмента. |
| MaximumRisk | Максимальный риск — Максимальный риск в процентах от свободного маржинального баланса, используемый для расчёта размера лота. |
| DecreaseFactor | Фактор уменьшения — Фактор уменьшения лота на основе количества убыточных сделок в истории. При наличии убыточных ордеров размер лота рассчитывается с учётом этого параметра. |
| TrailingStop (TrailingStop) | Трейлинг-стоп — Расстояние в пунктах для трейлинг-стопа — автоматического перемещения стоп-лосса вслед за ценой при достижении определённой прибыли. |
| Stop Loss (Stop_Loss) | Стоп-лосс — Уровень стоп-лосса в пунктах, устанавливаемый при открытии позиции. |
| MagicNumber (MagicNumber) | Магический номер — Магический номер, идентифицирующий ордера, открытые данным советником, для корректной работы с позициями и модификаций. |
| TakeProfit (TakeProfit) | Тейк-профит — Уровень тейк-профита в пунктах, устанавливаемый при открытии позиции. |
Поиск по коду файла
#property version "1.00"
#property strict
extern string str1="Breakout Strategies";
extern bool Breakout_Strategies=true; //Enable Breakout Strategies
extern double Entry_Level=10; //Set the Breakout Level.
extern bool Trend_Filter=true; //Use +DI/-DI Trend Filter
extern double Min_Price_Difference=10; //Minimum.difference.+DI.-DI
extern string str2="*****************";
extern string str3=" Cross Strategy";
extern bool Cross_Strategy=true; //Enable Cross Strategies
extern double Min_Level_Of_Main_Line=10;
extern bool Main_Line_Sloping_Upwards=true;
extern bool Confirm_Cross_On_Breakout=true;
extern string str4="*****************";
extern string str5="Trade Direction";
extern double Distance=5; //Distance
extern int FastMA=6; //FastMA
extern int SlowMA=85; //SlowMA
extern string str6="*****************";
extern double Exit_Level=10;
extern bool USEMOVETOBREAKEVEN=true;//Enable "no loss"
extern double WHENTOMOVETOBE=10; //When to move break even
extern double PIPSTOMOVESL=5; //How much pips to move sl
extern double Lots=0.01; //Lots size
input double MaximumRisk =0.02;
input double DecreaseFactor=3;
extern double TrailingStop=40; //TrailingStop
extern double Stop_Loss=20; //Stop Loss
extern int MagicNumber=1234; //MagicNumber
input double TakeProfit=50; //TakeProfit
int err;
bool FractalsUp=false;
bool FractalsDown=false;
double FractalsUpPrice=0;
double FractalsDownPrice=0;
int FractalsLimit=200;
int total=0;
double
Lot,Dmax,Dmin,// Amount of lots in a selected order
Lts, // Amount of lots in an opened order
Min_Lot, // Minimal amount of lots
Step, // Step of lot size change
Free, // Current free margin
One_Lot, // Price of one lot
Price, // Price of a selected order,
pips,
MA_1,MA_2,MA_3,MACD_SIGNAL;
int Type,freeze_level,Spread;
double priceopen,stoploss,takeprofit;
int orderticket;
int
Period_MA_2, Period_MA_3, // Calculation periods of MA for other timefr.
Period_MA_02, Period_MA_03, // Calculation periods of supp. MAs
K2,K3,T;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick(void)
{
// код доступен только после оплаты
}
void stop()
{
int cnt;
double middleBB=iBands(Symbol(),0,20, 2,0,0,MODE_MAIN,1);//middle
double lowerBB=iBands(Symbol(),0,20, 2,0,0,MODE_LOWER,1);//lower
double upperBB=iBands(Symbol(),0,20, 2,0,0,MODE_UPPER,1);//upper
double MacdMAIN=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double MacdSIGNAL=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY)
{
if(((Bid<OrderOpenPrice()-iATR(NULL,0,14,0))
|| ((MacdMAIN>0 && MacdMAIN<MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)>MathAbs(MacdSIGNAL))))
|| Close[1]==upperBB))
exitbuys();
}
else // go to short position
{
if(((Ask>OrderOpenPrice()+iATR(NULL,0,14,0))
|| ((MacdMAIN>0 && MacdMAIN>MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)<MathAbs(MacdSIGNAL)))))
|| Close[1]==lowerBB)
exitsells();
}
}
}
}
void Trail1()
{
total=OrdersTotal();
for(int cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>pips*TrailingStop)
{
if(OrderStopLoss()<Bid-pips*TrailingStop)
{
RefreshRates();
stoploss=Bid-(pips*TrailingStop);
takeprofit=OrderTakeProfit()+pips*TrailingStop;
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips) stoploss=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)
if(CheckStopLoss_Takeprofit(OP_BUY,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(pips*TrailingStop))
{
if((OrderStopLoss()>(Ask+pips*TrailingStop)) || (OrderStopLoss()==0))
{
RefreshRates();
stoploss=Ask+(pips*TrailingStop);
takeprofit=OrderTakeProfit()-pips*TrailingStop;
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips) stoploss=StopLevel*pips;
if(takeprofit<StopLevel*pips) takeprofit=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)
if(CheckStopLoss_Takeprofit(OP_SELL,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
}
void MOVETOBREAKEVEN()
{
for(int b=OrdersTotal()-1;b>=0;b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(Bid-OrderOpenPrice()>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()>OrderStopLoss())
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print("eror");
}
for(int s=OrdersTotal()-1;s>=0;s--)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_SELL)
if(OrderOpenPrice()-Ask>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()<OrderStopLoss())
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print("eror");
}
}
double LotsOptimized()
{
double lot=Lots;
int orders=OrdersHistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
if(MaximumRisk>0)
{
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
}
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error in history!");
break;
}
if(OrderSymbol()!=Symbol() /*|| OrderType()>OP_SELL*/)
continue;
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
Показано первые 50% кода (символов: 17232)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.