Панель управления для торговли. ТРЕБУЕТСЯ ПОМОЩЬ MQL5 - страница 4

 
Александр Савенко:
Добрый день. Помогите не работает трейлинг стоп, до этого работал.

Этот код не мог работать - нельзя сравнивать котлеты и квадратное:

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      ulong OrderTicket=OrderGetTicket(i);
      if(OrderTicket>0 && PositionSelectByTicket(OrderTicket))
        {
         // Stop long позиции------------------------------------------
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            int cur_tr; //трейлинг
            double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            double newSl = ask - cur_tr*_Point;
            double positionSl = PositionGetDouble(POSITION_SL);
            double positionTP = PositionGetDouble(POSITION_TP);
            if(newSl > positionSl || positionSl == 0)
              {
               CTrade trade;
               trade.PositionModify(OrderTicket,newSl,positionTP);
              }
           }
        }
     }
 

Ошибка два:

зачем каждый раз создавать объект торгового класса CTrade? В области глобальных программных переменных создайте переменную m_trade. Не нужно на каждой итерации бессмысленно создавать и уничтожать объекты.

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      ulong OrderTicket=OrderGetTicket(i);
      if(OrderTicket>0 && PositionSelectByTicket(OrderTicket))
        {
         // Stop long позиции------------------------------------------
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            int cur_tr; //трейлинг
            double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            double newSl = ask - cur_tr*_Point;
            double positionSl = PositionGetDouble(POSITION_SL);
            double positionTP = PositionGetDouble(POSITION_TP);
            if(newSl > positionSl || positionSl == 0)
              {
               CTrade trade;
               trade.PositionModify(OrderTicket,newSl,positionTP);
              }
           }
        }
     }
 
Vladimir Karputov:

Ошибка два:

зачем каждый раз создавать объект торгового класса CTrade? В области глобальных программных переменных создайте переменную m_trade. Не нужно на каждой итерации бессмысленно создавать и уничтожать объекты.

спасибо

   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(Position.SelectByIndex(i))     // selects the position by index for further access to its properties
         if(Position.Symbol()==Ssymbol.Name())
            total++; 
//--- modifying stop-loss
   if(cur_tr>0)
      for(int i=PositionsTotal()-1;i>=0;i--)
         if(Position.SelectByIndex(i)) // selects the position by index for further access to its properties
            if(Position.Symbol()==Symbol())
              {
               if(Position.PositionType()==POSITION_TYPE_BUY && Position.Profit()>0)
                 {
                  if(Position.PriceCurrent()-Position.PriceOpen()>cur_tr*_Point)
                     if(Position.StopLoss()<Position.PriceCurrent()-cur_tr*_Point)
                        Trade.PositionModify(Position.Ticket(),
                                               Position.PriceCurrent()-cur_tr*_Point,
                                               Position.TakeProfit());
                 }


              }
Вопрос на панели управления поля для ввода данных (стоплосс, тейкпрофит, ...) сделаны через чартс, и когда вводиш данные дергается - сильно раздражает. Использую ON_EVENT(ON_END_EDIT,Trailing,TrailingEndEdit), как уменьшить или убрать дерганье. Или заменить id==CHARTEVENT_OBJECT_DRAG?
 
Александр Савенко:

спасибо

Справка: 

OrdersTotal

Возвращает количество действующих ордеров. 

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.


PositionsTotal

Возвращает количество открытых позиций.


То есть Вам нужен цикл по позициям.

   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            double price_current = m_position.PriceCurrent();
            double price_open    = m_position.PriceOpen();
            double stop_loss     = m_position.StopLoss();
            double take_profit   = m_position.TakeProfit();
            double ask           = m_symbol.Ask();
            double bid           = m_symbol.Bid();
            //---
            if(m_position.PositionType()==POSITION_TYPE_BUY)
	       {
		...
Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
 
Александр Савенко:

спасибо

Вопрос на панели управления поля для ввода данных (стоплосс, тейкпрофит, ...) сделаны через чартс, и когда вводиш данные дергается - сильно раздражает. Использую ON_EVENT(ON_END_EDIT,Trailing,TrailingEndEdit), как уменьшить или убрать дерганье. Или заменить id==CHARTEVENT_OBJECT_DRAG?

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

Документация по MQL5: Стандартная библиотека / Панели и диалоги / CEdit
Документация по MQL5: Стандартная библиотека / Панели и диалоги / CEdit
  • www.mql5.com
//|                                                 ControlsEdit.mq5 | //|                        Copyright 2017, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| defines                                                          |  INDENT_LEFT                         (11)      ...
 
Vladimir Karputov:

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


Спасибо - protected: - немного уменьшает дерганье и хоть видно что пишеш
 
Добрый день. Помогите панель работает минут 5-10 и выбивает 
Файлы:
Voron.mq5  98 kb
 
Александр Савенко:
Добрый день. Помогите панель работает минут 5-10 и выбивает 

Что пишется при этом во вкладках "Эксперты" и "Журнал"?

 
Vladimir Karputov:

Что пишется при этом во вкладках "Эксперты" и "Журнал"?

2020.09.04 20:27:45.003 Voron (EURUSD,M12) Stack overflow


 
Александр Савенко:

2020.09.04 20:27:45.003 Voron (EURUSD,M12) Stack overflow


Пока не исправите все предупреждения:


смотреть код бессмысленно. 

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