← К каталогу
Исходный код · ID 836

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 и перейдите к оплате.

Стоимость полного кода
1 363,10₽ ≈ $16.66