Группа "Стол заказов MQL"

Рейтинг 2147



РЕКОМЕНДУЮ



Помогите написать функцию!!!

Добрый день!!! Помогите написать, пожалуйста, функцию открытия ордеров по тренду или киньте ссылку на советник(не могу найти)!
Смысл такой:
Пример, как на скрине, имеем два индикатора(МА и MACD) в сделку(BUY) вошли при пересечении гистограммы MACD из отрицательной зоны в положительную и цена закрылась выше МА — ПОЛУЧИЛИ ТЕЙК! Дальше, свеча, закрылась ниже МА(MACD>0, обвел красным овалом), затем обратно свеча закрывается выше МА и МАСD>0, тогда на следующей свече обратно открываем BUY.
Т.е. для входа в позицию имеем два сигнала( индикаторы могут быть любые, в данном случае МА и МАСD)
1) пересечение МАСD>0 нулевого уровня и свеча закрылась выше МА открываем BUY (это понятно!!!)
2) открытых ордеров нет, МАСD уже находится выше нуля и свеча(свечи) были ниже МА, а теперь пересекает МА с низу вверх и закрывается выше МА, тогда снова открываем BUY!
Сигнальная линия МАСD не важна, только сама гистограмма!!!Screenshot_55.png (19 Kb)
Заранее ОГРОМНАЯ БЛАГОДАРНОСТЬ!!!
  • 0
  • Просмотров: 1483
  • 16 марта 2021, 19:36
  • dima0603
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Вывести буфер с индикатора
Следующая запись в группе  
Доработка советника для MT5
16 марта 2021
16 марта 2021

Брокер для ваших роботов, 15 лет на рынке

Комментарии (9)

+
0
омогите написать, пожалуйста, функцию открытия ордеров по тренду или киньте ссылку на советник(не могу найти)!


совсем недавно писал подобный на ма и макди
avatar

  35  AM2 Сообщений: 16289 - Андрей

  • 16 марта 2021, 21:25
+
0
Спасибо, Андрей! Но там нет(я не вижу и в тестере) выполнения второго условия
2) открытых ордеров нет, МАСD уже находится выше нуля и свеча(свечи) были ниже МА, а теперь пересекает МА с низу вверх и закрывается выше МА, тогда снова открываем BUY!
avatar

  9  dima0603 Автор Сообщений: 220

  • 16 марта 2021, 21:46
+
0
вам только условие написать или целиком советник?
avatar

  35  AM2 Сообщений: 16289 - Андрей

  • 16 марта 2021, 21:56
+
0
Только условие:) 
avatar

  9  dima0603 Автор Сообщений: 220

  • 16 марта 2021, 22:03
+
0
посмотрю завтра, только скрин в топик скиньте чтобы видно было
avatar

  35  AM2 Сообщений: 16289 - Андрей

  • 16 марта 2021, 22:12
+
0
avatar

  9  dima0603 Автор Сообщений: 220

  • 16 марта 2021, 22:15
+
0
готово: www.opentraders.ru/downloads/2962/




//+------------------------------------------------------------------+
//|                                                      MACDMA2.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
input double Lots         = 0.01; // лот
input double KLot         = 2;    // увеличение лота
input double MaxLot       = 10;   // максимальный лот
input int    StopLoss     = 200;  // стоплосс
input int    TakeProfit   = 300;  // тейкпрофит
input int    CloseSig     = 0;    // 1-закрытие по сигналу
input int    Shift        = 1;    // бар индикатора
input int    Slip         = 100;  // проскальзывание
input int    Magic        = 123;  // магик

input int    Fast         = 12;   // Fast EMA period
input int    Slow         = 26;   // Slow EMA period
input int    Signal       = 9;    // Signal SMA period

input int MAPeriod        = 8;        // период МА
input int MAShift         = 0;        // сдвиг МА
input ENUM_MA_METHOD MAMethod = 0;    // метод МА
input ENUM_APPLIED_PRICE MAPrice = 0; // цены МА

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),0,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0)
               break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }

   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double macd1=iMACD(NULL,0,Fast,Slow,Signal,0,0,Shift);
   double macd2=iMACD(NULL,0,Fast,Slow,Signal,0,0,Shift+1);
   double ma=iMA(NULL,0,MAPeriod,MAShift,MAMethod,MAPrice,Shift);

   if(t!=Time[0])
     {
      if(CloseSig>0)
        {
         if(macd1>0 && macd2<0 && Close[1]>ma)
           {
            CloseAll(1);
           }
         if(macd1<0 && macd2>0 && Close[1]<ma)
           {
            CloseAll(0);
           }
        }
        
      if(CountTrades()<1)
        {
         if(macd1>0 && macd2<0 && Close[1]>ma)
           {
            PutOrder(0,Ask);
           }
         if(macd1<0 && macd2>0 && Close[1]<ma)
           {
            PutOrder(1,Bid);
           }
        }

      if(CountTrades()>0)
        {
         if(macd1>0 && Close[1]>ma && Open[1]<ma)
           {
            PutOrder(0,Ask);
           }
         if(macd1<0 && Close[1]<ma && Open[1]>ma)
           {
            PutOrder(1,Bid);
           }
        }
      t=Time[0];
     }

   Comment("\n ma: ",ma,
           "\n macd: ",macd1,
           "\n Lot: ",Lot(),
           "\n Trades: ",CountTrades());
  }
//+------------------------------------------------------------------+


Редактирован: 18 марта 2021, 20:46
avatar

  35  AM2 Сообщений: 16289 - Андрей

  • 17 марта 2021, 21:38
+
0
Огромное СПАСИБО, Андрей!
avatar

  9  dima0603 Автор Сообщений: 220

  • 17 марта 2021, 23:21
+
0
Не работает в тестере стратегий.
avatar

  3  Yuriy52 Сообщений: 2

  • 5 апреля 2021, 09:25

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий