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

 
Добрый день!
Прошу Вас помочь разобраться - почему не работает функция для расчета и объединения Тейк профита всех позиций в Мартине.
void LinePribl() // название функции c переменной для закрытия позиций
  {
   double iSwap = 0; // создаем переменные для увеличения свопа с нулевым значением
   double iAverage = 0; // создаем переменные для увеличения начальной цены с нулевым значением
   double ii_Lt = 0; // создаем переменные для увеличения объема лота с нулевым значением
   double iPrib = 0; // создаем переменную для расчета линии по Мартину с нулевым значением

   for(int qt = PositionsTotal()-1; qt >= 0; qt--) // то объявляем цикл, где кол-во позиций, условие выполнения цыкла и счетчик циклов
     {
      if(PositionGetSymbol(qt) ==_Symbol && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC) == MagikMrtn) // выбираем позицию для дальнейшего доступа к ее свойствам
        {
         iSwap += c_posit.Swap(); // суммируем накопленный своп
         ii_Lt += c_posit.Volume(); // суммируем накопленный объем лота
         iAverage += c_posit.PriceOpen() * c_posit.Volume(); // суммируем - цену позиции умноженную на объем лота

         iPrib = NormalizeDouble((iAverage + ((Mart - iSwap) / TickVAL) * _Point) / ii_Lt, _Digits); // рассчитываем установку Тейк Профита
        }

      if(c_posit.PositionType() == POSITION_TYPE_BUY && c_posit.TakeProfit(() != 0 && M_Tick.bid - c_posit.TakeProfit() > iPrib * _Point)
 // если позиция в Buy и текущий Тейк Профит не равен нулю и текущая цена по bid минус текущий Тейк Профит будет больше рассчитанному Тейк Профиту умноженному на размер пункта
         c_trade.PositionModify(c_posit.Ticket(), M_Tick.bid + iPrib * _Point, c_posit.TakeProfit());
 // то модифицируем текущий Тейк Профит в Buy - к текущей цене по bid прибавляем рассчитанный Тейк Профит умноженный на размер пункта и устанавливает новое значение Тейк Профит  в Buy

          if(PositionGetSymbol(qt) ==_Symbol && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetInteger(POSITION_MAGIC) == MagikMrtn) // выбираем позицию для дальнейшего доступа к ее свойствам
        {
         iSwap += c_posit.Swap(); // суммируем накопленный своп
         iAverage += c_posit.PriceOpen() * c_posit.Volume(); // суммируем - цену позиции умноженную на объем лота
         ii_Lt += c_posit.Volume(); // суммируем накопленный объем лота
         iPrib = NormalizeDouble((iAverage - ((Mart - iSwap) / TickVAL) * _Point) / ii_Lt, _Digits); // рассчитываем установку Тейк Профита
        }
      if(c_posit.PositionType() == POSITION_TYPE_SELL && c_posit.TakeProfit() != 0 && c_posit.TakeProfit() - M_Tick.ask > iPrib * _Point)
 // если тип позиции в Sell и Тейк Профит не равен нулю и Тейк Профит минус текущая цена по ask больше рассчитанному Тейк Профиту умноженному на размер пункта
         c_trade.PositionModify(c_posit.Ticket(), M_Tick.ask - iPrib * _Point, c_posit.TakeProfit());
 // то модифицируем Тейк Профит в Srll - от текущей цене по ask отнимаем рассчитанный Тейк Профит и устанавливает новое значение Тейк Профит в Sell
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и...
 

Добрый день,

Я написал сервис который генерирует кастомный график и с какой-то периодичностью добавляет на него тики. Загрузил на mql5 market и при скачивание он загружается в папку /experts/, а не /services/. Я так понимаю я использую какие-то запрещенные функции и компилятор видя их, меняет тип кода? Как можно это исправить?

Из кода удалил все лишнее, оставил только функции которые вызываются.


#property service

#property copyright "###"

#property link      "###"

#property version   "###"

#property icon "###.ico"


void OnStart()

  {

   Alert();


   while(!IsStopped())

     {




      StringTrimLeft();

      StringTrimRight();

      StringSubstr()

      StringGetCharacter();

      StringToInteger();

      

      ArrayResize(filteredRates, count);


      SymbolSelect(sourceSymbol, false);

      SymbolInfoString(sourceSymbol, SYMBOL_DESCRIPTION)

      SymbolExist(sourceSymbol, is_custom)

      SymbolInfoString(customSymbolName, SYMBOL_DESCRIPTION);

      SymbolInfoTick();


      SymbolSelect(customSymbolName, true);


      SeriesInfoInteger(customSymbolName, PERIOD_M1, SERIES_LASTBAR_DATE);


      CopyTicksRange();

      CustomTicksAdd();

      CopyRates(sourceSymbol, PERIOD_M1, from, to, rates);


      ChartFirst();

      ChartSymbol(currChart)

      ChartNext(currChart);

      ChartOpen(customSymbolName, PERIOD_M5);

      Print();


      CustomRatesDelete();

      CustomRatesDelete();

      CustomTicksDelete();

      CustomSymbolCreate()

      CustomSymbolSetString(SYMBOL_DESCRIPTION,);

      CustomRatesReplace();

      CustomSymbolSetString();


      SymbolInfoInteger(SYMBOL_TIME);

      TimeTradeServer();

      Sleep(2000);


     }


  }

 
Как восстановить пароли? Я торгую, а пароли утеряны. Я могу зайти и торговать, но пароли не сохранены. Помогите, пожалуйста.
 
Nail Zakirov #:
Как восстановить пароли? Я торгую, а пароли утеряны. Я могу зайти и торговать, но пароли не сохранены. Помогите, пожалуйста.

в личном кабинете в вашем DC есть в настройках  "установить/поменять пароль торгового счёта"

если потеряли пароли личного кабинета, то звонить их тех.поддержке. 

 
Maxim Kuznetsov #:

в личном кабинете в вашем DC есть в настройках  "установить/поменять пароль торгового счёта"

если потеряли пароли личного кабинета, то звонить их тех.поддержке. 

Чтоб поменять, нужен старый. Куда звонить на Марс, в Америку? Неужели нет почты? Статистика запоролась. Как так, нет почты?
 
Nail Zakirov #:
Чтоб поменять, нужен старый. Куда звонить на Марс, в Америку? Неужели нет почты? Статистика запоролась. Как так, нет почты?

обращайтесь в ваш DC, где у вас счёт открыт

мы то как поможем ? 

 
Sprut 185 #:
Добрый день!
Прошу Вас помочь разобраться - почему не работает функция для расчета и объединения Тейк профита всех позиций в Мартине.

Если я правильно понял , здесь нужна разность:

iAverage += (c_posit.PriceClose() - c_posit.PriceOpen()) * c_posit.Volume(); // суммируем - цену позиции умноженную на объем лота BUY
 
Sprut 185 #:
Добрый день!
Прошу Вас помочь разобраться - почему не работает функция для расчета и объединения Тейк профита всех позиций в Мартине.

Попробуй так

// Предполагается, что где-то выше объявлены:
// CPositionInfo c_posit;
// CTrade c_trade;
// int MagikMrtn;
// double Mart; // Желаемая прибыль в деньгах
// double TickVAL; // Стоимость тика (можно получать через SymbolInfoDouble)

void LinePribl()
{
   // Переменные для BUY
   double iSwapBuy = 0, iAverageBuy = 0, ii_LtBuy = 0;
   // Переменные для SELL
   double iSwapSell = 0, iAverageSell = 0, ii_LtSell = 0;
   
   double iPribBuy = 0, iPribSell = 0;
   
   int total = PositionsTotal();
   
   // ===== ПЕРВЫЙ ПРОХОД: Накопление данных =====
   for(int qt = total - 1; qt >= 0; qt--)
   {
      // ИСПРАВЛЕНО: Явно выбираем позицию для объекта c_posit
      if(!c_posit.SelectByIndex(qt)) continue;
      
      // Проверяем символ и магик
      if(c_posit.Symbol() != _Symbol || c_posit.Magic() != MagikMrtn) continue;
      
      if(c_posit.PositionType() == POSITION_TYPE_BUY)
      {
         iSwapBuy += c_posit.Swap();
         ii_LtBuy += c_posit.Volume();
         iAverageBuy += c_posit.PriceOpen() * c_posit.Volume();
      }
      else if(c_posit.PositionType() == POSITION_TYPE_SELL)
      {
         iSwapSell += c_posit.Swap();
         ii_LtSell += c_posit.Volume();
         iAverageSell += c_posit.PriceOpen() * c_posit.Volume();
      }
   }
   
   // ===== РАСЧЕТ ОБЩИХ ТЕЙК ПРОФИТОВ (после накопления) =====
   // ИСПРАВЛЕНО: iPrib - это ЦЕНА, а не расстояние в пунктах
   if(ii_LtBuy > 0)
   {
      iPribBuy = NormalizeDouble((iAverageBuy + ((Mart - iSwapBuy) / TickVAL) * _Point) / ii_LtBuy, _Digits);
   }
   
   if(ii_LtSell > 0)
   {
      iPribSell = NormalizeDouble((iAverageSell - ((Mart - iSwapSell) / TickVAL) * _Point) / ii_LtSell, _Digits);
   }
   
   // Получаем текущие цены
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   
   // ===== ВТОРОЙ ПРОХОД: Модификация Тейк Профитов =====
   for(int qt = total - 1; qt >= 0; qt--)
   {
      if(!c_posit.SelectByIndex(qt)) continue;
      if(c_posit.Symbol() != _Symbol || c_posit.Magic() != MagikMrtn) continue;
      
      if(c_posit.PositionType() == POSITION_TYPE_BUY && ii_LtBuy > 0)
      {
         double currentTP = c_posit.TakeProfit();
         // ИСПРАВЛЕНО: Сравниваем цены напрямую, а не через _Point
         // Модифицируем, если Тейк Профит не установлен или отличается от рассчитанного
         if(currentTP == 0 || MathAbs(currentTP - iPribBuy) > _Point)
         {
            // ИСПРАВЛЕНО: Правильные параметры: (тикет, StopLoss, TakeProfit)
            // StopLoss оставляем старый, TakeProfit устанавливаем новый
            c_trade.PositionModify(c_posit.Ticket(), c_posit.StopLoss(), iPribBuy);
         }
      }
      else if(c_posit.PositionType() == POSITION_TYPE_SELL && ii_LtSell > 0)
      {
         double currentTP = c_posit.TakeProfit();
         if(currentTP == 0 || MathAbs(currentTP - iPribSell) > _Point)
         {
            c_trade.PositionModify(c_posit.Ticket(), c_posit.StopLoss(), iPribSell);
         }
      }
   }
}