주문을 찾는 작업 - 페이지 3

 
Игорь Герасько :

다양한 "그리드"를 구현할 때 다음 구조를 생각해 냈습니다.

구조는 Magic Number 값을 기반으로 하는 각각의 새로운 틱에 채워집니다(주문을 식별하는 데 필요한 모든 정보: 주문 번호, 속한 그리드 등).

그래서 나는이 코드와 같은 것을 생각해 냈습니다.

 class Info
  {
private :
   struct str
     {
       string             Sym;                                 // Символ ордера
       string             Com;                                 // Коммент ордера
       int                Tic;                                 // Тиккет ордера
       int                Typ;                                 // Тип ордера
       int                Mag;                                 // Меджик номер ордера
       double             Lot;                                 // Лот ордера
       double             Pri;                                 // Цена открытия ордера
       double             SL_;                                 // Стоп лосс ордера
       double             TP_;                                 // Тейк профит ордера
       datetime           Tim;                                 // Время открытия ордера
       double             Pro;                                 // Профит ордера
     };
   int                m_tick_upper;                           // Тиккет максимального по цене ордера
   int                m_tick_upper_;                         // Тиккет предпоследнего максимального по цене ордера
   int                m_tick_lower;                           // Тиккет минимального по цене ордера
   int                m_tick_lower_;                         // Тиккет предпоследнего минимального по цене оредра

   int                m_tick_start;                           // Тиккет первого по времени ордера
   int                m_tick_start_;                         // Тиккет вторго по времени ордера
   int                m_tick_end;                             // Тиккет последнего по времени ордера
   int                m_tick_end_;                           // Тиккет предпоследнего по времени ордера

   int                m_magic;                               // Меджик номер
   string             m_symbol;                               // Символ ордера

   void               SearchTicketPriceType( const int type); // Поиск по цене
   void               SearchTicketTimeType( const int type);   // Поиск по времени

public :

   str               Price_Max;                             // Структура запроса максимальных ценн
   str               Price_Min;                             // Структура запроса минимальных  ценн
   str               Time_End;                               // Структура последних ордеров
   str               Time_Start;                             // Структура начальных ордеров

   str               Price_Max2;                             // Структура запроса максимальных ценн
   str               Price_Min2;                             // Структура запроса минимальных  ценн
   str               Time_End2;                             // Структура последних ордеров
   str               Time_Start2;                           // Структура начальных ордеров

   void               SetMagic ( const int     mag) { m_magic  = mag; } // Принудительное указание меджик номера
   void               SetSymbol( const string sym) { m_symbol = sym; } // Принудительное указание символа

   void               SearchTimeOrder( const int type);       // Заполнение структуры по времени      
   void               SearchPriceOrder( const int type);       // Заполнение структуры по ценам 

                     Info( const string sym, const int mag);   // Параметрический конструктор
                     Info(){};
                    ~Info(){};
  };
 
Михаил :
...

"그런데 Windows가 충돌하면 고문은 주문을 삭제할 수 없습니다. 여기에서 수동으로만 가능하므로 이 예는 자동 거래에 완전히 적용될 수 없습니다."

당신은 할 수 있습니다, 당신은 아마 방법을 모릅니다. 관심이 있다면 코드를 게시할 수 있습니다.

아니요, 코드가 필요하지 않습니다. 알고리즘을 간단히 요약하자면 가능하다면... 충돌 OS에서 실행되는 터미널에서 어드바이저를 실행하는 방법을 정말 모르겠습니다.
 
Artyom Trishkin :
아니요, 코드가 필요하지 않습니다. 알고리즘을 간단히 요약하자면 가능하다면... 충돌 OS에서 실행되는 터미널에서 어드바이저를 실행하는 방법을 정말 모르겠습니다.

설명하는 것보다 코드를 게시하는 것이 더 쉽습니다.

 //+------------------------------------------------------------------+
//| Expert Remove orders function                                    |
//+------------------------------------------------------------------+
void RemoveOrders()
{
   int orders_total = OrdersTotal ();
//---  
   if ( orders_total > 0 )
  {
     for ( int i = 0 ; i < orders_total; i++ )
    {
       ulong temp_order_ticket = OrderGetTicket ( i );
      
       if ( OrderSelect ( temp_order_ticket ) )
      {
         string temp_symbol = OrderGetString ( ORDER_SYMBOL );
        
         if ( temp_symbol == _Symbol )
        {
          RemoveOldOrder( temp_symbol, temp_order_ticket );
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Expert remove old order function                                 |
//+------------------------------------------------------------------+
void RemoveOldOrder( const string symbol, const ulong ord_ticket )
{
   MqlTradeRequest request = { 0 };
   MqlTradeResult   result  = { 0 };
  
  request.action = TRADE_ACTION_REMOVE ;
  request.order  = ord_ticket;
  
   if ( OrderSend ( request, result ) )
   {
     if ( result.retcode == TRADE_RETCODE_PLACED )
     { 
//        SetTransCount( true );
     }
  }
   else
  {
     Print ( "Удаление старого ордера не выполнено! Билет = " , ord_ticket);
  }
}
 
Vladimir Pastushak :

그래서 나는이 코드와 같은 것을 생각해 냈습니다.

젠장, 젠장. 당신은 올바른 방향을 스스로 결정했습니다. 현재 환경에 따라 상태를 복원해야하며 MT가 제공하는 것은 가장 안정적인 옵션입니다. 대신 외부 함수에서 찾은 값을 채워야 하는 길고 어리석은 Info 클래스를 작성합니다. 예, 결과적으로 가격 측면에서 최대 및 최소 주문 티켓과 귀하에게 중요한 기타 헛소리 등 귀하에게 필요한 변수가 포함될 것입니다. 그러나 실제로 작업은 특수 주문 컨테이너를 사용하여 해결됩니다. 각 주문이 많은 열(주문 ID, 오픈 시간, 시가, 이익 등)이 있는 테이블의 행을 나타내는 주문 목록이 있다고 상상해 보십시오. ). 열 중 하나를 기준으로 정렬하면 필요한 순서를 정확히 얻을 수 있습니다. 따라서 이 모든 것은 여러분이 즐겨 사용하는 클래스의 도움으로 수행할 수 있습니다(어리석은 말이지만 죄송합니다). 이것을하는 방법 - 관심이 있다면 내일 쓸 것입니다.
 
Vasiliy Sokolov :
젠장, 젠장. 당신은 올바른 방향을 스스로 결정했습니다. 현재 환경에 따라 상태를 복원해야하며 MT가 제공하는 것은 가장 안정적인 옵션입니다. 대신 외부 함수에서 찾은 값을 채워야 하는 길고 어리석은 Info 클래스를 작성합니다. 예, 결과적으로 가격 측면에서 최대 및 최소 주문 티켓과 귀하에게 중요한 기타 헛소리 등 귀하에게 필요한 변수가 포함될 것입니다. 그러나 실제로 작업은 특수 주문 컨테이너를 사용하여 해결됩니다. 각 주문이 많은 열(주문 ID, 오픈 시간, 시가, 이익 등)이 있는 테이블의 행을 나타내는 주문 목록이 있다고 상상해 보십시오. ). 열 중 하나를 기준으로 정렬하면 필요한 순서를 정확히 얻을 수 있습니다. 따라서 이 모든 것은 여러분이 즐겨 사용하는 클래스의 도움으로 수행할 수 있습니다(어리석은 말이지만 죄송합니다). 이것을하는 방법 - 관심이 있다면 내일 쓸 것입니다.

진짜 보고싶다....

정보가 아니라 추가 처리 및 계산을 위해 정보가 필요합니다 ...

 
Михаил :

설명하는 것보다 코드를 게시하는 것이 더 쉽습니다.

고장난 컴퓨터에서 어떻게 작동할까요??? (전혀 놀라지 않는 기능)

그래서 나는 코드가 필요하지 않다고 말했습니다. 나는 작동하지 않는 컴퓨터에서 작동하는 알고리즘이 필요합니다 . OS” 이고 VPS 및 기타 사항은 필요하지 않습니다. 고문이 있는 터미널이 실행 중인 컴퓨터, 서버 등에서 OS가 충돌한 것으로 간주합니다. 거기에서 귀하의 코드는 코끼리에 찜질과 . .. 펜, 펜 ... ).

 
Artyom Trishkin :

고장난 컴퓨터에서 어떻게 작동할까요??? (전혀 놀라지 않는 기능)

그래서 나는 코드가 필요하지 않다고 말했습니다. 나는 작동하지 않는 컴퓨터에서 작동하는 알고리즘이 필요합니다 . OS” 이고 VPS 및 기타 사항은 필요하지 않습니다. 고문이 있는 터미널이 실행 중인 컴퓨터, 서버 등에서 OS가 충돌한 것으로 간주합니다. 거기에서 귀하의 코드는 코끼리에 찜질과 . .. 핸들, 핸들 ...).

글쎄, 시작되었습니다. 누가 숲에 갔고, 장작을 위해 ...

이에 대해 귀하와 논의하고 마치겠습니다!

 
Михаил :

글쎄, 시작되었습니다. 누가 숲에 갔고, 장작을 위해 ...

이에 대해 귀하와 논의하고 마치겠습니다!

괜찮아요. 내 생각을 전달하는 것도 지겹다...
 
Artyom Trishkin :
괜찮아요. 내 생각을 전달하는 것도 지겹다...

결론은 서버의 축이 충돌하더라도 서버를 다시 시작하는 데 걸리는 시간 동안 계정에 대한 제어를 복원하는 올빼미를 가정용 PC에서 실행할 수 있다는 것입니다.

VDS / VPS 서버로 작업하는 동안 OS가 해당 서버로 날아간 적이 없지만 예기치 못한 계획된 재부팅이 있습니다.

내 질문의 본질은 현재 상황에 대한 정보를 수집하는 코드를 올바르게 작성하는 것입니다 ...

 
Vladimir Pastushak :

...

내 질문의 본질은 현재 상황에 대한 정보를 수집하는 코드를 올바르게 작성하는 것입니다 ...

당신은 여기에 당신의 절차적 스타일로 그것이 이미 쓰여졌다고 썼습니다. 따라서 이 모든 것은 수업에서 수집하기 위한 것입니다. 또한 함수 호출 에서 일부 매개변수를 제거하고 매개변수(magic, symbol)를 미리 설정하는 메소드를 만들 수 있지만 하지 않는 것이 좋습니다.

물론 할 일이 없으면 다른 길로 갈 수 있습니다. 수업. 주문 목록을 가져오는 Refresh() 메서드가 있습니다(거짓을 반환할 수 있는 유일한 메서드). 나머지 메서드는 이 목록을 사용합니다.

사유: