[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 346

 
hoz : Vadim, ObjectSet() 함수를 사용할 수 있다면 왜 객체를 다시 생성합니까?

조언을 구하고 나서도 도전하는 이유는 무엇입니까? 이게 뭐야, 메인스트림?
 
FAQ :

더 이상의 논쟁은 무의미하다고 생각합니다. 나는 모든 것을 차근차근 설명했다. 당신이 한 일을 계속하십시오.

예, 어떤 종류의 토론이 있을 수 있습니까? 최대 가격 편차로 주문을 마감해야 합니다. 그래서 우리는 가격에 관심이 있습니다 ... 즉. 최대 또는 최소 개시 가격 과 함께 극단적인 보류를 찾아야 합니다. 동의하지 않으면 논쟁할 수 있습니다. 그렇지 않으면 여전히 옳습니다! 나는 내가 말하는 것을 분명히 이해합니다.
 

코드는 ST와 TP를 제거합니다. 선택적 삭제 조건 추가

바르게 쓰지 않은 것은? 모든 것을 계속 삭제합니다 :(

 #property show_inputs
extern bool   StopLoss     = True;    // Удалить только StopLoss
extern bool   TakeProfit   = True;    // Удалить только TakeProfit
extern bool   ALL          = True;    // Удалить все
void start()
   {
   bool   fm;
   int     i;
   double SL=OrderStopLoss();
   double TP=OrderTakeProfit();

      if (StopLoss)   SL=0;
      if (TakeProfit) TP=0;
      if (ALL)       {SL=0; TP=0;}
     
      for (i=0; i<OrdersTotal(); i++)
         {
           if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
               {
                  if (OrderType()==OP_BUY)
                     {
                        fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
                     }
                  if (OrderType()==OP_SELL)
                     {
                        fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
                     }
               }
         }
   }

아니면 다른 해결 방법이 없고 각각의 조건에 대해 삭제 코드를 작성해야 합니까?

#property show_inputs
#include <WinUser32.mqh>
extern bool   StopLoss     = False;    // Удалить только StopLoss
extern bool   TakeProfit   = False;    // Удалить только TakeProfit
extern bool   ALL          = False;    // Удалить все
void start()
   {
   bool   fm;
   int     i;

    if (StopLoss)
         {
            for (i=0; i<OrdersTotal(); i++)
               {
                 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                     {
                        if (OrderType()==OP_BUY)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
                           }
                        if (OrderType()==OP_SELL)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
                           }
                     }
               }
           return(0);
         }
      if (TakeProfit)
         {
            for (i=0; i<OrdersTotal(); i++)
               {
                 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                     {
                        if (OrderType()==OP_BUY)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
                           }
                        if (OrderType()==OP_SELL)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
                           }
                     }
               }
           return(0);
         }
      if (ALL)
         {
            for (i=0; i<OrdersTotal(); i++)
               {
                 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                     {
                        if (OrderType()==OP_BUY)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
                           }
                        if (OrderType()==OP_SELL)
                           {
                              fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
                           }
                     }
               }
           return(0);
         }
   }             

 
hoz :


Vadim, ObjectSet() 함수를 사용할 수 있다면 왜 다시 객체를 생성합니까?

이 경우 그래픽 개체가 완전히 생성되고 구성되는 기능이 있었습니다. 그 안에 생성 기능이 최적화되어 있습니다. 객체가 이미 존재하는 경우 생성되지 않습니다. 직접 확인하십시오. 객체를 생성한 다음 속성을 변경하는 시간을 기록합니다. 두 번째 호출은 훨씬 더 짧을 것입니다. 저것들. 아무것도 다시 생성되지 않습니다.

결과적으로 우리는 개체를 생성할 뿐만 아니라 많은 시간 없이 개체의 속성을 교체하여 개체 를 사용자 정의할 수 있는 범용 기능을 갖게 되었습니다.

 
시장 동향을 결정하기 위해 고문의 스크립트를 알려주시겠습니까?
 

나는 판매에 대한 최저 입찰가를 제거하는 함수를 작성했습니다. 마감까지 의 짧은 지연 횟수는 효과가 있었던 구매 지연 횟수와 동일합니다. 시장가 주문으로 전환되었습니다.

한 번의 매수 지연이 효과가 있으면 매도 지연 한 번을 마감하고, 두 번의 매수 지연이 효과가 있으면 매도에서 2개의 예금을 마감합니다.

코드는 다음과 같습니다.

 //+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells( int & amountOfCurrPending)
{
   int total = OrdersTotal () - 1 ,
       ordersToDelete = level - amountOfCurrPending,
       s_ticket;
   amountOfCurrPendingBuys = 0 ;
   amountOfCurrPendingSells = 0 ;
   Print ( "DeletePendingSells: level = " , level);
   Print ( "ordersToDelete = level - amountOfCurrPending ; " , level, " - " , amountOfCurrPending);
   int n = 0 ;
   double OOP = 2.0 ;
   Print ( "функция сноса отложек DeletePendingSells" );
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS)) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderType() != OP_SELLSTOP) continue ;
      
       while (n < ordersToDelete)
      {
         if (OOP > OrderOpenPrice())
         {
             Print ( "OOP > OrderOpenPrice() ; " , OOP, " > " , OrderOpenPrice());
             OOP = OrderOpenPrice();
             s_ticket = OrderTicket();
             ordersToDelete--;
         }
      }
   }
}

amountOfCurrPending - 보류 중인 구매 주문 의 수입니다.

레벨 - 처음에 각각에 대해 보류 중인 주문을 보낸 수. 옆.

OOP - 보류 중인 시작 가격으로 도달할 수 없는 값을 취했습니다.

우리의 조건은 카운터가 ordersToDelete 보다 작으면 가장 낮은 가격으로 보류 중인 항목을 삭제하는 것입니다. 그러나 모든 단기 예금은 제거됩니다. 나에게 뭐가 문제 니?

 
hoz :

나는 판매에 대한 최저 입찰가를 제거하는 함수를 작성했습니다. 마감까지 의 짧은 지연 횟수는 효과가 있었던 구매 지연 횟수와 같습니다. 시장가 주문으로 전환되었습니다.

한 번의 매수 지연이 효과가 있으면 매도 지연 한 번을 마감하고, 두 번의 매수 지연이 효과가 있으면 매도에서 2개의 예금을 마감합니다.

코드는 다음과 같습니다.

amountOfCurrPending - 보류 중인 구매 주문의 수입니다.

레벨 - 처음에 각각에 대해 보류 중인 주문을 보낸 수. 옆.

OOP - 보류 중인 시작 가격으로 도달할 수 없는 값을 취했습니다.

우리의 조건은 카운터가 ordersToDelete 보다 작으면 가장 낮은 가격으로 보류 중인 항목을 삭제하는 것입니다. 그러나 모든 단기 예금은 제거됩니다. 나에게 뭐가 문제 니?

나는 당신의 논리를 전혀 이해하지 못합니다... 왜 하지 않습니까: 주문이 시장 포지션으로 전환되었습니다 - 가장 멀리 있는 반대 보류가 제거되었습니다.
그리고 그게 다야. 아니면 같은 가격에 여러 주문이 걸려 있습니까?
 
artmedia70 :

그리고 그게 다야. 아니면 같은 가격에 여러 주문이 걸려 있습니까?


아니, 단계로 주문 ..
아트미디어70 :
나는 당신의 논리를 전혀 이해하지 못합니다... 왜 하지 않습니까: 주문이 시장 포지션으로 전환되었습니다 - 가장 멀리 있는 반대 보류가 제거되었습니다.

그래서 나는 가장 먼 위치를 삭제합니다. 숏포지션이기 때문에 시가가 가장 낮은 포지션 을 의미합니다. 여기에서 함수를 다시 작성했습니다. 여기에서 모든 것이 명확해야 합니다. 인쇄가 제거되고 추가 변수가 제거되었습니다.

결국 변수 amountOfCurrPending 은 남은 구매 보류 수를 전송합니다. 저것들. 총계가 처음에 level 의 양이고 amountOfCurrPending 이 현재 보류 중인 수인 경우 현재 보류 중인 수에서 초기 보류 중인 수를 빼면 차이가 나오며 이것이 반바지를 제거하는 데 필요한 금액입니다. 이해했나요?

 //+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells( int & amountOfCurrPending)
{
   int total = OrdersTotal () - 1 ,
       ordersToDelete = level - amountOfCurrPending,   // Количество отложек, которые требуется удалить
       s_ticket;
   amountOfCurrPendingBuys = 0 ;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0 ;                       // Количество текущих отложек на продажу
   Print ( "DeletePendingSells: level = " , level);
   Print ( "ordersToDelete = level - amountOfCurrPending ; " , level, " - " , amountOfCurrPending);

   double OOP = 2.0 ;
   Print ( "функция сноса отложек DeletePendingSells" );
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS)) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderType() != OP_SELLSTOP) continue ;
      
       while (ordersToDelete > 0 )                       // Если есть ордера, которые требуется удалить..
      {
         if (OOP > OrderOpenPrice())
         {
             Print ( "OOP > OrderOpenPrice() ; " , OOP, " > " , OrderOpenPrice());
             OOP = OrderOpenPrice();                   // Ищется ордер, с минимальной ценой открытия
             s_ticket = OrderTicket();                 // Получаем тикет ордера с минимальной ценой открытия

             Print ( "DeletePendingSells: s_ticket = " , s_ticket);
             Print ( "DeletePendingSells: OOP = " , OOP);
             OrderDelete(s_ticket,Black); // Тут нужно закрыть найденный ордер, и видимо проверить, что он закрыт. И счётчик уменьшить!
             ordersToDelete--;                         // Уменьшаем количество требуемых ордеров для удаления
         }
      }
   }
   Print ( "DeletePendingSells: ordersToDelete = " , ordersToDelete);
}
어디서 오류를 빨간색으로 표시했습니까? 이것을 해결하는 가장 좋은 방법은 무엇입니까?
 
hoz :

아니, 단계로 주문 ..

그래서 나는 가장 먼 위치를 삭제합니다. 숏 포지션이기 때문에 시가가 가장 낮은 포지션을 의미합니다. 여기에서 함수를 다시 작성했습니다. 여기에서 모든 것이 명확해야 합니다. 인쇄가 제거되고 추가 변수가 제거되었습니다.

결국 변수 amountOfCurrPending 은 남은 구매 보류 수를 전송합니다. 저것들. 총계가 처음에 level 의 양이고 amountOfCurrPending 이 현재 보류 중인 수인 경우 현재 보류 중인 수에서 초기 보류 중인 수를 빼면 차이가 나오며 이것이 반바지를 제거하는 데 필요한 금액입니다. 이해했나요?

어디서 오류를 빨간색으로 표시했습니까? 이것을 해결하는 가장 좋은 방법은 무엇입니까?
 Ищется ордер, с минимальной ценой открытия

나는 연기 코멘트의 그리드에 일련 번호를 기록하고 대응하는 반대 연기된 번호에 같은 번호를 기록할 것입니다. 그런 다음 시장 위치를 찾은 후 그녀의 댓글에서 번호를 읽은 후 해당 반대 예금을 문제 없이 댓글에서 동일한 번호를 검색합니다. 다른 시간의 magicki 사용.

추신. 코드를 읽고/파싱할 시간이 없습니다.

 
artmedia70 :

나는 연기 코멘트의 그리드에 일련 번호를 기록하고 대응하는 반대 연기된 번호에 같은 번호를 기록할 것입니다. 그런 다음 시장 위치를 찾은 후 그녀의 댓글에서 번호를 읽은 후 해당 반대 예금을 문제 없이 댓글에서 동일한 번호를 검색합니다. 다른 시간의 magicki 사용.

추신. 귀하의 코드는 읽고/파싱할 시간이 없습니다



흠. 네, 각 방향의 예금 개수가 같으면 이런 식으로 해당 예금을 문제 없이 검색합니다. 그리고 다른 경우이 옵션은 내가 이해한대로 작동하지 않습니다.