ilan_mql5.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan_mql5.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Илан_mql5 — торговый советник для платформы MetaTrader 5, работающий на текущем символе в рамках одного таймфрейма. Советник анализирует рыночные цены в каждом тике и управляет открытыми позициями, применяя усреднение и фиксацию прибыли.
При открытии позиции без текущей сделки советник определяет направление по отношению открытия и закрытия предыдущей свечи: при бычьем свечном паттерне открывается продажа, при медвежьем — покупка. Для управления позицией используется усреднение по заданному шагу в пунктах с нарастающим размером лота.
Фиксация прибыли устанавливается автоматически при открытии каждой новой позиции на уровне, заданном параметром TakeProfit. Советник отслеживает количество сделок в позиции и не превышает установленный лимит MaxTrades. Все ордера помечаются магическим номером для идентификации.
Настройки программы
| Настройка | Описание |
|---|---|
| TakeProfit ? ??????? (TakeProfit) | TakeProfit — Уровень фиксации прибыли в пунктах, устанавливаемый автоматически при открытии позиции |
| ?????? ???? ???????? ????? (PipStep) | PipStep — Шаг в пунктах для срабатывания усреднения или изменения направления позиции |
| ????????? ????? ???? (Lots) | Lots — Базовый размер лота для расчёта объёма сделок |
| ?????????? ?????? ????? ??????? ? ?????? ???? (LotDecimal) | LotDecimal — Количество знаков после запятой для нормализации рассчитанного размера лота |
| ?????????? ?????????? ?????? ???? (LotExponent) | LotExponent — Множитель экспоненты для увеличения размера лота при каждом последующем усреднении |
| ?????????? ????? ????????? (MagicNumber) | MagicNumber — Магический номер для идентификации ордеров и сделок советника |
| ???????????? ?????????? ???????? ????? (MaxTrades) | MaxTrades — Максимальное количество сделок, допустимых в рамках одной позиции |
| ??????????????? (Slip) | Slip — Допустимое проскальзывание цены при выставлении и модификации ордеров |
Поиск по коду файла
#property version "1.00"
input double TakeProfit = 10; // TakeProfit ? ???????
input double PipStep = 30; // ?????? ???? ???????? ?????
input double Lots = 0.10; // ????????? ????? ????
input int LotDecimal = 1; // ?????????? ?????? ????? ??????? ? ?????? ????
input double LotExponent = 1.70; // ?????????? ?????????? ?????? ????
input int MagicNumber = 70707; // ?????????? ????? ?????????
input int MaxTrades = 8; // ???????????? ?????????? ???????? ?????
input int Slip = 3; // ???????????????
/*input*/ bool UseEquityStop = false; // ???????? ??????????? ?? ??????
/*input*/ double TotalEquityRisk = 50.0; // ??????? ????????? ???????? ????? ???????? ?????? ???
/*input*/ bool UseTimeOut = false; // ????????? ??????????? ?? ????? ????? ???????
/*input*/ double MaxTradeOpenHours = 48; // ???????????? ????? ????? ??????? ? ?????
double Spread;
string ExpertName = "Ilan_mql5";
datetime Expiration;
double LotSize;
int i = 0, Total;
bool TradeNow = false, LongTrade = false, ShortTrade = false;
int Ticket = 0;
bool NewOrdersPlaced = false;
double LastBuyPrice, LastSellPrice;
double iTakeProfit, iPipStep;
long PositionID = 0; // ????????????? ???????? ???????
bool Position = false; // true - ???? ???????? ???????, false - ???
double OpenPrice; // ???? ???????? ???????
double OldOpenPrice = 0; // ????????? ???? ???????? ???????
MqlTick LastPrices; // ????????? ??? ????????? ????????? ??????? ??????
MqlTradeRequest Request; // ????????? ??? ???????? ?????? ???????? OrderSend()
MqlTradeResult Result; // ????????? ? ??????????? ???????? ???????? ??????
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
return;
}
void OnTick()
{
// код доступен только после оплаты
}
if (UseTimeOut && TimeCurrent() >= Expiration)
{
Print("????? ????? ??????? ???????, ?????????????? ???????? ???????");
ClosePosition(); // ????????? ???????
}
if (UseEquityStop)
{
double AccountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
double AccountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
if (AccountEquity <= AccountBalance * (1 - TotalEquityRisk / 100))
{
Print("???????? ", TotalEquityRisk, "% ????????, ?????????????? ???????? ???????");
ClosePosition();
}
}
if (!PositionSelect(_Symbol)) // ??? ????? ???????
{
Position = false;
}
else // ???? ???? ???????
{
Position = true;
PositionID = PositionGetInteger(POSITION_IDENTIFIER); // ????????????? ???????
}
if (Position) // ???? ???? ???????? ???????
{
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // ??????? Buy
{
LongTrade = true;
ShortTrade = false;
}
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) // ??????? Sell
{
LongTrade = false;
ShortTrade = true;
}
}
if (Position) Total = CountTrades(PositionID);
else Total = 0;
if (Position && (Total > 0 && Total <= MaxTrades))
{
LastBuyPrice = FindLastBuyPrice(PositionID);
LastSellPrice = FindLastSellPrice(PositionID);
if (SymbolInfoTick(_Symbol, LastPrices)) // ??????? ? LastPrices ????????? ????
{
if (LongTrade && LastBuyPrice - LastPrices.ask >= iPipStep * _Point) // ???? ???? ????
TradeNow = true;
if (ShortTrade && LastPrices.bid - LastSellPrice >= iPipStep * _Point) // ???? ???? ?????
TradeNow = true;
}
} // if (Total > 0 && Total <= MaxTrades)
if (!Position)
{
ShortTrade = false;
LongTrade = false;
TradeNow = true;
}
if (Position && TradeNow)
{
LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);
Request.action = TRADE_ACTION_DEAL; // ??????????? ?????????? ??????
Request.symbol = _Symbol; // ???????? ??????????
Request.volume = LotSize; // ????? ????
Request.sl = 0; // StopLoss
Request.tp = 0; // TakeProfit
Request.deviation = Slip; // ???????????????
Request.type_filling = ORDER_FILLING_AON; // ??? ?????? ?? ??????????
Request.magic = MagicNumber; // ?????????? ?????
if (!SymbolInfoTick(_Symbol, LastPrices))
{
Print("?? ??????? ???????? ????????? ??????? ??????");
return;
}
if (ShortTrade) // Sell - ?????
{
Request.price = ND(LastPrices.bid); // ???? ???????
Request.type = ORDER_TYPE_SELL; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ????? Sell, ??? ?????? ", Result.retcode);
return;
}
TradeNow = false;
NewOrdersPlaced = true; // ????? ????? ??????
}
else if (LongTrade) // Buy - ?????
{
Request.price = ND(LastPrices.ask); // ???? ???????
Request.type = ORDER_TYPE_BUY; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
TradeNow = false;
NewOrdersPlaced = true; // ????? ????? ??????
}
} // if (TradeNow)
if (!Position && TradeNow) // ???? ??? ???????? ???????
{
MqlRates Rates[1];
if (CopyRates(_Symbol, _Period, 1, 1, Rates) != 1)
{
Print("?? ??????? ???????? ??????? ?????? ??? ?????????? ?????");
return;
}
if (!ShortTrade && !LongTrade)
{
LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);
Request.action = TRADE_ACTION_DEAL; // ??????????? ?????????? ??????
Request.symbol = _Symbol; // ???????? ??????????
Request.volume = LotSize; // ????? ????
Request.sl = 0; // StopLoss
Request.tp = 0; // TakeProfit
Request.deviation = Slip; // ???????????????
Request.type_filling = ORDER_FILLING_AON; // ??? ?????? ?? ??????????
Request.magic = MagicNumber; // ?????????? ?????
if (!SymbolInfoTick(_Symbol, LastPrices))
{
Print("?? ??????? ???????? ????????? ??????? ??????");
return;
}
if (Rates[0].open > Rates[0].close) // ???? ????????? ????? ?????? - ???????
{
Request.price = ND(LastPrices.bid); // ???? ???????
Request.type = ORDER_TYPE_SELL; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcoПоказано первые 50% кода (символов: 10219)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.