고문이 벌 수없는 것은 무엇입니까? - 페이지 4

 
FAQ :

... 제발 :

전역 및 지역 변수의 대부분은 초기화되지 않습니다. 작업의 특정 시점에는 그 안에 많은 쓰레기가 있을 것이라고 확신합니다.

당신은 OrderSelect()에 의해 주문이 선택되었는지 여부를 절대 확인하지 않으며 마감 시간까지 열림/닫힘을 확인하는 데 문제가 없습니다.

기능 거래 전 따옴표 업데이트, 코드에서 뭔가를 눈치채지 못했습니다...

열기/닫기 전 GetLastError는 재설정되지 않지만 확인하십시오. 다시 변수에 쓰레기가 있는 경우가 있습니다.

가격은 확인되지 않고 마감 시 정상화됩니다.

계속하다?

계속해.

굉장히 유용하다.

 

여기 https://www.mql5.com/en/forum/137651/page3 마감 기능을 게시했습니다.

GetInfo()는 인쇄로 대체, Fun_Error() = ErrorDescription()

 
FAQ :

주문이 OrderSelect()에 의해 선택되었는지 확인하지 않습니다.


솔직히 주문을 선택할 때 반환된 값이 false이면 어떻게 해야 하는지 잘 모르겠습니다.

false는 MODE_TRADES 중 100% 부재를 의미합니까?

귀하의 권장 사항에 따라 주문을 여는 코드를 다시 작성했습니다. 솔직히 나는 고문의 구성을 만지지 않습니다. 흥미롭습니다. 우리는 보게 될 것입니다 ... 다른 이익을 병합하거나 수정합니다.

 
valenok2003 :


솔직히 주문을 고를 때 반환된 값이 false이면 어떻게 해야 하는지 잘 모르겠습니다.

false는 MODE_TRADES 중 100% 부재를 의미합니까?


이 100%는 [주문]으로 아무 것도 할 수 없음을 의미합니다. 왜냐하면 그는 선택되지 않았습니다.
 
PapaYozh :

이 100%는 [주문]으로 아무 것도 할 수 없음을 의미합니다. 왜냐하면 그는 선택되지 않았습니다.



정확히... Mlyn ...하지만 선택되지 않으면 일종의 실수입니까? 해야 할 일이...

예를 들어 이 함수를 참조하십시오.

 //+-------
//+------------------------------------------------------------------+
//|   valenok2003@mail.ru                                05.07.2011
//+------------------------------------------------------------------+
//| check_open_order() ПРОВЕРКА реального открытия рыночного ордера по тикету
//| Требует:
//| - тикет ордера 
//| Возвращает тикет открытого ордера или -1
//+------------------------------------------------------------------+
int check_open_order( int _Ticket)
{   string _Function = "check_open_order(): " ;
//-----------------
   if (_Ticket > 0 ) {  
       OrderSelect (_Ticket,SELECT_BY_TICKET);             
       if ( OrderType () <= 1 ) {  
         output_mov_string(order_type_in_txt( OrderType ())+ " успешно открыт!" , Clr_Report);
         output_sound(Name_Sound_Open);
         OrderPrint ();
//-----------------         
         for ( int _n = 0 ; _n < MAX_ORDERS; _n++)  {
             // Если место свободно
             if (Arr_Tickets[_n] == 0 )   {
               // Создаём запись об ордере
               Arr_Tickets[_n] = OrderTicket ();
               break ;
            }
         }
      }
       else _Ticket = - 1 ;
   }
//-----------------
   return (_Ticket);
}
//+-------------------------------------------------------------------
//+-------
주문이 선택되지 않은 경우 이론상 -1을 반환해야 합니다. 그리고 다른 이유로 선택되지 않은 경우(예: 어떤 종류의 실패) 주문이 열려 있으면 어떻게 해야 합니까?
 
valenok2003 :


바로 ... Mlyn ...하지만 선택되지 않은 경우 이것은 일종의 실수입니까? 해야 할 일이...


선택되지 않을 수 있습니다.

1) 고문 코드의 잼으로 인해;

2) 주문을 정렬할 때 어드바이저가 통제할 수 없는 상황으로 인해 폐쇄되었다는 사실로 인해(SL/TP 작동, 수동 폐쇄, 어드바이저 폐쇄)

 
valenok2003 :


바로 ... Mlyn ...하지만 선택되지 않은 경우 이것은 일종의 실수입니까? 해야 할 일이...

장난하는거야 아님 진심이야???

일시 중지하고 다시 선택하십시오. 나는 이것을 다음과 같이 구성했으며 온라인에서 작동합니다.

 // ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for ( int orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ;
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != MagicNumber)) continue ;
      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера          
           if (ticket> 0 )                                     // Если позиция открылась
              {
                 while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                 Sleep ( 100 );                                 
                 double OpenPrice= OrderOpenPrice ();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера   
...
...
...
                  
 
Roman. :

장난하는거야 아님 진심이야???

일시 중지하고 다시 선택하십시오. 나는 이것을 다음과 같이 구성했으며 온라인에서 작동합니다.

나는 거기에서 내 게시물을 업데이트했습니다.

그리고 몇 번을 선택해야합니까?

 
valenok2003 :

나는 거기에서 내 게시물을 업데이트했습니다.

그리고 몇 번을 선택해야합니까?

그걸로. 루프에서 선택될 때까지:

 if (ticket> 0 )                                     // Если позиция открылась
              {
                 while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                 Sleep ( 100 );                                 
                 double OpenPrice= OrderOpenPrice ();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                 if (orderType == OP_BUY) 
                   {                
                     
                   }
            
                 if (orderType == OP_SELL) 
                   {        
                   
                   }   
                            
              }
 
PapaYozh :


선택되지 않을 수 있습니다.

1) 고문 코드의 잼으로 인해;

이것으로 모든 것이 분명하다

2) 주문을 정렬할 때 어드바이저가 통제할 수 없는 상황으로 인해 폐쇄되었다는 사실로 인해(SL/TP 작동, 수동 폐쇄, 어드바이저 폐쇄)

이 두 가지 이유뿐입니까 아니면 다른 이유가 있습니까?
사유: