도와주세요 [해결]

 

저는 mql4가 처음이고 이 코드가 여러 주문을 엽니다. 어떻게 피할 수 있습니까? 닫힐 때까지 1개의 주문만 열어야 합니다.

어떻게 하면 될까요?

감사해요

void OnTick ()
  {

  
   double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
   double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

  
   if ( MathMin (up,down) < Bid )
  

   OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
    
    
  }
  
 
void OnTick()
  {

  if(OrdersTotal()==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMin (up,down) < Bid )

     OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
    }
    
  }
 
정말 감사합니다 선생님, 당신은 요점까지 엄격했고 저를 서클에 보내지 않았습니다.
 

이것은 솔루션이지만 계속 진행하면 알게 될 최상의 솔루션은 아닙니다.

하지만 이 시점에서 도움이 될 수 있습니다.

 
Marco vd Heijden :

이것은 솔루션이지만 계속 진행하면 알게 될 최상의 솔루션은 아닙니다.

하지만 이 시점에서 도움이 될 수 있습니다.

예, 주제의 문제를 해결했지만 닫을 때 여전히 클라우드 위에 있는 경우 새 주문도 생성합니다. 이 새로운 문제를 해결하는 데 도움을 주시겠습니까?

첫 번째 주문을 성공적으로 마감한 후 모든 새 주문을 어떻게 차단합니까?

 

플래그를 만들 수 있습니다.

bool order= 0 ;


그런 다음 주문할 때 값을 1로 설정할 수 있습니다.

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMin (up,down) < Bid )

     OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
     order= 1 ;
    }
    
  }

그러나 그것은 당신이 ordersend 함수 의 반환 값을 확인해야 한다는 경고를 줄 것입니다.

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMin (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if (ticket!=- 1 )
        {
         order= 1 ;
        }
      }
    }
  }

주문이 성공적으로 접수되었는지 여부에 따라 플래그를 설정하지 않는 이유는 무엇입니까?

이 경우 주문이 실패하면 계속 시도합니다.

 
mrluck1 :

예, 주제의 문제를 해결했지만 닫을 때 여전히 클라우드 위에 있는 경우 새 주문도 생성합니다. 이 새로운 문제를 해결하는 데 도움을 주시겠습니까?

첫 번째 주문을 성공적으로 마감한 후 모든 새 주문을 어떻게 차단합니까?

Marco가 이미 언급했듯이 다른 문제에 직면하게 될 것입니다.

다른 심볼에 미결 주문이 있으면 어떻게 됩니까?

다른 EA에서 제어하는 주문이 있으면 어떻게 됩니까?

보류 중인 주문 이 있으면 어떻게 합니까?

첫 번째 트리거를 닫았을 때 트리거가 여전히 활성화되어 있으면 어떻게 됩니까?

후자에 대한 응답으로 Marco가 제안한 대로 플래그를 사용할 수 있습니다. 플래그를 재설정할 시기를 결정해야 하며 그렇지 않으면 EA가 다시는 거래를 하지 않는다는 것을 기억하십시오.

또는 클라우드 아래/클라우드에서 클라우드 위로 상태의 교차/변경을 확인할 수 있습니다.

 

나는 당신의 코드를 넣고 티켓이 선언되지 않았다고 선언했습니다. 하지만 이제 코드는 이전과 마찬가지로 여러 주문을 엽니다. 지금 진행하는 방법은 무엇입니까?

void OnTick ()
  {

bool order= 0 ;
int ticket;

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }


그리고 정직한 지식인에게: 이 예에서는 스크립트이므로 1번의 거래만 가능합니다.
 
mrluck1 :

나는 당신의 코드를 넣고 티켓이 선언되지 않았다고 선언했습니다. 하지만 이제 코드는 이전과 마찬가지로 여러 주문을 엽니다. 지금 진행하는 방법은 무엇입니까?

void OnTick ()
  {

bool order= 0 ;
int ticket;

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }


변수의 범위에 대해 읽는 것이 도움이 될 것입니다.

각 틱의 order 값은 어떻게 됩니까?

 

좋습니다. 부울 플래그로 티켓을 선언합니다.

bool order= 0 ;
int ticket;

그리고

void OnTick ()
  {

   if (order== 0 )
    {
     double up= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 );
     double down= iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );

     if ( MathMax (up,down) < Bid )

    ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket>0)
        {
         order= 1 ;
        }
      }
    }
  }

물론 모든 틱마다 값이 재설정되므로 OnTick()에서 선언할 수 없습니다.

또한 OrderSend는 티켓 번호를 반환하거나 실패하면 -1에서 1을 뺀 값을 반환합니다.

 

나는 넣어

부울 주문 및

인트 티켓

전역 변수와 OnTick의 나머지 코드에 대해 설명하지만 여전히 지금은 입력하지 않습니다.