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

 
AlexProf #:

Только я не хочу каждый раз в принте писать цену Low или Close...У меня так получается два принта Print

Print идет один, одной строчкой, а цену (Low или Close) я назначаю когда инициализирую всю функцию PrintPrice в On Timer 

Без структуры это выглядело бы  так:


А к структуре не знаю как обратиться...

Не понял, что именно вы хотите получить.

 
Добрый день. Планирую купить утилиту и, возможно, эксперта. Предварительно пополнив свой счёт здесь, и оплачивая с него. Как лучше производить покупку, чтобы не терялись лишние активации? Из терминала? Или, возможно, из браузера с компа или со смартфона? Или это совершенно без разницы? Спасибо.
 
jacktt #:
Добрый день. Планирую купить утилиту и, возможно, эксперта. Предварительно пополнив свой счёт здесь, и оплачивая с него. Как лучше производить покупку, чтобы не терялись лишние активации? Из терминала? Или, возможно, из браузера с компа или со смартфона? Или это совершенно без разницы? Спасибо.

Совершенно без разницы…

Если покупать у мня.)))))))))))))))))))) Но я ничего не продаю…

 

Всем привет !

Подскажите как узнать по какой цене открыта позиция?

Что бы в дальнейшем установить СТОП и ПОРОФИТ


ulong tickett;
bool flagg = 1;

void OnTick()
  {
   if(PositionsTotal() == 0)
     {
      trade.Buy(1, NULL);
      int total = PositionsTotal();
      for(int i = 0; i < total; i++)
        {
         //--- получаем тикет очередной позиции, автоматически выбирая позицию для доступа к её свойствам
         tickett = PositionGetTicket(i);
         if(tickett == 0)
            continue;
        }
     }
   if(flagg == 1)
     {
      //--- количество знаков после запятой
      int    digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);

      //--- значение пункта
      double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

      //--- получим текущую цену Bid
      double price = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      //--- вычислим и нормализуем уровни SL и TP
      double SLos = NormalizeDouble(price - 100 * point, digits);
      double TPof=NormalizeDouble(price+100*point,digits);

//Нужшо узнать по какой цене открыт ордер???

      //--- все готово, делаем попытку модифицировать позицию на покупку
      trade.PositionModify(tickett,price-0.5,price+0.5);
      flagg = 0;
     }

  }
//+------------------------------------------------------------------+
 
Maxim121285 #:

Всем привет !

Подскажите как узнать по какой цене открыта позиция?

Что бы в дальнейшем установить СТОП и ПОРОФИТ


Научитесь пользоваться функцией OnTradeTransaction() или постарайтесь понять, что OrderSend() не возвращает тикет позиции и не дожидается исполнения. Таким образом получить тикет позиции, так как в вашем коде написано, невозможно. А на следующем тике, когда тикет будет доступен, то количество позиций не будет равно нулю.

 
Maxim121285 #:

Всем привет !

Подскажите как узнать по какой цене открыта позиция?

Что бы в дальнейшем установить СТОП и ПОРОФИТ


ulong tickett;
bool flagg = 1;

void OnTick()
  {
   if(PositionsTotal() == 0)
     {
      tickett = 0;
      if(trade.Buy(1, NULL))
        {
         //--- получаем тикет открытой позиции
         tickett = trade.ResultDeal();
        }
      if(tickett == 0)
         return;
     }
else
   if(flagg == 1)
     {
      //--- количество знаков после запятой
      int    digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);

      //--- значение пункта
      double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

      //--- получим текущую цену Bid
      double price = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      //--- вычислим и нормализуем уровни SL и TP
      double SLos = NormalizeDouble(price - 100 * point, digits);
      double TPof = NormalizeDouble(price + 100 * point, digits);

      //Нужшо узнать по какой цене открыт ордер???
      double PosPriceOpen = 0;
      if(PositionSelectByTicket(tickett))//выбирая позицию для доступа к её свойствам
         PosPriceOpen = PositionGetDouble(POSITION_PRICE_OPEN);

      //--- все готово, делаем попытку модифицировать позицию на покупку
      trade.PositionModify(tickett, price - 0.5, price + 0.5);
      flagg = 0;
     }
  }
//+------------------------------------------------------------------+

Можно как то так.

 
Alexey Viktorov #:

Научитесь пользоваться функцией OnTradeTransaction() или постарайтесь понять, что OrderSend() не возвращает тикет позиции и не дожидается исполнения. Таким образом получить тикет позиции, так как в вашем коде написано, невозможно. А на следующем тике, когда тикет будет доступен, то количество позиций не будет равно нулю.


Спасибо!

Я только начал изучать мир MQL5 :) .

Буду изучать эту функцию OnTradeTransaction() .

 
Aleksandr Slavskii #:

Можно как то так.

Спасибо!

Только почему-то  trade.ResultDeal(); не возращает тикет.

Получилось так. 

void OnStart()
  {
   ulong tickett = PositionGetTicket(0);
   double PosPriceOpen = 0;

   PositionSelectByTicket(PositionGetTicket(0));

   PosPriceOpen = PositionGetDouble(POSITION_PRICE_OPEN);

   Print("Price_Open = ", PosPriceOpen);
   Print("Ticket = ", tickett);
   
/* Результат
//---
2024.12.26 21:49:56.514 0 Тест (USDJPY,M5)      Price_Open = 1.43817
2024.12.26 21:49:56.514 0 Тест (USDJPY,M5)      Ticket = 51951440607
//---
*/
  }

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

Этот код подойдет для работы? Или есть более правельный подход? 

 
Maxim121285 #:

Спасибо!

Только почему-то  trade.ResultDeal(); не возращает тикет.

Получилось так. 

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

Этот код подойдет для работы? Или есть более правельный подход? 

Я не пользуюсь СБ и потому не приходит мне в голову такие простые, на первый взгляд решения. 

Александр почти прав. Только надо взять trade.ResultPrice();

И в функции OnTradeTransaction() тоже можно получить эту цену. Преимущество в том, что получить можно достаточно много свойств сделки. Например это сделка открытия позиции или закрытия. Закрылась позиция по стопу или тейку, а может руками или советником.

 
Maxim121285 #:

Спасибо!

Только почему-то  trade.ResultDeal(); не возращает тикет.

Получилось так. 

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

Этот код подойдет для работы? Или есть более правельный подход? 

Пройтись по всем позициям, и если она без стопа/тейка - установить.