ilan_stoch_0.01.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan_stoch_0.01.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 5, работающий на основе стохастика и сетки позиций. Советник анализирует сигналы осциллятора стохастика для открытия сделок в направлении пересечения зон перекупленности и перепроданности. Поддерживает расширение позиции через дополнительные ордера с нарастающим лотом по экспоненциальной формуле.
Настройки программы
| Настройка | Описание |
|---|---|
| TakeProfit ? ??????? (TakeProfit) | TakeProfit — Уровень фиксации прибыли в пунктах от цены открытия позиции. |
| ?????? ???? ???????? ????? (PipStep) | PipStep — Шаг в пунктах для открытия дополнительных сделок при расширении позиции. |
| ????????? ????? ???? (Lots) | Lots — Базовый размер лота для первой сделки. |
| ?????????? ?????? ????? ??????? ? ?????? ???? (LotDecimal) | LotDecimal — Количество знаков после запятой для округления рассчитанного размера лота. |
| ?????????? ?????????? ?????? ???? (LotExponent) | LotExponent — Множитель, используемый для увеличения лота при каждой следующей сделке в позиции. |
| ?????????? ????? ????????? (MagicNumber) | MagicNumber — Магический номер для идентификации ордеров и позиций советника. |
| ???????????? ?????????? ???????? ????? (MaxTrades) | MaxTrades — Максимальное количество сделок, разрешённых в рамках одной позиции. |
| ??????????????? (Slip) | Slip — Допустимое отклонение цены исполнения в пунктах. |
| ???????????? TrailingStop (UseTrailingStop) | UseTrailingStop — Включает или отключает трейлинг-стоп для текущей позиции. |
| ??????? ? ???????, ??????????? ??? ?????? ????? (TrailStart) | TrailStart — Уровень прибыли в пунктах, начиная с которого трейлинг-стоп начинает двигаться. |
| StopLoss ? ???????, ???????????? ??? ????? (TrailStop) | TrailStop — Расстояние стоп-лосса в пунктах от текущей цены при активном трейлинге. |
| ???????????? ??????????? ?? ?????? (UseEquityStop) | UseEquityStop — Включает или отключает остановку торговли при снижении средств ниже заданного порога. |
| ???????????? ?????? ? ????????? ?? ???????? (TotalEquityRisk) | TotalEquityRisk — Процент снижения средств от баланса, при достижении которого происходит принудительное закрытие позиции. |
| ???????????? ??????????? ?? ????? ????? ??????? (UseTimeOut) | UseTimeOut — Включает или отключает тайм-аут сделки по времени. |
| ???????????? ????? ????? ??????? ? ????? (MaxTradeOpenHours) | MaxTradeOpenHours — Максимальное время удержания сделки в часах до принудительного закрытия. |
| tx4 | tx4 — Текстовый параметр для пользовательской метки или описания. |
| StartHour | StartHour — Час начала торгового окна для проверки допустимого времени торговли. |
| EndHour | EndHour — Час окончания торгового окна для проверки допустимого времени торговли. |
| s1 | s1 — Текстовый параметр строкового типа для пользовательских целей. |
| ??? ??????? (type) | type — Выбор метода создания индикатора стохастика: через встроенную функцию iStochastic или через IndicatorCreate. |
| StochTime | StochTime — Таймфрейм, на котором рассчитывается осциллятор стохастика. |
| per_K | per_K — Период %K линии стохастика. |
| per_D | per_D — Период %D линии стохастика (сглаживание). |
| slow | slow — Замедление (период сглаживания) %D линии стохастика. |
| S_Mode | S_Mode — Метод сглаживания, используемый при расчёте стохастика. |
| S_Price | S_Price — Тип цены, используемый для расчёта осциллятора стохастика. |
| zoneBUY | zoneBUY — Значение зоны перепроданности, при пересечении которого формируется сигнал на покупку. |
| zoneSELL | zoneSELL — Значение зоны перекупленности, при пересечении которого формируется сигнал на продажу. |
| ?????? (symbol) | symbol — Символ инструмента для анализа и торговли. |
Поиск по коду файла
#property version "0.01"
input double TakeProfit = 10; // TakeProfit ? ???????
input double PipStep = 30; // ?????? ???? ???????? ?????
input double Lots = 0.10; // ????????? ????? ????
input int LotDecimal = 1; // ?????????? ?????? ????? ??????? ? ?????? ????
input double LotExponent = 2; // ?????????? ?????????? ?????? ????
input int MagicNumber = 150611; // ?????????? ????? ?????????
input int MaxTrades = 5; // ???????????? ?????????? ???????? ?????
input int Slip = 3; // ???????????????
input bool UseTrailingStop = false; // ???????????? TrailingStop
input int TrailStart = 10; // ??????? ? ???????, ??????????? ??? ?????? ?????
input int TrailStop = 10; // StopLoss ? ???????, ???????????? ??? ?????
input bool UseEquityStop = false; // ???????????? ??????????? ?? ??????
input double TotalEquityRisk = 50.0; // ???????????? ?????? ? ????????? ?? ????????
input bool UseTimeOut = false; // ???????????? ??????????? ?? ????? ????? ???????
input double MaxTradeOpenHours = 48; // ???????????? ????? ????? ??????? ? ?????
input string tx4="????? ?????? ?????????";
input int StartHour=21;
input int EndHour=4;
enum Creation
{
Call_iStochastic, // ???????????? iStochastic
Call_IndicatorCreate // ???????????? IndicatorCreate
};
input string s1="????????? ?????????? Stochastic";
input Creation type=Call_iStochastic; // ??? ???????
input ENUM_TIMEFRAMES StochTime=5;
input int per_K=10;
input int per_D=3;
input int slow=3;
input ENUM_MA_METHOD S_Mode=MODE_SMA;
input ENUM_STO_PRICE S_Price=STO_LOWHIGH;
input int zoneBUY=15;
input int zoneSELL=85;
input string symbol="GBPUSD"; // ??????
string short_name;
double Spread;
string ExpertName = "Ilan_stoch";
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;
int iTrailStart, iTrailStop;
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 (UseTrailingStop)
TrailPosition(iTrailStart, iTrailStop);
if (UseTimeOut && TimeCurrent() >= Expiration)
{
Print("????? ????? ??????? ???????, ?????????????? ???????? ???????");
ClosePosition(); // ????????? ???????
}
long TickVolume[1]; // ?????? ??? ???????? ?????? ?????????? ????
if (CopyTickVolume(_Symbol, _Period, 0, 1, TickVolume) != 1)
{
Print("?? ??????? ???????? ?????????? ????? ?? ??????? ????");
return;
}
if (TickVolume[0] > 1) return;
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 (Stochastic("sell") && time())
{
Request.price = ND(LastPrices.bid); // ???? ???????
Request.type = ORDER_TYPE_SELL; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
NewOrdersPlaced = true; // ????? ????? ??????
}
if(Stochastic("buy") && time())
{
Request.price = ND(LastPrices.ask); // ???? ???????
Request.type = ORDER_TYPE_BUY; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
NewOrdersPlaced = true; // ????? ????? ??????
}
} // if (!ShortTrade && !LongTrade)
if (NewOrdersPlaced)
Expiration = (datetime)(TimeCurrent() + PeriodSeconds(PERIOD_H1) * MaxTradeOpenHours);
TradeNow = false;
} // if (!Position && TradeNow)
if (NewOrdersPlaced)
{
if (!PositionSelect(_Symbol)) return; // ??? ????? ???????
double CurrStopLoss = PositionGetDouble(POSITION_SL); // StopLoss ???????
OpenPrice = PositionGetDouble(POSITION_PRICE_OPEN); // ???? ???????? ???????
if (OpenPrice == OldOpenPrice) return;
Request.symbol = _Symbol; // ??????? ??????????
Request.action = TRADE_ACTION_SLTP; // ????? ??????????????
Request.sl = CurrStopLoss; // StopLoss ??????? ??? ?????????
Request.deviation = Slip; // ???????????????
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // ???? ??????? Buy
Request.tp = ND(OpenPrice + iTakeProfit * _Point); // ????? ??????? TakeProfit
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) // ???? ??????? Sell
Request.tp = ND(OpenPrice - iTakeProfit * _Point);Показано первые 50% кода (символов: 14853)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.