ilan-1.8
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan-1.8.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
ilan-1.8 — торговый советник для MetaTrader 4, работающий на одном символе графика. Советник использует пользовательский индикатор VininI_HMA на таймфрейме H1 для определения направления и открывает сделки по сигналам индикатора с учётом закрытия предыдущих свечей. Дополнительно применяются фильтры по времени и управление рисками.
Советник поддерживает наращивание объёма позиций при неблагоприятном движении цены, ограничение максимального количества сделок, а также опциональные функции: трейлинг-стоп, закрытие всех позиций по тайм-ауту, остановка по просадке капитала и закрытие позиций перед выходными. Все сделки помечаются заданным магическим номером.
Управление капиталом может осуществляться либо фиксированным лотом, либо расчётом от баланса с заданным процентом риска. Советник не содержит гарантий прибыли и предназначен для автоматизации торговли на реальном или демонстрационном счёте.
Настройки программы
| Настройка | Описание |
|---|---|
| ?????????? ???? ??????? ????? (LotExponent) | Множитель лота — Множитель для увеличения объёма следующей сделки при наращивании позиции. |
| ??????????????? (slip) | Проскальзывание — Максимально допустимое проскальзывание в пунктах при открытии и закрытии сделок. |
| ???? ???? ?? ????????, ???? ?????? 0 ??? ?? ???? ?????????? ? ??????????? ?? ???? (risk) | Риск — Доля риска от баланса для расчёта лота. Если равно 0, используется фиксированный лот. |
| ??????? ??? ?????????? ????????, ????????????? ??? ????? (Percent_Risk) | Процент риска — Делитель для расчёта лота от баланса при управлении капиталом. |
| 0-???? 1 ???, 1-???? 0.1-0.9, 2-???? 0.01-0.09 (lotdecimal) | Точность лота — Количество знаков после запятой при нормализации объёма лота. |
| TakeProfit | Тейк-профит — Уровень тейк-профита в пунктах от средней цены открытых позиций. |
| ??? ????? (PipStep) | Шаг в пунктах — Минимальное расстояние в пунктах между сделками при наращивании позиции. |
| ?????????? ????? (MaxTrades) | Максимум сделок — Максимальное количество одновременно открытых сделок по символу. |
| PerHMA | Период HMA — Период пользовательского индикатора VininI_HMA, используемого для определения направления. |
| ?????????? ????? ??? ????????? ????? ?????? ?? ?????? ???? (g_magic_176) | Магический номер — Магический номер для идентификации сделок советника. |
| a | Строковый параметр — Строковый параметр, используемый в комментарии к сделкам. |
| ???????????? ??????????? ?? ??????? ? ??????? true, ?? ???????????? false (CloseFriday) | Закрытие в пятницу — Включает или отключает закрытие всех позиций в пятницу. При значении true позиции закрываются, при false — нет. |
| ????? ? ??????? ????? ???????? ?? ???????????? ?????? ????? (CloseFridayHour) | Час закрытия в пятницу — Час, после которого в пятницу выполняется закрытие позиций, если включено закрытие в пятницу. |
Поиск по коду файла
int PauseMin=10; // ????? ????? ?????? ???????
extern double LotExponent = 1.59; // ?????????? ???? ??????? ?????
extern double slip = 3.0; // ???????????????
extern double risk = 0.3; // ???? ???? ?? ????????, ???? ?????? 0 ??? ?? ???? ?????????? ? ??????????? ?? ????
extern double Percent_Risk = 100; // ??????? ??? ?????????? ????????, ????????????? ??? ?????
double Lot = 0.01; // ???
extern int lotdecimal = 2; // 0-???? 1 ???, 1-???? 0.1-0.9, 2-???? 0.01-0.09
extern double TakeProfit = 10.0;
double Stoploss = 500.0;
double TrailStart = 10.0;
double TrailStop = 10.0;
extern double PipStep = 12.0; // ??? ?????
extern int MaxTrades = 10; // ?????????? ?????
extern int PerHMA = 14;
bool UseEquityStop = FALSE; // ???????????? ??????????? ????? ?? ????????
double TotalEquityRisk = 20.0; // ??????? ????????? ?? ???????? ??? ?????
bool UseTrailingStop = FALSE; // ????????????? ???????? ?????
bool UseTimeOut = FALSE; // ??????????? ??? ??????? ? ?????
double MaxTradeOpenHours = 48.0; // ????? ? ????? ????? ???? ?????? ??????? ???? ? ????? ?? ??????? ???????????
extern int g_magic_176 = 123; // ?????????? ????? ??? ????????? ????? ?????? ?? ?????? ????
extern string a = "?????? ????????? ? ??????? ??";
extern bool CloseFriday=true; // ???????????? ??????????? ?? ??????? ? ??????? true, ?? ???????????? false
extern int CloseFridayHour=19; // ????? ? ??????? ????? ???????? ?? ???????????? ?????? ?????
double g_price_180;
double gd_188;
double gd_unused_196;
double gd_unused_204;
double g_price_212;
double g_bid_220;
double g_ask_228;
double gd_236;
double gd_244;
double gd_260;
bool gi_268;
string gs_ilan_272 = "f***9*@mail.ru";
int gi_280 = 0;
int gi_284;
int gi_288 = 0;
double gd_292;
int g_pos_300 = 0;
int gi_304;
double gd_308 = 0.0;
bool gi_316 = FALSE;
bool gi_320 = FALSE;
bool gi_324 = FALSE;
int gi_328;
bool gi_332 = FALSE;
double gd_336;
double gd_344;
int init() {
// код доступен только после оплаты
}
int deinit() {
return (0);
}
bool TradeTime(){
static int OrdHisCount;int time;double profit;
if(OrdHisCount==OrdersHistoryTotal())return(false);
for(int i=OrdersHistoryTotal()+1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol()==Symbol()){
if(OrderCloseTime()>time){
time=OrderCloseTime();
profit=OrderProfit();
}
}
}
}
if(profit>0){if(TimeCurrent()-time>=PauseMin*60){OrdHisCount=OrdersHistoryTotal();return(true);}else{return(false);}}
return(false);
}
int indHMA1open_val;
int start() {
// код доступен только после оплаты
}
if(!TradeTime()){if (gi_280 == Time[0]) return (0);}
gi_280 = Time[0];
double indHMA1open_Yellow = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 0, 1);
double indHMA1open_Green = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 1, 1);
double indHMA1open_Red = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 2, 1);
if (indHMA1open_Green != EMPTY_VALUE) indHMA1open_val = 1;
else if (indHMA1open_Red != EMPTY_VALUE) indHMA1open_val = -1;
else if (indHMA1open_Yellow != EMPTY_VALUE) indHMA1open_val = 0;
double l_iclose_8;
double l_iclose_14;
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, g_price_212);
if (UseTimeOut) {
if (TimeCurrent() >= gi_284) {
CloseThisSymbolAll();
Print("Closed All due to TimeOut");
}
}
double ld_0 = CalculateProfit();
if (UseEquityStop) {
if (ld_0 < 0.0 && MathAbs(ld_0) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll();
Print("Closed All due to Stop Out");
gi_332 = FALSE;
}
}
gi_304 = CountTrades();
if (gi_304 == 0) gi_268 = FALSE;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_BUY) {
gi_320 = TRUE;
gi_324 = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_SELL) {
gi_320 = FALSE;
gi_324 = TRUE;
break;
}
}
}
if (gi_304 > 0 && gi_304 <= MaxTrades) {
RefreshRates();
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_320 && gd_236 - Ask >= PipStep * Point && indHMA1open_val>0) gi_316 = TRUE;
if (gi_324 && Bid - gd_244 >= PipStep * Point && indHMA1open_val<0) gi_316 = TRUE;
}
if (gi_304 < 1) {
gi_324 = FALSE;
gi_320 = FALSE;
gi_316 = TRUE;
gd_188 = AccountEquity();
}
if (gi_316) {
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_324) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
RefreshRates();
gi_328 = OpenPendingOrder(1, gd_292, Bid, slip, Ask, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, HotPink);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_244 = FindLastSellPrice();
gi_316 = FALSE;
gi_332 = TRUE;
} else {
if (gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
gi_328 = OpenPendingOrder(0, gd_292, Ask, slip, Bid, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Lime);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_236 = FindLastBuyPrice();
gi_316 = FALSE;
gi_332 = TRUE;
}
}
}
if (gi_316 && gi_304 < 1) {
l_iclose_8 = iClose(Symbol(), 0, 2);
l_iclose_14 = iClose(Symbol(), 0, 1);
g_bid_220 = Bid;
g_ask_228 = Ask;
if (!gi_324 && !gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
if(CloseFriday==true&&DayOfWeek()==5&&TimeCurrent()>=StrToTime(CloseFridayHour+":00"))return(0);
if (l_iclose_8 > l_iclose_14 && indHMA1open_val < 0)
{
if (iHigh(Symbol(), PERIOD_H1, 1)>Bid)
{
gi_328 = OpenPendingOrder(1, gd_292, g_bid_220, slip, g_bid_220, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, HotPink);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_236 = FindLastBuyPrice();
gi_332 = TRUE;
}
}
if (iLow(Symbol(), PERIOD_H1, 1)<Ask)
{
if (l_iclose_8 < l_iclose_14 && indHMA1open_val > 0)
{
gi_328 = OpenPendingOrder(0, gd_292, g_ask_228, slip, g_ask_228, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Lime);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_244 = FindLastSellPrice();
gi_332 = TRUE;
}
}
if (gi_328 > 0) gi_284 = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
gi_316 = FALSE;
}
}
gi_304 = CountTrades();
g_price_212 = 0;
double ld_24 = 0;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
g_price_212 += OrderOpenPrice() * OrderLots();
ld_24 += OrderLots();
}
}
}
if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);
if (gi_332) {
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_BUY) {
g_price_180 = g_price_212 + TakeProfit * Point;
gd_unused_196 = g_price_180;
gd_308 = g_price_212 - Stoploss * Point;
gi_268 = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_SELL) {
g_price_180 = g_price_212 - TakeProfit * Point;
gd_unused_204 = g_price_180;
gd_308 = g_price_212 + Stoploss * Point;
gi_268 = TRUE;
}
}
}
}
if (gi_332) {
if (gi_268 == TRUE) {
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), NormalizeDouble(g_priceПоказано первые 50% кода (символов: 13997)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.