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

myfriend.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Программный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник предназначен для автоматической торговли на инструменте EUR/USD в таймфрейме M30 и использует комбинацию уровней Пивот, пользовательский индикатор «DC» и расчёт краткосрочного импульса цены для формирования торговых сигналов.

Советник открывает позиции BUY и SELL с расчётом размера лота на основе свободного маркета заданного риска. Для управления рисками предусмотрены фиксированные уровни тейк-профита и стоп-лосса, а также возможность включения трейлинг-стопа, который перемещает защитный уровень при достижении определённой прибыли.

Дополнительно советник поддерживает ручное закрытие позиций по условию срабатывания временного окна и направления цены, а также отображает ключевые уровни Пивот и их отражения на графике в виде горизонтальных линий с подписями.

Настройки программы

НастройкаОписание
ParamExp Разделитель основных настроек — Текстовый разделитель, обозначающий группу основных настроек экспертного советника в интерфейсе параметров.
Risk Размер риска (%) — Процент риска от свободного маркета, используемый при расчёте размера лота для открытия позиции.
TP Тейк-профит (пункты) — Расстояние в пунктах до уровня тейк-профита при открытии позиции по стандартным условиям.
SLPlus Отступ стоп-лосса (пункты) — Дополнительный отступ в пунктах для расчёта уровня стоп-лосса при открытии позиции без альтернативных условий.
ParamClose Разделитель настроек закрытия — Текстовый разделитель, обозначающий группу настроек закрытия позиций в интерфейсе параметров советника.
UseClose Включить закрытие позиций — Логический переключатель, управляющий доступностью автоматического закрытия позиций по временному и ценовому условию.
ParamTrail Разделитель настроек трейлинг-стопа — Текстовый разделитель, обозначающий группу настроек трейлинг-стопа в интерфейсе параметров советника.
ChPeriod Период индикатора DC — Параметр периода, используемый при расчёте пользовательского индикатора «DC» для формирования торговых сигналов.
UseTrailingStop Включить трейлинг-стоп — Логический переключатель, включающий или отключающий функцию трейлинг-стопа для защиты прибыли.
StartProfit Прибыль для активации трейлинг-стопа (пункты) — Минимальная прибыль в пунктах, которую позиция должна получить, прежде чем трейлинг-стоп начнёт перемещать защитный уровень.
TSLPlus Отступ трейлинг-стопа (пункты) — Дополнительный отступ в пунктах от значения индикатора при перемещении стоп-лосса активным трейлинг-стопом.
Получить полный код

Поиск по коду файла

extern string ParamExp="--- ????????? ???????? ---";
extern double Risk=0.33;
extern int TP=70;
extern int SLPlus=13;
extern string ParamClose=" --- ????????????? ??????????????? ?????????????? ---";
extern bool UseClose=true;
extern string ParamTrail=" --- ????????? Trailing Stop ---";
extern int ChPeriod=16;
extern bool UseTrailingStop=true;
extern int StartProfit=5;
extern int TSLPlus=1;

int start()
  {
      // код доступен только после оплаты
   }

   double Lots, TakeProfit, StopLoss;
   double I1Current, I1Previous, I2Current, I2Previous;
   double I3Current, I3Previous, I4Current, I4Previous;
   double Pivot, R1, R2, R3, S1, S2, S3;
   double MP;
   int cnt, ticket, total;
   int signal1, signal2;
   static int se;

   if(Bars<100 && se==0)
     {
      Print("????? ?????? ???? ?? ????? 100");
      se++;  
     }

   if(Symbol()!="EURUSD" && se==0)
     {
      Print("????????? ????? ???????? ?????? ?? ???? EUR/USD");
      se++;  
     }
   if(Period()!=PERIOD_M30 && se==0)
     {
      Print("????????? ?????????????? ??? ???? ????? ?30");
      se++;  
     }

   if(se>0) return(0);

   I1Current=iCustom(NULL,0,"DC",ChPeriod,1,0,0,ChPeriod,0,0);
   I1Previous=iCustom(NULL,0,"DC",ChPeriod,1,0,0,ChPeriod,0,1);
   I2Current=iCustom(NULL,0,"DC",ChPeriod,1,0,0,ChPeriod,1,0);
   I2Previous=iCustom(NULL,0,"DC",ChPeriod,1,0,0,ChPeriod,1,1);

   Pivot=(iHigh(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)+iClose(NULL,PERIOD_D1,1))/3;
   S1=2*Pivot-iHigh(NULL,PERIOD_D1,1);
   R1=2*Pivot-iLow(NULL,PERIOD_D1,1);
   S2=Pivot-R1+S1;
   R2=Pivot+R1-S1;
   S3=iLow(NULL,PERIOD_D1,1)-2*(iHigh(NULL,PERIOD_D1,1)-Pivot);
   R3=iHigh(NULL,PERIOD_D1,1)+2*(Pivot-iLow(NULL,PERIOD_D1,1));

   ShowPivot(Pivot,R1,R2,R3,S1,S2,S3);

   MP=((Close[0]+Close[1]+Close[2])/3
       - (Close[0]+Close[1]+Close[2]
          +Close[3]+Close[4]+Close[5]
          +Close[6]+Close[7]+Close[8])/9)*1000;

   if(Open[1]<Pivot                    // ???????? ??????????? ???? ???? ??????? ?????
      && Close[1]>Pivot                // ???????? ??????????? ???? ???? ??????? ????? - ????????????? ??????
      && (Close[1]-Open[1])>12*Point   // ????????? ???????? ???? ?????????? ???????
      && Ask>Close[1]                  // ???? ??????
      && MP>0                          // ????????? ????? +
      && Ask<High[0]                   // ??????? ?? ?? ????????? ????
     )
      signal1=1;

   if(Open[1]>Pivot                    // ???????? ??????????? ???? ???? ??????? ?????
      && Close[1]<Pivot                // ???????? ??????????? ???? ???? ??????? ????? - ????????????? ??????
      && (Open[1]-Close[1])>12*Point   // ????????? ???????? ???? ?????????? ???????
      && Bid<Close[1]                  // ???? ??????
      && MP<0                          // ????????? ????? -
      && Bid>Low[0]                    // ??????? ?? ?? ???????? ????
     )
      signal1=-1;

   if(I2Current-I1Current>R1-S1        // ??????? ????? ???????? ???? ?????? ???????? ??????
      && I2Previous-I1Previous<R1-S1   // ?????????? ??? ???
      && I2Current>I2Previous          // ??????? ??????? ?????? ???????? ????? ?????
      && I1Current>=I1Previous         // ?????? - ?? ????? ????
      && MP>0                          // ????????? ????? +
      && Ask<High[0]-7*Point           // ??????? ?? ?? ????????? ????    
     )
      signal1=1;

   if(I2Current-I1Current>R1-S1        // ??????? ????? ???????? ???? ?????? ???????? ??????
      && I2Previous-I1Previous<R1-S1   // ?????????? ??? ???
      && I1Current<I1Previous          // ?????? ??????? ?????? ???????? ????? ????
      && I2Current>=I2Previous         // ??????? - ?? ????? ?????
      && MP>0                          // ????????? ????? +
      && Bid>Low[0]+7*Point            // ??????? ?? ?? ???????? ????
     )
      signal1=-1;

   total=OrdersTotal();
   if(total<1) 
     {

      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("???????????? ????? ?? ?????. ????????? ????? = ", AccountFreeMargin());
         return(0);  
        }  
         bool BUYStart=false;
         bool SELLStart=false;
         if(!BUYStart && !SELLStart)
            {
             if(signal1==1
               || signal2==1)               
               {
                BUYStart=true;
                SELLStart=false;
               }
             if(signal1==-1
               || signal2==-1)
               { 
                SELLStart=true;
                BUYStart=false;
               }
            }
         if(BUYStart)

            OpenBuy(signal2,I1Current);
         if(SELLStart)

            OpenSell(signal2,I2Current);
       return(0);
      }

      for(cnt=0;cnt<total;cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

         if(OrderType()<=OP_SELL &&   

            OrderSymbol()==Symbol())  

           {
            if(OrderType()==OP_BUY)   

              {

               if(
                  UseClose
                  && ((CurTime()-OrderOpenTime())>=3*Period()*60
                  && (CurTime()-OrderOpenTime())<4*Period()*60
                  && Close[1]<OrderOpenPrice()-3*Point)
                 )
                 {
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                  return(0); 
                 }

               if(UseTrailingStop
                  && (Bid-OrderOpenPrice())>StartProfit*Point
                  && I1Current>I1Previous)                            

                 {
                  StopLoss=I1Current-TSLPlus*Point;
                  if(OrderStopLoss()<StopLoss)
    

Показано первые 50% кода (символов: 7624)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
762,40₽ ≈ $9.32