ilan 2.0@lifeindreamsworld.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan 2.0@lifeindreamsworld.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник предназначен для автоматической торговли на одном инструменте с использованием настраиваемых параметров размера позиции, стоп-лосса, тейк-профита и магического номера.
Программа анализирует ценовые данные и технические индикаторы для принятия решений об открытии и закрытии позиций. Поддерживается работа с отложенными ордерами (лимитные и стоп-ордера) различных типов, а также рыночными ордерами. Для идентификации собственных позиций используется магический номер.
В советнике реализованы функции управления рисками: стоп по балансу, скользящий стоп и ограничение по времени нахождения сделки на рынке. Доступна динамическая настройка шага между ордерами на основе анализа максимальных и минимальных цен за заданный период.
Настройки программы
| Настройка | Описание |
|---|---|
| ?? ??????? ???????? ??? ??? ??????????? ?????????? ??????. ??????: ?????? ??? 0.1, ?????: 0.16, 0.26 (LotExponent) | LotExponent — Числовой коэффициент, определяющий степень увеличения размера лота при каждой новой сделке |
| DynamicPips | DynamicPips — Переключатель, определяющий использование динамического расчёта шага между ордерами вместо фиксированного значения |
| DefaultPips | DefaultPips — Значение по умолчанию для шага между ордерами в пипсах |
| Glubina | Glubina — Глубина анализа ценовых данных — количество баров для определения максимума и минимума |
| DEL | DEL — Делитель, используемый при расчёте расстояния между ордерами |
| ?? ??????? ????? ?????????? ???? ? ?????? ???? ?? ???????? ??????? (? ????????? ?????? ??????? ????? (slip) | slip — Допустимое проскальзывание при открытии ордеров в пунктах |
| ????? ???? ??? ?????? ?????? (Lots) | Lots — Начальный размер лота для торговли |
| ??????? ?????? ????? ??????? ? ???? ???????????? 0 - ?????????? ???? (1), 1 - ???????? (0.1), 2 - ?? (lotdecimal) | lotdecimal — Точность округления размера лота: 0 — целые лоты, 1 — лоты с одним знаком после запятой, 2 — лоты с двумя знаками |
| ?? ?????????? ???????? ??????? ??????? ????????? ?????? (TakeProfit) | TakeProfit — Расстояние до тейк-профита в пунктах |
| Drop | Drop — Пороговое значение для технического индикатора CCI, при достижении которого происходит закрытие позиций |
| ?????? ??????? RSI (RsiMinimum) | RsiMinimum — Минимальное значение технического индикатора RSI, используемое при принятии торговых решений |
| ??????? ??????? RSI (RsiMaximum) | RsiMaximum — Максимальное значение технического индикатора RSI, используемое при принятии торговых решений |
| ????????? ????? (???????? ????????? ???????? ???? ?????? ?? ?????) (MagicNumber) | MagicNumber — Магический номер для идентификации ордеров, созданных данным советником |
| ??????????? ?????????? ???????????? ???????? ??????? (MaxTrades) | MaxTrades — Максимальное количество одновременно открытых сделок |
| UseEquityStop | UseEquityStop — Переключатель, определяющий включение или отключение стопа по балансу |
| TotalEquityRisk | TotalEquityRisk — Процент риска баланса, при превышении которого происходит принудительное закрытие позиций |
| UseTrailingStop | UseTrailingStop — Переключатель, определяющий включение или отключение скользящего стопа |
| ???????????? ??????? (????????? ?????? ???? ??? "?????" ??????? ?????) (UseTimeOut) | UseTimeOut — Переключатель, определяющий включение или отключение таймаута нахождения позиций |
| ????? ???????? ?????? ? ????? (????? ??????? ????????? ???????? ??????) (MaxTradeOpenHours) | MaxTradeOpenHours — Максимальное время нахождения сделки на рынке в часах до принудительного закрытия |
Поиск по коду файла
double Stoploss = 500.0; // ??????? ?????????
double TrailStart = 10.0;
double TrailStop = 10.0;
extern double LotExponent = 1.4; // ?? ??????? ???????? ??? ??? ??????????? ?????????? ??????. ??????: ?????? ??? 0.1, ?????: 0.16, 0.26, 0.43 ...
extern bool DynamicPips = true;
extern int DefaultPips = 12;
extern int Glubina = 24;
extern int DEL = 3;
extern double slip = 3.0; // ?? ??????? ????? ?????????? ???? ? ?????? ???? ?? ???????? ??????? (? ????????? ?????? ??????? ???????? ????)
extern double Lots = 0.1; // ????? ???? ??? ?????? ??????
extern int lotdecimal = 1; // ??????? ?????? ????? ??????? ? ???? ???????????? 0 - ?????????? ???? (1), 1 - ???????? (0.1), 2 - ????? (0.01)
extern double TakeProfit = 10.0; // ?? ?????????? ???????? ??????? ??????? ????????? ??????
extern double Drop = 500;
extern double RsiMinimum = 30.0; // ?????? ??????? RSI
extern double RsiMaximum = 70.0; // ??????? ??????? RSI
extern int MagicNumber = 2222; // ????????? ????? (???????? ????????? ???????? ???? ?????? ?? ?????)
int PipStep=0;
extern int MaxTrades = 10; // ??????????? ?????????? ???????????? ???????? ???????
extern bool UseEquityStop = FALSE;
extern double TotalEquityRisk = 20.0;
extern bool UseTrailingStop = FALSE;
extern bool UseTimeOut = FALSE; // ???????????? ??????? (????????? ?????? ???? ??? "?????" ??????? ?????)
extern double MaxTradeOpenHours = 48.0; // ????? ???????? ?????? ? ????? (????? ??????? ????????? ???????? ??????)
double PriceTarget, StartEquity, BuyTarget, SellTarget;
double AveragePrice, SellLimit, BuyLimit;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName="Ilan1.6";
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()
{
// код доступен только после оплаты
}
if (DynamicPips) {
double hival=High[iHighest(NULL,0,MODE_HIGH,Glubina,1)]; // calculate highest and lowest price from last bar to 24 bars ago
double loval=Low[iLowest(NULL,0,MODE_LOW,Glubina,1)]; // chart used for symbol and time period
PipStep=NormalizeDouble((hival-loval)/DEL/Point,0); // calculate pips for spread between orders
if (PipStep<DefaultPips/DEL) PipStep = NormalizeDouble(DefaultPips/DEL,0);
if (PipStep>DefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // if dynamic pips fail, assign pips extreme value
}// else PipStep = DefaultPips;
double PrevCl;
double CurrCl;
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
if ((iCCI(NULL,15,55,0,0)>Drop && ShortTrade)||(iCCI(NULL,15,55,0,0)<(-Drop) && LongTrade)) {
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) {
LongTrade = TRUE;
ShortTrade = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
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 + "-" + PipStep, 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 + "-" + PipStep, 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 (PrevCl > CurrCl) {
if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum ) {
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;
}
} else {
if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum ) {
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;
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;
}
}
}
}
if (NewOrderПоказано первые 50% кода (символов: 12491)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.