[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 858

 

간단한 질문인데 생각이 안나네요.

특정 시점에 4개의 열린 위치 가 있습니다. 다음과 같이 모든 것을 닫으려고 합니다.

 for ( int i= 0 ;i< OrdersTotal ();i++)
  {
    if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {
        if (OrderType()==OP_BUY)
           OrderClose(OrderTicket(),OrderLots(),Bid, 3 , White );
        if (OrderType()==OP_SELL)
           OrderClose(OrderTicket(),OrderLots(),Ask, 3 , White );
      }
  }

그러나 모든 것이 닫힌 것은 아니지만 한 후에 닫힙니다. 실제로 2,4,6,7과 같은 숫자가 있다고 가정해 보겠습니다. 따라서 2번째와 6번째 위치는 닫힙니다.

캐치 뭔데?

 
usver :

간단한 질문인데 생각이 안나네요.

특정 시점에 4개의 열린 위치가 있습니다. 다음과 같이 모든 것을 닫으려고 합니다.

그러나 모든 것이 닫힌 것은 아니지만 한 후에 닫힙니다. 실제로 2,4,6,7과 같은 숫자가 있다고 가정해 보겠습니다. 따라서 2번째와 6번째 위치는 닫힙니다.

캐치 뭔데?


포지션이 닫힌 후 OrderSelect(i,SELECT_BY_POS,MODE_TRADES)의 번호가 변경되고 동시에 모두 닫힐 수 없다는 점에서

추신: I. Kim의 기능이 많은 도움이 되었습니다. 약간 변경했습니다. 여분의 괄호를 제거하고 한 줄로 정리했습니다.

 //+------------------------------------------------------------------+
void CloseAllFirstProfit() {
   int i, k= OrdersTotal ();
   for (i=k- 1 ; i>= 0 ; i--) if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (OrderProfit()+OrderSwap()> 0 ) ClosePosBySelect();
   k= OrdersTotal ();
   for (i=k- 1 ; i>= 0 ; i--) if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}
//+------------------------------------------------------------------+
void ClosePosBySelect() {
   if (OrderType()==OP_BUY)  OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10 , CLR_NONE );
   if (OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 10 , CLR_NONE );
}
//+------------------------------------------------------------------+

포럼 검색 - 원본을 찾을 수 있습니다

 
IgorM :


포지션이 닫힌 후 OrderSelect(i,SELECT_BY_POS,MODE_TRADES)의 번호가 변경되고 동시에 모두 닫힐 수 없다는 점에서

추신: I. Kim의 기능이 많은 도움이 되었습니다. 약간 변경했습니다. 여분의 괄호를 제거하고 한 줄로 정리했습니다.

포럼 검색 - 원본을 찾을 수 있습니다


팁과 예시에 감사드립니다. 나는 이것을 정리할 것이다.

도중에 한 가지 더 질문하겠습니다.

작업은 다음과 같습니다. 손절매로 마감된 미래 주문을 이전 주문과 비교하기 위해 손절매로 인해 마감된 주문 유형을 결정해야 합니다(읽기 - 유형 비교). 문서를 살펴보니 마지막 이벤트 처리와 관련된 내용을 찾을 수 없었습니다.

이 시점에서 이 작업은 지정된 경계에 도달하면 주문을 닫는 것으로 구현했습니다(Bid-OrderOpenPrice()>=TP*Point). 그것은 나에게 마지막으로 마감된 주문의 유형을 변수에 저장할 수 있는 기회를 주었습니다. 테스트에서는 모든 것이 잘 작동하지만 여전히 정지 손실을 사용하여 이것을 구현하고 싶습니다.

OrderSelect() 및 MODE_HISTORY 인수를 사용하여 기록에서 마감된 주문을 선택하려고 했습니다. 왜냐하면 주문 마감에 대한 조건이 없는 경우 OrdersTotal() 변수를 변경하는 것은 손절매를 유발하는 것과 동일하게 간주될 수 있습니다. 하지만 문제가 발생했습니다. 마지막으로 마감된 주문의 번호를 확인할 수 없거나(번호가 계속 변경되기 때문에) 어떻게 해야 하는지 몰랐습니다.

문제는 정지 손실을 사용하여 이것을 구현하는 방법입니다. 훨씬 더 쉬운 방법이 있지 않을까요? 글쎄, 생각의 방향이 맞다면 마지막으로 닫힌 주문을 찾는 방법은 무엇입니까?

 
IgorM :


포지션이 닫힌 후 OrderSelect(i,SELECT_BY_POS,MODE_TRADES)의 번호가 변경 되고 동시에 모두 닫힐 수 없다는 점에서

추신: I. Kim의 기능이 많은 도움이 되었습니다. 약간 변경했습니다. 여분의 괄호를 제거하고 한 줄로 정리했습니다.

포럼 검색 - 원본을 찾을 수 있습니다

글쎄, 당신은 말했어요 ... 한 더미에서
https://docs.mql4.com/ru/trading/OrderSelect
 
usver :

간단한 질문인데 생각이 안나네요.

특정 시점에 4개의 열린 위치가 있습니다. 다음과 같이 모든 것을 닫으려고 합니다.

그러나 모든 것이 닫힌 것은 아니지만 한 후에 닫힙니다. 실제로 2,4,6,7 이라는 숫자가 있다고 가정해 보겠습니다. 따라서 2번째와 6번째 위치는 닫힙니다.

캐치 뭔데?

숫자 순서대로 말씀하시는건가요? 또는 티켓?

 
abolk :

숫자 순서대로 말씀하시는건가요? 또는 티켓?


난 이미 혼란스러워. 티켓이지만 상황을 명확히 하기 위해 가져왔습니다. 그들은 하나로 닫힙니다.
 

만세, 모든 것이 나를 위해 일했습니다!!!


빅터님, 감사합니다. 제가 실수를 했습니다. 표시기 이름을 잘못 썼습니다.

 
abolk :
글쎄, 당신은 말했어요 ... 한 더미에서
https://docs.mql4.com/en/trading/OrderSelect


주문 그룹에서 테이크 또는 스톱을 변경/제거하려고 시도합니다. 작업은 간단하지만 OrderSelect(i, SELECT_BY_PO S,MODE_TRADES)로 주문을 선택할 때 주문 번호가 본문에서 직접 변경되었다는 사실을 발견했습니다. 주기 및 그것은 이미 수정 된 것을 여러 번 수정하는 것으로 나타났습니다 (take 없이) 주문 - 실수 번호 1, 그래서 usver가 비슷한 문제가 있다고 가정 한 이유

말해 주세요. 여러 막대를 닫은 후 표시기를 다시 계산하는 방법을 알려주세요. 예를 들면 다음과 같습니다. 표시기를 5개의 새 막대마다 다시 그리거나 다시 계산하고 싶습니다.

 
IgorM :


말해 주세요. 여러 막대를 닫은 후 표시기를 다시 계산하는 방법을 알려주세요. 예를 들면 다음과 같습니다. 표시기를 5개의 새 막대마다 다시 그리거나 다시 계산하고 싶습니다.

당신은 프로그래밍을 잘합니다.

이것은 논리적인 문제이며 이를 해결하기 위해 글을 잘 읽을 필요는 없습니다. 머리로 생각하십시오.

경우가 다릅니다. 다시 그리기가 정확히 어디에 있어야 하는지, 어떤 TF에서 다시 그리기를 수행해야 하는지 등. 귀하의 질문에 어떻게 대답할 수 있습니까?

막대의 시간을 기억하고 5개의 막대가 이 시간을 재설정하고 다시 기억하십시오. 시간 영점화 시 재계산 조건을 설정할 수 있습니다. iTime (NULL,0,0) 함수가 도움이 될 것입니다. 나머지는 모두 논리입니다.

 
IgorM :


말해 주세요. 여러 막대를 닫은 후 표시기를 다시 계산하는 방법을 알려주세요. 예를 들면 다음과 같습니다. 표시기를 5개의 새 막대마다 다시 그리거나 다시 계산하고 싶습니다.


이 방법은 아마도 가장 신뢰할 수는 없지만 아이디어(초안 버전)를 시도하는 것은 괜찮을 것입니다.

Bars 변수를 사용하고 변경 사항을 추적합니다. 5 증가, 기억 등