My10trend
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «my10trend.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
My10trend — торговый советник для MetaTrader 4, написанный на языке MQL4. Эксперт использует индикатор Williams %R (WPR) для формирования сигналов на открытие и закрытие позиций. Основная логика основана на сравнении значений WPR на текущем и предыдущем барах для определения условий покупки и продажи, а также на анализе ценовых баров.
Советник поддерживает гибкую настройку размера лота, включая расчёт по проценту от баланса или эквити, а также почасовую настройку объёма сделок. Доступны два метода управления защитными уровнями: классический трейлинг-стоп и трейлинг по барам. Реализованы ограничения по времени торговли — задаются рабочие часы, дни недели и режим работы только в выбранное время.
В работе советник использует торговые функции OrderSend, OrderModify и OrderClose для управления позициями. Фильтрация ордеров осуществляется по магическому числу и символу графика. Встроена защита от открытия сделок при большом стоп-уровне, проверка минимальных и максимальных лотов, а также контроль допустимого проскальзывания.
Настройки программы
| Настройка | Описание |
|---|---|
| Lot | Размер лота — Базовый размер лота для открытия позиции |
| Percent | Процент от баланса — Процент от баланса или эквити для расчёта размера лота |
| StopLoss | Стоп-лосс — Расстояние стоп-лосса от цены открытия в пунктах |
| TakeProfit | Тейк-профит — Расстояние тейк-профита от цены открытия в пунктах |
| Slippage | Проскальзывание — Допустимое проскальзывание в пунктах |
| Otstup | Смещение уровней — Дистанция смещения для расчёта уровней стоп-лосса и тейк-профита |
| UseTrailing | Использовать трейлинг-стоп — Включение или выключение трейлинг-стопа |
| TrailingStopLoss | Расстояние трейлинг-стопа — Расстояние трейлинг-стопа в пунктах |
| TrailingStep | Шаг трейлинг-стопа — Шаг трейлинг-стопа в пунктах |
| TSLBars | Бары для трейлинга — Количество баров для трейлинга по барам |
| TimeToDeath | Время до принудительного закрытия — Время в секундах до принудительного закрытия позиции по трейлингу |
| MaxDeals | Максимальное количество сделок — Максимальное количество одновременных открытых сделок |
| Param | Разделитель настроек — Текстовый разделитель для группировки настроек |
| WPR_Period | Период Williams %R — Период индикатора Williams %R |
| TimeShift | Сдвиг времени — Сдвиг времени для определения текущего торгового часа |
| StartHour | Начальный час торговли — Начальный час торговли |
| EndHour | Конечный час торговли — Конечный час торговли в рамках выбранного режима |
| FridayLastWorkHour | Последний час работы в пятницу — Последний час работы советника в пятницу |
| MondayFirstWorkHour | Первый час работы в понедельник — Первый час работы советника в понедельник |
| WorkOnlySelectedHours | Работать только в выбранные часы — Режим работы только в заданные часы |
| HourPercent | Описание процента по часам — Описание режима процента лота по часам |
| Pct0H | Процент лота для часа 0 — Процент лота для часа 0 |
| Pct13H | Процент лота для часа 13 — Процент лота для часа 13 |
| wprlvl | Уровень Williams %R — Уровень Williams %R для формирования торговых сигналов |
| FinalTrailingStop | Финальный трейлинг-стоп — Финальное расстояние трейлинг-стопа в пунктах |
| PipStep | Шаг в пипсах — Шаг в пипсах для условий открытия позиций |
| BarStep | Шаг в барах — Шаг в барах для проверки временных условий открытия позиций |
| Increment | Множитель лота — Множитель увеличения лота при множественных сделках |
| PipStepIncrement | Множитель шага пипсов — Множитель увеличения шага пипсов |
| TimeFrames | Список таймфреймов — Перечисление доступных таймфреймов |
| TimeFrame | Таймфрейм — Выбранный таймфрейм для анализа |
| ProtectSL | Защита стоп-лосса — Защита стоп-лосса от пересечения стоп-уровня брокера |
| NotOpenIfBigStopLevel | Не открывать при большом стоп-уровне — Запрет открытия позиции при большом стоп-уровне брокера |
| comment | Комментарий к ордерам — Комментарий к открываемым ордерам |
| MagicNumber | Магическое число — Магическое число для фильтрации управляемых ордеров |
| gv | Имя глобальной переменной — Имя глобальной переменной для хранения времени последней сделки |
Поиск по коду файла
extern double Lot = 0.1;
extern double Percent = 30;
extern int StopLoss = 400;
extern int TakeProfit = 1500;
extern int Slippage=10;
extern int Otstup = 10;
extern bool UseTrailing = false;
extern int TrailingStopLoss = 20;
extern int TrailingStep = 10;
extern int TSLBars = -1;
extern int TimeToDeath = 0;
extern int MaxDeals = 10;
extern string Param="------------------------------------------------------------------";
extern int WPR_Period=20;
/*
extern int RSI_Period=7;
extern int MA_Period=60;
extern int BB_Period=20;
extern int Envelopes_Period=10;
*/
extern int TimeShift=0;
extern int StartHour=23;
extern int EndHour=23;
extern int FridayLastWorkHour=20;
extern int MondayFirstWorkHour=6;
extern bool WorkOnlySelectedHours=false;
extern string HourPercent=">0 - fixed lot, 0 - not work, <0 - percent of this hour.";
extern double Pct0H=0, Pct1H=0, Pct2H=0, Pct3H=0, Pct4H=0, Pct5H=0, Pct6H=-10, Pct7H=0, Pct8H=0, Pct9H=0, Pct10H=0, Pct11H=0, Pct12H=0;
extern double Pct13H=0, Pct14H=0, Pct15H=0, Pct16H=0, Pct17H=0, Pct18H=0, Pct19H=0, Pct20H=0, Pct21H=0, Pct22H=0, Pct23H=-10;
extern double wprlvl=25, wprNoLosslvl=110, wprStartTraillvl=95, wprLossStartTraillvl=78, wprFinalTraillvl=98, wprTrailFactor=8;
extern int FinalTrailingStop = 20;
extern int PipStep=50;
extern int BarStep=5;
extern double Increment=1;
extern double PipStepIncrement=1;
static double time[24];
extern string TimeFrames = "-- 0, 1, 5, 15, 30, 60-H1, 240-H4, 1440-D1, 10080-W1, 43200-M1 --";
extern int TimeFrame = 60;
extern bool ProtectSL = true;
extern bool NotOpenIfBigStopLevel = false;
extern string comment="My4";
extern int MagicNumber = 8877667;
extern string gv="LDTime";
double Ttd=0;
static bool t0=false, t100=false;
bool initialized = false;
int MAX_TRAILING_STEP = 1;
int init() {
// код доступен только после оплаты
}
int deinit() {
initialized = false;
return(0);
}
int start() {
// код доступен только после оплаты
}
if (!initialized) {
return(0);
}
if (DayOfWeek() == 0 || DayOfWeek() == 6) {
return(0);
}
if (!IsTradeAllowed()) {
return(0);
}
double ldtm=0;
if (GlobalVariableCheck(gv)) ldtm=GlobalVariableGet(gv); else GlobalVariableSet(gv, 0);
double stopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;
bool prt=stopLevel>TrailingStopLoss*Point && ProtectSL;
int per=TimeFrame;
int ticket;
int q = 0;
double spred = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;//18 * Point;
double sl = StopLoss * Point;
double tp = TakeProfit * Point;
double otst = Otstup * Point;
if (UseTrailing) {
TrailingPositions(TrailingStopLoss, TrailingStep, MagicNumber);
}
if (TSLBars==0) TSLBars=WPR_Period;
TrailingPositionsBars(TSLBars, per, MagicNumber);
bool tm=false; int rtm=TimeHour(TimeCurrent())-TimeShift; if (rtm<0) rtm=rtm+24; if (rtm>23) rtm=rtm-24;
if (rtm<0 || rtm>23) { Alert("???????????? ????? ???????"); return(0); }
if (!WorkOnlySelectedHours) {
if (StartHour<=EndHour && rtm>=StartHour && rtm<=EndHour) tm=true;
if (StartHour>EndHour && (rtm>=StartHour || rtm<=EndHour)) tm=true;
} else {
if (time[rtm]<0) {tm=true; Percent=-time[rtm];}
if (time[rtm]>0) {tm=true; Percent=0; Lot=time[rtm];}
}
if (TimeDayOfWeek(TimeCurrent())==5 && rtm>FridayLastWorkHour) tm=false;
if (TimeDayOfWeek(TimeCurrent())==1 && rtm<MondayFirstWorkHour) tm=false;
double realLot=Lot;
if (Percent>0) {
double base=MathMin(AccountEquity(), AccountBalance());
realLot=MathFloor(base/100*Percent*Lot)/100;
if (realLot<MarketInfo(Symbol(), MODE_MINLOT)) { Comment("????? ????????? :("); return(0); }
realLot=MathMin(MathMax(MarketInfo(Symbol(), MODE_MINLOT),MathFloor(base/100*Percent*Lot)/100),MarketInfo(Symbol(), MODE_MAXLOT));
}
if (tm) Comment("Lot=",realLot,"\n"); else Comment("???????? ????????");
double bid = Bid;
double ask = Ask;
int ob=0, os=0, obs=0, oss=0, wob=0, wos=0;
double bmin=1000, smax=0, bvmax=0, svmax=0, ltmb=0, ltms=0;
for (q = 0; q < OrdersTotal(); q++) {
if (OrderSelect(q, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUYSTOP) obs++;
if (OrderType() == OP_SELLSTOP) oss++;
if (OrderType() == OP_BUY) {
ob++; bmin=MathMin(bmin, OrderOpenPrice()); bvmax=MathMax(bvmax, OrderLots()); ltmb=MathMax(ltmb, OrderOpenTime());
if (OrderStopLoss()>=OrderOpenPrice()) wob++;
}
if (OrderType() == OP_SELL) {
os++; smax=MathMax(smax, OrderOpenPrice()); svmax=MathMax(svmax, OrderLots()); ltms=MathMax(ltms, OrderOpenTime());
if (OrderStopLoss()<=OrderOpenPrice()) wos++;
}
}
}
double bsl=0, ssl=0, btp=0, stp=0;
if (StopLoss>0) { bsl=bid - StopLoss*Point; ssl=bid + spred + StopLoss*Point;}
if (TakeProfit>0) { btp=bid + TakeProfit*Point; stp=ask - TakeProfit*Point;}
bool condWPRBuy=false, condWPRSell=false,wprBST=false, wprBNL=false, wprSST=false, wprSNL=false, wprLSST=false, wprLBST=false, wprFSST=false, wprFBST=false;
bool condBuy=false, condSell=false, condCloseBuy=false, condCloseSell=false, condCloseBuyPrt=false, condCloseSellPrt=false;
bool condBuyNoLoss=false, condSellNoLoss=false, condLossBuyStartTrail=false, condLossSellStartTrail=false;
bool condBuyStartTrail=false, condSellStartTrail=false, condFinalBuyStartTrail=false, condFinalSellStartTrail=false;
bool condDemDeal=false;
double L2 = iLow(NULL, per, 2), L1 = iLow(NULL, per, 1), L = iLow(NULL, per, 0);
double H2 = iHigh(NULL, per, 2), H1 = iHigh(NULL, per, 1), H = iHigh(NULL, per, 0);
double O2 = iOpen(NULL, per, 2), O1 = iOpen(NULL, per, 1), O = iOpen(NULL, per, 0);
double C2 = iClose(NULL, per, 2), C1 = iClose(NULL, per, 1), C = iClose(NULL, per, 0);
bool barup2=C2>=O2, barup1=C1>=O1;
bool PrtCloseDown=C<MathMax(H, H1)-TrailingStopLoss*Point;
bool PrtCloseUp=C>MathMin(L, L1)+TrailingStopLoss*Point;
double wpr0=iWPR(NULL, per, WPR_Period, 0), wpr1=iWPR(NULL, per, WPR_Period, 1), wpr2=iWPR(NULL, per, WPR_Period, 2), wpr3=iWPR(NULL, per, WPR_Period, 3), wpr4=iWPR(NULL, per, WPR_Period, 4), wpr5=iWPR(NULL, per, WPR_Period, 5), wpr6=iWPR(NULL, per, WPR_Period, 6), wpr7=iWPR(NULL, per, WPR_Period, 7), wpr8=iWPR(NULL, per, WPR_Period, 8);
condDemDeal=true;
/*
double bbu1=iBands(NULL, per, BB_Period, 2, 0, PRICE_OPEN, MODE_UPPER,1), bbu0=iBands(NULL, per, BB_Period, 2, 0, PRICE_OPEN, MODE_UPPER,0);
double bbl1=iBands(NULL, per, BB_Period, 2, 0, PRICE_OPEN, MODE_LOWER,1), bbl0=iBands(NULL, per, BB_Period, 2, 0, PRICE_OPEN, MODE_LOWER,0);
bool HiPeak=C>bbu0, LoPeak=C<bbl0;
bool FinishDownTrend=ma0>bbu0, FinishUpTrend=ma0<bbl0;
*/
bool flat=false; // if (envu>ma0 && envl<ma0) flat=true;
flat=true;
bool firsttick=TimeCurrent()-BarStep*per*60>=ldtm;//!iVolume(NULL,per,0)>1;
bool ttb=TimeCurrent()-BarStep*per*60Показано первые 50% кода (символов: 13631)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.