포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 713

 
7Konstantin7 :

고마워, 나는 그것을 압도 할 수 없다. 나는 누군가가 그 함수에서 몇 줄을 떨어 뜨리거나 최종 버전 인 올빼미를 버릴 수 있다고 생각했습니다. 어렵지 않은 것 같지만 그래도 도움을 줄 수 있는 사람은 거의 없습니다.

mql5 사이트에 4크레딧이 있습니다) 참가자간 양도가 가능한 경우 증정할 수 있습니다.

1. 루프에서 가장 빠른 오픈 포지션 을 찾아 티켓을 반환할 수 있습니까?

 
artmedia70 :

1. 루프에서 가장 빠른 오픈 포지션을 찾아 티켓을 반환할 수 있습니까?

코드에서는 어떻게 될지 상상이 안 갑니다.) 하지만 어떤 기적에 의해 어드바이저에게 보류 중인 주문 제거 를 추가할 수 있었습니다. 저는 코드에 강하지 않고 약간만 있습니다.
 
7Konstantin7 :
코드에서는 어떻게 될지 상상이 안 갑니다.) 하지만 어떤 기적에 의해 어드바이저에게 보류 중인 주문 제거를 추가할 수 있었습니다. 저는 코드에 강하지 않고 약간만 있습니다.

예, 그것을 가지고 사이클에서 어떻게 닫힐지 확인하십시오.

하나:

 int i, total = OrdersTotal (); bool rez;

for (i = total- 1 ; i >= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS) && другие нужные условия)
{
if (OrderType() < 2 )
rez = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40 );
if (OrderType() > 1 )
rez = OrderDelete(OrderTicket());
}
}

2:

 //Всё тоже самое только поменяй направление цикла
for (i = 0 ; i < total; i++)
그러면 주문이 어떤 순서로 마감되는지 이해할 수 있습니다. 확인을 안해봐서 말을 못하겠네요. 필요 없음. 그러나 첫 번째 옵션에서와 같이 주기를 구성해야 하는 이유가 있습니다. 그러나 이것은 또 다른 주제이며 여기에서 반복적으로 논의되었으며 이 모든 것을 반복하고 싶지 않습니다.
 
AlexeyVik :

예, 그것을 가지고 사이클에서 어떻게 닫힐지 확인하십시오.

하나:

2:

그러면 주문이 어떤 순서로 마감되는지 이해할 수 있습니다. 확인을 안해봐서 말을 못하겠네요. 필요 없음. 그러나 첫 번째 옵션에서와 같이 주기를 구성해야 하는 이유가 있습니다. 그러나 이것은 또 다른 주제이며 여기에서 반복적으로 논의되었으며 이 모든 것을 반복하고 싶지 않습니다.
네, 문제는 이미 해결되었습니다...
 
artmedia70 :
네, 문제는 이미 해결되었습니다...
글쎄, 나는 당신의 PM을 읽지 않습니다 ... 그리고 나는 무슨 일이 일어나고 있는지 모릅니다.
 
AlexeyVik :
글쎄, 나는 당신의 PM을 읽지 않습니다 ... 그리고 나는 무슨 일이 일어나고 있는지 모릅니다.
그래, 그는 글을 읽지 않아... 내 슬리퍼는 어디로 갔어???!!! ;)
 
artmedia70 :
그래, 그는 글을 읽지 않아... 내 슬리퍼는 어디로 갔어???!!! ;)

Ioan Vasilievich가 그가 취한 것을 나열했지만 Shpak은 취하지 않았다는 것을 기억하십니까? 그래서 나는 당신의 슬리퍼입니다.


안녕히 계세요. 나는 잘거야.

 
AlexeyVik :

Ioan Vasilievich가 그가 취한 것을 나열했지만 Shpak은 취하지 않았다는 것을 기억하십니까? 그래서 나는 당신의 슬리퍼입니다.


안녕히 계세요. 나는 잘거야.

그런 다음 다른 사람들에게 슬리퍼에 대해 물어보고 ... 진정 ...
 
AlexeyVik :

예, 가져 와서 사이클에서 어떻게 닫힐지 확인하십시오.

하나:

2:

그러면 주문이 어떤 순서로 마감되는지 이해할 수 있습니다. 확인을 안해봐서 말을 못하겠네요. 필요 없음. 그러나 첫 번째 옵션에서와 같이 주기를 구성해야 하는 이유가 있습니다. 그러나 이것은 또 다른 주제이며 여기에서 반복적으로 논의되었으며 이 모든 것을 반복하고 싶지 않습니다.

덕분에 이미 문제를 해결했습니다.

아트미디어70 :

나는 그들이 나를 직장에 보낼 것이라고 생각했다) 도와줘서 고마워.

 

안녕하세요! 나는 이미 711 페이지에서 비슷한 질문을했지만 불행히도 아무도 대답하지 않았습니다. 아마도 지금 누군가 ...

5- sign 에 대한 카운터 주문을 마감하는 데 문제가 발생했습니다. 결론은 구매당 20개의 주문과 마을당 33개의 주문이 있다고 가정해 보겠습니다. 동시에 OrderCloseBy() 함수를 통해 20개의 매수 주문과 20개의 매도 주문을 마감하고 OrderClose() 함수를 통해 나머지 13개의 매도 주문을 마감하고 싶습니다.

네 번째 자리에 고정 스프레드가 있으면 닫는 데 문제가 없으며 OrderCloseBy() 함수를 사용할 때 스프레드를 저장합니다. 5자리 스프레드에서는 스프레드가 유동적이기 때문에 전체 수익에 도달하면 주문이 마감되지 않고 로그에서는 OrderCloseBy()에서 맹세한다고 생각합니다. 동시에 테스터에서 실행하면 모든 것이 정상적으로 닫힙니다.

총 이익에 도달하면 한 방향으로의 주문은 문제 없이 마감됩니다.

누구든지이 문제가 발생했으며 해결책은 무엇입니까?

다음은 주문을 마감하는 기능입니다.

또한 OrderCloseBy() 함수는 5자리에서 전혀 작동하지 않습니다.

   //-----------------------------------------------------------------------
   // функция подсчета открытых ордеров
   //-----------------------------------------------------------------------

   void OrderOpen()
   {
     Orders_BUY= 0 ; Orders_SELL= 0 ;
     for ( int a= 0 ; a<= OrdersTotal (); a++)
     {
       if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_BUY && OrderMagicNumber() == Magic) Orders_BUY=Orders_BUY+ 1 ;
       if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_SELL && OrderMagicNumber() == Magic) Orders_SELL=Orders_SELL+ 1 ;

       //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY) Orders_BUY=Orders_BUY+1;
       //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL) Orders_SELL=Orders_SELL+1;
      ProfitAll=ProfitAll+OrderProfit()+OrderSwap()+OrderCommission();
     }
   }
  
   //-----------------------------------------------------------------------
   // функция закрытия ордеров сначала разнонаправленных
   //-----------------------------------------------------------------------
   void ClosePos()
   {
   int ticket_1= 0 , ticket_2= 0 ;
    
     for ( int a= 0 ; a<= OrdersTotal (); a++)
       {
         if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true ) 
            {
             if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic) // проверка по символу и магику
               {
                 if (OrderType() == OP_BUY) ticket_1 = OrderTicket();
                 if (OrderType() == OP_SELL) ticket_2= OrderTicket();   
               } 
            }
        }    
       if (ticket_1 != 0 && ticket_2 != 0 ) {           // если найдены разнонаправленные ордера
      res = OrderCloseBy(ticket_1,ticket_2, clrRed ); }   // закроем их
       
       if (ticket_1 == 0 && ticket_2 != 0 ) {  CloseOrder_by_type(OP_SELL, Symbol ());  }
       if (ticket_1 != 0 && ticket_2 == 0 ) {  CloseOrder_by_type(OP_BUY, Symbol ());  }
    
    }

//---- Закрытие ордера по типу и комментарию ----//
void CloseOrder_by_type( int type, string sym)
{
   for ( int k= OrdersTotal ()- 1 ;k>= 0 ;k--)
   {
    
       if ( OrderSelect (k,SELECT_BY_POS,MODE_TRADES)== true )
       {
           
       if (type == OrderType() && sym==OrderSymbol()&& OrderMagicNumber()==Magic)
         if (OrderType()<= 1 ){ res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 350 );}
         else { res = OrderDelete(OrderTicket());}
         if (!res)
               Print ( "Ошибка закрытия ордера. Код ошибки=" , GetLastError ());
             else
               Print ( "ордер успешно закрыт." );   
           
       }
   }
}