Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2272

 
Где МТ5 хранит профили? В папке Profiles только два профиля из пяти
 
Александр #:
Где МТ5 хранит профили? В папке Profiles только два профиля из пяти

В левом верхнем углу своего торгового терминала откройте Файл -> Открыть каталог данных -> MQL5 -> Profiles -> Charts.

С уважением, Владимир.

 
DanilaMactep #:
1 ошибка не страшно, а с 130 как быть?

DanilaMactep #:
Прикрутил код- запускаю тест- ошибка 1 так и присутствует, а 130 пропала

Вы писали,что после моих изменений 130 уже нет.

 
Galim_V #:

Здесь только одна функция

Которую следует использовать в качестве флага перед вашей

Попробовал использовать функцию OrderModifyCheck. Только добавил к  её названию f__OrderModifyCheck

код функции скопировал и вставил к себе- код вот так выглядит.

//----ФУНКЦИЯ  ЧЕК МОДИФИКАЦИИ НАЧАЛО---------------------------------------------------------------------------------------------+
  bool f__OrderModifyCheck(int ticket,double price,double sl,double tp)
  {
//--- выберем ордер по тикету
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      //--- размер пункта и имя символа, по которому выставлен отложенный ордер
      string symbol=OrderSymbol();
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
      //--- проверим - есть ли изменения в цене открытия
      bool PriceOpenChanged=true;
      int type=OrderType();
      if(!(type==OP_BUY || type==OP_SELL))
        {
         PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
        }
      //--- проверим - есть ли изменения в уровне StopLoss
      bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
      //--- проверим - есть ли изменения в уровне Takeprofit
      bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);
      //--- если есть какие-то изменения в уровнях
      if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
         return(true);  // ордер можно модифицировать      
      //--- изменений в уровнях открытия, StopLoss и Takeprofit нет
      else
      //--- сообщим об ошибке
         PrintFormat("Ордер #%d уже имеет уровни Open=%.5f SL=%.5f TP=%.5f",
                     ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
     }
//--- дошли до конца, изменений для ордера нет
   return(false);       // нет смысла модифицировать 
  }
  //------ФУНКЦИЯ ЧЕК МОДИФИКАЦИИ КОНЕЦ-------------------------------------------------------------------------------------------+

Далее в функции трала перед модификацией ордера вызываю функцию f__OrderModifyCheck и в итоге функция трала выглядит вот так

//-----------ТРАЛ ПО ПАРАБОЛИК НАЧАЛО--------------------------------------------------------------------------------------+
  
  int tral= Tral;
  double sar= iCustom(Symbol(), Period_for_work_tral_parabolik, "Parabolic", Step_tral_paranolik, Max_tral_parabolik, 1);
  for(int pos= 0; pos<OrdersTotal(); pos++)
  {//-ФОР НАЧАЛО------------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol() == _Symbol)
  {
  if(OrderType() == OP_SELL)
  {
if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()< sar)
 {
if((OrderStopLoss()> sar || OrderStopLoss()== 0) && sar> Ask)
 {
 if(f__OrderModifyCheck(OrderTicket(),OrderOpenPrice(),sar,0))
 {
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sar, Digits), OrderTakeProfit(),0, clrBlack)) 
{
PrintFormat("ORDER SELL MODIFY " , GetLastError());
}
 
 }
 }
  
  }
  }
  // buy
   if(OrderType() == OP_BUY)
  {
if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()> sar)
 {
if((OrderStopLoss()< sar || OrderStopLoss()== 0) && sar< Bid)
 {
  if(f__OrderModifyCheck(OrderTicket(),OrderOpenPrice(),sar,0))

{
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sar, Digits), OrderTakeProfit(),0, clrBlack)) 
{
PrintFormat("ORDER BUY MODIFY " , GetLastError());
}
}
 
 }
 }
  
  }
  }
  
  }//-ФОР КОНЕЦ------------------------------------------------------------------------------------------------+
  if(GetLastError() == 141){Alert("ОШИБКА ", GetLastError()); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА
  //--ТРАЛ ПО ПАРАБОЛИК КОНЕЦ-----------------------------------------------------------------------------------------------+

То есть чтобы попасть к строке модификаци ордера функция f__OrderModifyCheck должна вернуть тру- значит можно модифицировать. Код завёлся, но при тесте ошибка 1 так и вылетает... Что не так делаю-то?(((( И доп вопрос- если советник выдаёт ошибку 1 то автоторговлю брокер отрубит т.к сервер долбится или нет?

 
DanilaMactep #:

Попробовал использовать функцию OrderModifyCheck. Только добавил к  её названию f__OrderModifyCheck

код функции скопировал и вставил к себе- код вот так выглядит.

Далее в функции трала перед модификацией ордера вызываю функцию f__OrderModifyCheck и в итоге функция трала выглядит вот так

То есть чтобы попасть к строке модификаци ордера функция f__OrderModifyCheck должна вернуть тру- значит можно модифицировать. Код завёлся, но при тесте ошибка 1 так и вылетает... Что не так делаю-то?(((( И доп вопрос- если советник выдаёт ошибку 1 то автоторговлю брокер отрубит т.к сервер долбится или нет?

Сервер не долбится.
 
Tretyakov Rostyslav #:
Сервер не долбится.
Это хорошо конечно, но почему же ошибка 1 появляется даже при том что я прикрутил функцию проверки на возможносьт изменения ордера?
 
DanilaMactep #:
Это хорошо конечно, но почему же ошибка 1 появляется даже при том что я прикрутил функцию проверки на возможносьт изменения ордера?

Попробуйте так

  {//--ФОР НАЧАЛО-----------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol()== _Symbol)
  {
  if(OrderType()== OP_SELL)
  {
  if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()< sar)
  {
  if((OrderStopLoss()> sar || OrderStopLoss()== 0) && sar> Ask)
  {
  bool res_s=OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack); 
  if(!res_s) 
   PrintFormat("ORDER SELL MODIFY ERROR", GetLastError());
  else 
   PrintFormat("ORDER SELL MODIFY TRUE");
  }
  }
  }
  // BUY
  if(OrderType()== OP_BUY)
  {
  if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()> sar)
  {
  if((OrderStopLoss()< sar || OrderStopLoss()== 0) && sar< Bid)
  {
  bool res_b=OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack);
  if(!res_b) 
   PrintFormat("ORDER BUY MODIFY ERROR", GetLastError());
  else 
   PrintFormat("ORDER BUY MODIFY TRUE");
  }
  }
  }
  }
  }//---ФОР КОНЕЦ--
 
DanilaMactep #:
Это хорошо конечно, но почему же ошибка 1 появляется даже при том что я прикрутил функцию проверки на возможносьт изменения ордера?

Ошибки 1 на самом деле нет. 

if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sar, Digits), OrderTakeProfit(),0, clrBlack)) 

Ну или

//+------------------------------------------------------------------+
//|                                                        Форум.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
input int Tral=200;
input double InpSARStep=0.02;    // Step
input double InpSARMaximum=0.2;  // Maximum
int cou=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  int ticet=0;
  cou++;
  if(cou==7||cou==170)
  ticet=OrderSend(Symbol(),OP_SELL,0.01,Bid,80,0,0," ",0,0);

  grabli();

  }
//+------------------------------------------------------------------+
//-----------ТРАЛ ПО ПАРАБОЛИК НАЧАЛО--------------------------------------------------------------------------------------+
void grabli()
{
int tral= Tral;
double sar= iCustom(Symbol(),_Period,"Parabolic", InpSARStep, InpSARMaximum, 1);
for(int pos= 0; pos<OrdersTotal(); pos++)
  {
//-ФОР НАЧАЛО------------------------------------------------------------------------------------------------+
   if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
      if(OrderSymbol() == _Symbol)
        {
         if(OrderType() == OP_SELL)
           {
            if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()< sar)
              {
               if((OrderStopLoss()> sar || OrderStopLoss()== 0) && sar> Ask)
                 {
                  if(f__OrderModifyCheck(OrderTicket(),OrderOpenPrice(),sar,0))
                    {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sar, Digits), OrderTakeProfit(),0, clrBlack))
                       {
                        Print("ORDER SELL MODIFY ", GetLastError());
                       }

                    }
                 }

              }
           }
         // buy
         if(OrderType() == OP_BUY)
           {
            if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()> sar)
              {
               if((OrderStopLoss()< sar || OrderStopLoss()== 0) && sar< Bid)
                 {
                  if(f__OrderModifyCheck(OrderTicket(),OrderOpenPrice(),sar,0))

                    {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sar, Digits), OrderTakeProfit(),0, clrBlack))
                       {
                        Print("ORDER BUY MODIFY ", GetLastError());
                       }
                    }

                 }
              }

           }
        }

  }//-ФОР КОНЕЦ-------------------------------------------------------------
  }
//+------------------------------------------------------------------+
  bool f__OrderModifyCheck(int ticket,double price,double sl,double tp)
  {
//--- выберем ордер по тикету
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      //--- размер пункта и имя символа, по которому выставлен отложенный ордер
      string symbol=OrderSymbol();
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
      //--- проверим - есть ли изменения в цене открытия
      bool PriceOpenChanged=true;
      int type=OrderType();
      if(!(type==OP_BUY || type==OP_SELL))
        {
         PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
        }
      //--- проверим - есть ли изменения в уровне StopLoss
      bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
      //--- проверим - есть ли изменения в уровне Takeprofit
      bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);
      //--- если есть какие-то изменения в уровнях
      if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
         return(true);  // ордер можно модифицировать      
      //--- изменений в уровнях открытия, StopLoss и Takeprofit нет
      else
      //--- сообщим об ошибке
         PrintFormat("Ордер #%d уже имеет уровни Open=%.5f SL=%.5f TP=%.5f",
                     ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
     }
//--- дошли до конца, изменений для ордера нет
   return(false);       // нет смысла модифицировать 
  }
  //------ФУНКЦИЯ ЧЕК МОДИФИКАЦИИ КОНЕЦ------------------------------------------------------------

Ничего, кроме параболика и условия для принта в вашей конструции не менял

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.09.18
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Valeriy Yastremskiy, 2023.09.15 11:47

Просто вопрос возник при просмотре доков, сколько цветов можно прописать в этом типе рисования?
#property indicator_type1   DRAW_COLOR_CANDLES 
#property indicator_color1  clrLightSteelBlue,clrRed,clrBlue // в справке не нашел сколько? в примерах еще есть 8 цветов.

 

Коллеги предварительно спс за помощь на 2253,2254 стр. Это МТ5.

Надо с текущего года цены открытия баров изобразить со смещением на 1 год - т.е. 1.01.2023 - чтобы было на 01.01.2022 года.

Син линия - это индикатор за 2022 год. Надо чтобы текущий год отображался (цены открытия) на этом же периоде 2022 года.

в копилот (вместо гугла) запрос делал - он вернул:

код индикатора с отрисовкой индикатора в отдельном окне отрисовка индикатора в виде линии. Выполняет расчет цен открытий дневных свечей на дневном таймфрейме по ценам открытия с 01.01.2023 года по 19.09.2023 года.  Отображает со смещением в прошлое на 1 год  на дневном  таймфрейме с 01.01.2022 года по 19.09.2022 года. 

//indicator code with drawing of the indicator in a separate window; drawing of the indicator as a line. Calculates the opening prices of daily candles on the daily timeframe based on opening prices from 01/01/2023 to 09/19/2023. Displays with a backward shift of 1 year on the daily timeframe from 01/01/2022 to 09/19/2022.

#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2

//---- input parameters
extern int Period=20;
//---- buffers
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   //---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Buffer);
   //----
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
   datetime time_shift;
   //----
   if(rates_total<Period)
      return(0);
   //---- initial zero
   if(prev_calculated==0)
      ArrayInitialize(Buffer,0.0);
   //---- last counted bar will be recounted
   limit=rates_total-Period;
   //----
   for(i=prev_calculated;i<limit;i++)
     {
      time_shift=TimeShift(time[i],Period*PeriodSeconds());
      if(time[i]>=time_shift)
        {
         Buffer[i]=open[i];
        }
     }
   //----
   return(rates_total);
  }
//+------------------------------------------------------------------+


короче - нужно смещение данных цен открытий на один год - чтобы отображалось с 2022 года.

Надо чтобы цены открытий баров текущего года  - отображались где син линия -  т.е  на периоде с 01.01.2022 года. Чтобы было отображение со смещением на 1 год в прошлое.

вот участок кода индикатора который синюю рисует:

 for(i=prev_calculated;i<rates_total-1;i++)     
      {
         //---- Инициализация ячейки индикаторного буфера полученным значением 
     //  if(YearMQL4() == 2023) ExtLineBuffer[i] = iClose(_Symbol,PERIOD_D1,i);  
     ExtLineBuffer[i] = EMPTY_VALUE;
     ExtLineBuffer_прошлый_позапрошлый[i] = EMPTY_VALUE;
     
       if(time[i]>=D'2022.01.01' && time[i]<=D'2022.12.31')
         ExtLineBuffer_прошлый[i] = iOpen(_Symbol,PERIOD_D1,i);           
       else    ExtLineBuffer_прошлый[i] = EMPTY_VALUE;
      } 
    
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Используйте функцию TimeToStruct.
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Используйте функцию TimeToStruct.
  • 2023.08.28
  • www.mql5.com
Нужен цикл для суммирования цены открытия нахождения средней цены по годам например по 3-м или 5-ти годам. По сути нужен оптимальный вариант цикла перебора дней по годам для суммирования их цен открытий - для нахождения средней цены открытия или закрытия дня по например 3 или 5 годам - для примера
Причина обращения: