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

 
Подскажите как можно удалить с форума собственную тему?
 
Сергей Таболин:
Подскажите как можно удалить с форума собственную тему?

Никак. Что за тема?

 
Artyom Trishkin:

Никак. Что за тема?

https://www.mql5.com/ru/forum/348294

MQ5::Вопрос по свечному индикатору.
MQ5::Вопрос по свечному индикатору.
  • 2020.08.04
  • www.mql5.com
Привет всем! Пока меня окончательно и пожизненно не забанили, хочу успеть задать вопрос по индикатору...
 

Спасибо )))

 

Добрый день! Пытаюсь заставить функцию

//-------------------------------------------------------------------------------
//                      Функция модификации позиции,безуыток, трейлинг-стоп 
//-------------------------------------------------------------------------------+ 
                  
bool Modi_Traili(int select,int pool=MODE_TRADES,ulong magic=-1) 
{ 
//   double Profit_On =OrderProfit();                  // Профит открытой позиции             
   double Price_Open =0;                         // Цена открытой позиции
   string sym =Symbol(),er;
   int i,cnt=0, k=OrdersTotal(),op=-1,mn=-1;
   double Market_Pi=0, oop=0, point=0, pp=0;
   bool loop = false;
//----------------------------------
     if (sym=="") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_TICKET, MODE_TRADES)) {
      if ((OrderSymbol()==sym || sym=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY && (mn<0 || OrderMagicNumber()==mn)){             
          int  Ticket=OrderTicket(); 
            Price_Open = OrderOpenPrice();                                           
            Market_Pi=MarketInfo(OrderSymbol(), MODE_ASK);
            point=MarketInfo(OrderSymbol(), MODE_POINT);
            if (point==0) if (StringFind(sym, "JPY")<0) point=0.0001; else point=0.01;
            if (point==0) if (StringFind(sym, "XAU")<0) point=0.0001; else point=0.001;
             double Sorri=MathRound(MathAbs(Market_Pi-Price_Open)/point);   
              Print("Ticket==",Ticket,"Sorri = ",Sorri,"Price_Open = ",Price_Open,"mi = ",Market_Pi);
             if(Sorri >Deta && OrderProfit()>0)
            {
//            Print("Ticket==",Ticket,"Sorri = ",Sorri,"Price_Open = ",Price_Open,"mi = ",Market_Pi);
 //--------------------------------------------------------------------------------------------------
     while (!loop)                              // Цикл модификации  
     {     
     double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
     double SL=NormalizeDouble(Ask+(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
           Alert ("М-  -  -я ",Ticket,". Ждём ответ..");
          bool Ans=OrderModify(Ticket,Price_Open,SL,TP,0);    //Модифи его!
//--------------------------------------------------------------------------------
   if (Ans==true)                      // Получилось :)
              {
               Alert ("Ордер ",Ticket,TP," модифицирован:)");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --------------------
            int Error=GetLastError();           // Не получилось :(
            switch(Error)                       // Преодолимые ошибки
              {
               case 0  : loop = true; break; 
      
       case 4  : er=("Торговый сервер занят");
       case 135: er=("Цена изменилась");
       case 137: er=("Брокер занят");
       case 138: er=("Новые цены");
       case 146: er=("Подсистема торговли занята. Пробуем ещё..");
        Message(er);
         Sleep(2);                         // Простое решение
        RefreshRates();                     // Обновим данные
          continue;
       case 136: er=("Нет цен");
       Message(er);
          while(RefreshRates()==false)        // До нового тика
           Sleep(5);                        // Задержка в цикле
           cnt++; 
           continue;
       
        default:er=StringFormat("Ошибка: %d",Error);             // Другие варианты
        Message(er);
        loop = true;                  // Выход из while
        break;                             // Выход из switch
          }
//--------------------------------------------------------------------------------          
        } // Окончание while
       }
      }   // Окончание if
    
        if (OrderType()==OP_SELL &&(mn<0 || OrderMagicNumber()==mn))
        {
            int Ticket=OrderTicket(); 
            Price_Open = OrderOpenPrice(); 
            Market_Pi=MarketInfo(OrderSymbol(), MODE_BID);
            point=MarketInfo(OrderSymbol(), MODE_POINT);
            if (point==0) if (StringFind(sym, "JPY")<0) point=0.0001; else point=0.01;
            if (point==0) if (StringFind(sym, "XAU")<0) point=0.0001; else point=0.001;
              double Sorri=MathRound(MathAbs(Price_Open-Market_Pi)/point);    //+MarketInfo(OrderSymbol(), MODE_SPREAD);
             if(Sorri >Deta && OrderProfit()>0)
            {
            Print("So = ",Sorri,"Price_Open = ",Price_Open,"Mi = ",Market_Pi);
            Comment(Ticket);
            while (!loop)                              // Цикл модификации  
     {     
     double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
     double SL=NormalizeDouble(Bid-(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
           Alert ("Мод------я ",Ticket,". Ждём ответ..");
           bool Ans=OrderModify(Ticket,Price_Open,SL,TP,0);    //Модифи его!
//--------------------------------------------------------------------------------
   if (Ans==true)                      // Получилось :)
              {
               Alert ("Ордер ",Ticket,TP," модифицирован:)");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --------------------
             int Error=GetLastError();           // Не получилось :(
            switch(Error)                       // Преодолимые ошибки
              {
               case 0  : loop = true; break; 
      
       case 4  : er=("Торговый сервер занят");
       case 135: er=("Цена изменилась");
       case 137: er=("Брокер занят");
       case 138: er=("Новые цены");
       case 146: er=("Подсистема торговли занята. Пробуем ещё..");
        Message(er);
         Sleep(2);                         // Простое решение
        RefreshRates();                     // Обновим данные
          continue;
       case 136: er=("Нет цен");
       Message(er);
          while(RefreshRates()==false)        // До нового тика
           Sleep(5);                        // Задержка в цикле
           cnt++; 
           continue;
       
        default:er=StringFormat("Ошибка: %d",Error);             // Другие варианты
        Message(er);
        loop = true;                  // Выход из while
        break;                             // Выход из switc}
        }
                      
            }
          }//
       }
      }
      }
     } //--------------------------Выход из цикла for
  
  return(true);
}

переносить стоп в безубыток, если текущая цена превысила цену открытия на 

Deta 

пунктов. Получаю ошибку 4051. Все танкостроение в файле(если понадобиться).Используется индикатор WMA. Не мой, надеюсь не ломаный.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
Файлы:
v5mz03.mq4  52 kb
WMA.mq4  10 kb
 
Galim_V:

Добрый день! Пытаюсь заставить функцию

переносить стоп в безубыток, если текущая цена превысила цену открытия на 

пунктов. Получаю ошибку 4051. Все танкостроение в файле(если понадобиться).Используется индикатор WMA. Не мой, надеюсь не ломаный.

Недопустимый параметр функции. На вскидку у вас нет проверки на минимальные стоп-приказы. Добавьте, для маркета это обязательная проверка.

......

double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
double SL=NormalizeDouble(Bid-(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
TP=New_Stop(TP);
SL=New_Stop(SL);
......
double New_Stop(double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL);// Миним. дистанция
   if(Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                        // Установим допуст.
      Alert("Увеличена дистанция стоп-приказа или цены открытия отложенных ордеров.");
     }
   return(Parametr);                            // Возврат значения
  }
 
Valeriy Yastremskiy:

Недопустимый параметр функции. На вскидку у вас нет проверки на минимальные стоп-приказы. Добавьте, для маркета это обязательная проверка.

Спасибо! Посмотрю.

 

как в индикаторе работающем на M1 получать данные и с D1, если индикатор основан на формулах и нет вызовов штатных индикаторов типа  =iMA(Symbol(),Period(),....

откуда брать расчет?

 
Всем доброго времени суток. Столкнулся на демо счете (хорошо не на реале))) с такой ситуацией. Несколько позиций были закрыты советником по достижению определенного уровня суммарной прибыли, якобы положительной, при этом все позиции сидели в хорошем минусе, событие произошло в 2-50 по серверу (на перенос позиций не похоже). Советник (мной составлен) рассчитывает суммарную прибыль по всем открытым позициям и сравнивает ее с заданным значением, то есть картинка из баров в окне как бы не при чем, хотя на ней наблюдается небольшое движение в сторону, обеспечивающую прибыль. Советник работает по таймеру, было выставлено 100мс. Идею с брокером не исключаю, так как аналогичный советник у другого брокера, с такими же настройками, но работающий по тикам цены спокойно "устоял" в минусе. Запас по счету был, советник сообщил о закрытии именно из блока достижения прибыли.  Может у кого есть мысли, что могло пойти не так.
 
Evgeny Vlasov:
Всем доброго времени суток. Столкнулся на демо счете (хорошо не на реале))) с такой ситуацией. Несколько позиций были закрыты советником по достижению определенного уровня суммарной прибыли, якобы положительной, при этом все позиции сидели в хорошем минусе, событие произошло в 2-50 по серверу (на перенос позиций не похоже). Советник (мной составлен) рассчитывает суммарную прибыль по всем открытым позициям и сравнивает ее с заданным значением, то есть картинка из баров в окне как бы не при чем, хотя на ней наблюдается небольшое движение в сторону, обеспечивающую прибыль. Советник работает по таймеру, было выставлено 100мс. Идею с брокером не исключаю, так как аналогичный советник у другого брокера, с такими же настройками, но работающий по тикам цены спокойно "устоял" в минусе. Запас по счету был, советник сообщил о закрытии именно из блока достижения прибыли.  Может у кого есть мысли, что могло пойти не так.

Это Вам в ветку про телепатов)))) Где-то тут была)

А по сабжу ... ХЗ. Кода нет, типа рынка нет, ничего нет... Одозначно - к телепатам)))

Причина обращения: