ilan_rsi_macd.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan_rsi_macd.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Программный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник анализирует ценовые данные с использованием технических индикаторов MACD и RSI, а также ценовых данных (Close), и на основе их пересечений и уровней принимает решения о открытии сделок.
Основная логика работы основана на анализе гистограммы и сигнальной линии MACD, а также уровня RSI. При совпадении условий по индикаторам советник открывает ордера на покупку или продажу. Размер лота рассчитывается по формуле с экспонентой, что позволяет наращивать позицию при увеличении количества открытых сделок.
Советник поддерживает управление позициями: фиксированный тейк-профит и стоп-лосс в пунктах, опциональный трейлинг-стоп, эквити-стоп и таймаут для закрытия всех позиций. Все ордера маркируются магическим числом для идентификации.
Настройки программы
| Настройка | Описание |
|---|---|
| UrovenNedokup | Уровень недокупки RSI — Уровень RSI, выше которого индикатор RSI должен находиться для открытия продажи (сигнал перекупленности). Значение по умолчанию — 30. |
| UrovenPerekupl | Уровень перепокупки RSI — Уровень RSI, ниже которого индикатор RSI должен находиться для открытия покупки (сигнал перепроданности). Значение по умолчанию — 70. |
| ????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.4 (LotExponent) | Экспонента лота — Экспонента для расчёта размера лота при открытии дополнительных сделок. Определяет коэффициент нарастания лота: например, при значении 3.37 лот увеличивается в 3.37 раза с каждой новой сделкой. Допустимые значения: 0.1, 0.15, 0.26, 0.4 и т.д. |
| ?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16 (Lots) | Базовый лот — Базовый размер лота для торговых операций. Значение задаётся в долях лота, например 0.01, 0.1 или 0.16. |
| 2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0 (lotdecimal) | Десятичность лота — Точность отображения размера лота: 2 — лот в долях 0.01, 1 — лот в долях 0.1, 0 — лот целыми единицами (1.0). |
| ???? ?????? (TakeProfit) | Тейк-профит — Тейк-профит для ордеров, выраженный в пунктах. Определяет целевой уровень прибыли для фиксации результата. |
| ??? ?????? (PipStep) | Шаг пипсов — Шаг в пунктах для открытия дополнительных ордеров при наличии существующих позиций. Определяет расстояние между уровнями усреднения. |
| ????? (MagicNumber) | Магическое число — Магическое число, используемое для идентификации ордеров, открытых данным советником. Позволяет отличать его сделки от ордеров других программ и ручных сделок. |
| ??????????????? (slip) | Проскальзывание — Допустимое проскальзывание цены при открытии и закрытии ордеров, выраженное в пунктах. |
Поиск по коду файла
double Stoploss = 5000.0; // ??? ??? ????????? ?? ????????
double TrailStart = 100.0;
double TrailStop = 100.0;
extern int UrovenNedokup = 30;
extern int UrovenPerekupl = 70;
extern double LotExponent = 3.37; // ????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.43 ...
extern double Lots = 0.1; // ?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16
extern int lotdecimal = 1; // 2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0
extern double TakeProfit = 10.0; // ???? ??????
extern double PipStep = 30.0; // ??? ??????
extern int MagicNumber = 54321; // ?????
extern double slip = 30.0; // ???????????????
int MaxTrades = 10; // ??????????? ?????????? ???????????? ???????? ???????
bool UseEquityStop = FALSE;// ???????????? ??????????? ?? ??????
double TotalEquityRisk = 20.0; // ??????? ????????? ?? ?????????????? ???? ????? ????????
bool UseTrailingStop = FALSE; // ???????????? ????
bool UseTimeOut = FALSE; // ???????? ???? ?????? ?? ????? ?????? ???
double MaxTradeOpenHours = 48.0; // 48 ?????
double PriceTarget, StartEquity, BuyTarget, SellTarget ;
double AveragePrice, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName = "Ilan_RSI"; // ? ?????? ?????? ????? ?????? ??????
int timeprev = 0, expiration;
int NumOfTrades = 0;
double iLots; // ?????????? ??? ??????? ????
int cnt = 0, total;
double Stopper = 0.0;
bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlaced = FALSE;
double AccountEquityHighAmt, PrevEquity;
int init() {
// код доступен только после оплаты
}
int deinit() {
return (0);
}
int start() {
// код доступен только после оплаты
}
double MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
double MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
double SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
double PrevCl;
double CurrCl;
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice); // ????? ??????? ???????? ???? ?? ??????? ?? ??????? ???????? ???
if (UseTimeOut) { //???? ???????? ????????? ?? ???????
if (TimeCurrent() >= expiration) { // ??????? ????? ?????? ??????????
CloseThisSymbolAll(); // ????????? ?????? ??? ?? ??????? ????
Print("Closed All due to TimeOut"); // ??????????? ??? ???????? ?? ????????.
}
}
if (timeprev == Time[0]) return (0); // ???? ??? ?? ?????? ?????? ???? ?? ????????.
timeprev = Time[0]; // ????????? ?????? ????? ??? ??????
double CurrentPairProfit = CalculateProfit(); // ??????? ?????? ?? ???? ????? ??????? ????????????????
if (UseEquityStop) { // ???????????? ???? ?? ??????
if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll(); // ??????????? ????
Print("Closed All due to Stop Out"); // ????????????? ??? ??????????? ?? ??????
NewOrdersPlaced = FALSE; // ??? ????????????? ???????
}
}
total = CountTrades(); // ?????????? ??????? ????? ? ??? ???????
if (total == 0) flag = FALSE; // ???? ??????? ??? ?????? ????.
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { // ?????????? ??? ??????
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); // ???????? ?????
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; // ?? ???? ???? ??? ?? ??? ????? ????????? ? ????????
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { //???? ???? ??? ??????
if (OrderType() == OP_BUY) { // ??? ????? ???
if(OrderTakeProfit()==0)NewOrdersPlaced = true;
LongTrade = TRUE; // ????? ???
ShortTrade = FALSE; //????? ???
break; //
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { //???? ???? ??? ?????
if (OrderType() == OP_SELL) { //??? ????? ????
if(OrderTakeProfit()==0)NewOrdersPlaced = true;
LongTrade = FALSE; // ??? ????
ShortTrade = TRUE; // ???? ????
break;
}
}
}
if (total > 0 && total <= MaxTrades) { // ???? ?????? ?? ?? ?????? ??? ????? ????????????? ??????? ???????
RefreshRates(); // ???????? ??????
LastBuyPrice = FindLastBuyPrice(); //????????? ???????? ???? = ??????? ???????????????????????????
LastSellPrice = FindLastSellPrice();// ?????????????????????? = ????. ???????????????????????????
if (LongTrade && LastBuyPrice - Ask >= PipStep * Point) TradeNow = TRUE;
if (ShortTrade && Bid - LastSellPrice >= PipStep * Point) TradeNow = TRUE;
}
if (total < 1) { // ???? ??? ??????? ??????? ??
ShortTrade = FALSE; //??? ???????? ?? ????
LongTrade = FALSE; // ??? ???????? ?? ???
TradeNow = TRUE; // ????? ?????????
StartEquity = AccountEquity();
}
if (TradeNow) { // ?????????? ?????????
LastBuyPrice = FindLastBuyPrice(); //????????? ???????? ????
LastSellPrice = FindLastSellPrice(); // ????????? ????????? ????
if (ShortTrade) { // ???? ??????? ???????
NumOfTrades = total; // ?????????????????? = ??????
iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
RefreshRates();
ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
if (ticket < 0) { // ????? ??????????? ??
Print("Error: ", GetLastError()); // ?????? ? ????????????? ?????????
return (0);
}
LastSellPrice = FindLastSellPrice(); // ??????????????????????= ??????? (????? ????????? ????????? ????)
TradeNow = FALSE; // ????????? ?????????
NewOrdersPlaced = TRUE; // ????? ????? ?????? = ??????
} else {
if (LongTrade) { // ????????? ???
NumOfTrades = total; // ?????????? ??????? = ??????
iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
if (ticket < 0) { // ????? ?? ?????????
Print("Error: ", GetLastError()); // ??????
return (0); // ??????? ?? ?????
}
LastBuyPrice = FindLastBuyPrice();// ????????? ???????? ???? = ??????? (????? ????????? ?????? ????)
TradeNow = FALSE; // ?????? ????????
NewOrdersPlaced = TRUE; // ????? ????? ??????????
}
}
}
if (TradeNow && total < 1) { // ????? ????????? ? ??????? ???
PrevCl = iClose(Symbol(), 0, 2); // ????? ???? ???? ????????? ???????? ????
CurrCl = iClose(Symbol(), 0, 1); // ????? ???? ????????? ???????? ????
SellLimit = Bid; // ????????? = ??????? ????????? ????
BuyLimit = Ask; //???????? = ??????? ???????? ????
if (!ShortTrade && !LongTrade) { // ???? ??? ??????? ???? ? ????? ???????? ????? ?????. (????????????)
NumOfTrades = total; // ?????????? ???????? = ??????
iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
if (MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious&& /*MaCurrent<MaPrevious&&*/iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > UrovenNedokup) { //?????? >
ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
if (ticket < 0) { // ?? ?????????
Print("Error: ", GetLastError()); // ????????????
return (0); //????????????? ????????
}
LastBuyPrice = FindLastBuyPrice(); //????????? ???? ???=???????(???? ????????? ?????? ????)
NewOrdersPlaced = TRUE; // ????? ????? ??????????
}
if (MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && /*MaCurrent>MaPrevious&& */iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < UrovenPerekupl) { // ?????? <
ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
if (ticket < 0) { // ?? ?????????
Print("Error: ", GetLastError()); // ????????????
return (0); // ????????????? ????????
}
LastSellPrice = FindLastSellPrice(); // ????????? ??????? ???? = ??????? (????? ????????? ??????? ????)
NewOrdersPlaced = TRUE; // ????? ????? ??????????
}
if (ticket > 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours); //???? ????? ??????????
TradeNow = FALSE; // ????????? ?????????
}
}
total = CountTrades(); // ????? = ??????? (??????? ????? ??????? )
AveragePrice = 0; // ????????? ???? =0?
double Count = 0; // ???? ???????? ? ?????????? ? ????
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { // ?????????? ??? ??????
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //??????? ??? ? ??? ?? ?????
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
AveragePrice += OrderOpenPrice() * OrderLots();
Count += OrderLots();
}
}
}
if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) { // ???? ??????? ????? ?????
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { // ?????????? ??? ??????
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); // ??????? ?? ?????
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; // ????? ?? ??? ????????? ?? ???????
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { // ????? ???
if (OrderType() == OP_BUY) { // ????? ???
PriceTarget = AveragePrice + TakeProfit * Point; // ????????? ???? ??????? ????? ???? ??????
BuyTarget = PriceTarget; // ????????? ??? ?? ??? ??????
Stopper = AveragePrice - Stoploss * Point; // ?????????? ???? ????
flag = TRUE; //?????? ??????
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { // ?????????? ??? ???? ??????? ???? ???????
if (OrderType() == OP_SELL) { // ???? ???? ? ???? ??????.
PriceTarget = AveragePrice - TakeProfit * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;
}
}
Показано первые 50% кода (символов: 16661)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.