Выявления диагонали движущего объекта по спирали, симметрии взаимно вложенных фаз и т.п. - страница 3

 

Вспомнил, в детстве нас учили цветы делать из проволоки и ниток


 
Renat Akhtyamov #:

симпатично

если не перерисовывает, то сигнал опережающий

Сигнал и смысл вообще непонятен)))) устроил бы мозговой штурм при понятной схеме, но когда больше чем +100500 машек и одного цвета - логика недосягаема
 

Подскажите пожалуйста что есть свежего для выставления ордеров. Чтобы предусмотреть различные проблемы которые могут возникнуть при исполнении команд по ордерам! 


Может подбросите интересный и толково оптимизированный вариант исполнения торговых запросов

 
Этими сетями можно много рыбы наловить
 

Может ли быть такое , когда обратные связи свидетельствуют о том, что успех по открытию позиции

2023.04.21 13:06:24.961 MAllTradeV_0(черновик) (EURUSD,M1) Метод PositionOpen() выполнен успешно. Код возврата=10008 (placed)0 595 1682055000 lot 0.05000000

2023.04.21 13:06:25.952 MAllTradeV_0(черновик) (EURUSD,M1) Метод OrderOpen() выполнен успешно. Код возврата=10008 (placed)0 595 1682055000 lot 0.01000000

2023.04.21 13:18:03.075 MAllTradeV_0(черновик) (EURUSD,M1) Метод PositionOpen() выполнен успешно. Код возврата=10008 (placed)0 595 1682055000 lot 0.04000000


А на деле нет одного.


в истории не закрывалась.


использую стандартный класс для торговли

  if(!m_trade.PositionOpen(position_buff[i].symbol,order_type,lot,position_buff[i].price,0,0,position_buff[i].comment))
         //--- сообщим о неудаче
         Print("Метод PositionOpen() потерпел неудачу. Код возврата=",m_trade.ResultRetcode(),
               ". Описание кода: ",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(lot));
      else
        {
         position_buff[i].timeOp= TimeCurrent();     // Фиксировать время
         Print("Метод PositionOpen() выполнен успешно. Код возврата=",m_trade.ResultRetcode(),
               " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(lot));//
       //  Sleep(1000);
        }


Решение


//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction&    trans,     // структура торговой транзакции
                        const MqlTradeRequest&        request,   // структура запроса
                        const MqlTradeResult&         result)    // структура ответа
  {
//--- результат выполнения торгового запроса
   ulong            lastOrderID= trans.order; 
   double           lastLot= trans.volume;
//--- тип транзакции
   ENUM_TRADE_TRANSACTION_TYPE  trans_type=trans.type;
   switch(trans.type)
     {
      case  TRADE_TRANSACTION_POSITION:   // изменение позиции
         break;
      //---
      case TRADE_TRANSACTION_ORDER_ADD:    // добавление нового действующего ордера
         fix_position_open(lastOrderID,lastLot);
         break;
     }
//---
  }
//--- Фиксируем если позиция открыта --------------------------------+
void fix_position_open(ulong lastOrderID, double lot)
  {
//--- Фиксируем если позиция открыта
   for(int i=0; i<ArraySize(position_buff); i++)
      if(position_buff[i].timeOp==1)
        {
         //bool fl= position_buff[i].pending_order==0 ? match_open_position(lastOrderID) : match_open_orders(lastOrderID);
         if(!match_open_position(lastOrderID))
           {
            position_buff[i].timeOp= 0;     // Фиксировать время
            Print("Метод OnTrade() по рынку не выполнен. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
         else
           {
            position_buff[i].timeOp= TimeCurrent();
            position_buff[i].ticket= lastOrderID;
            position_buff[i].lot= lot;
            Print("Метод OnTrade() по рынку выполнен успешно. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
        }
  }

//--- Соответствие открытой позици ---------------------------------+
bool match_open_position(long lastOrderID)
  {
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Identifier()==lastOrderID)
            return(true);
//---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(m_order.SelectByIndex(i))
         if(m_order.Ticket()==lastOrderID)
            return(true);

   return(false);
  }