도와주세요 [해결] - 페이지 2

 
코드를 보여주세요.
 

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 )

     int ticket= OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point );
      {
       if ( ticket!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }
내가 사용하지 않는 다른 모든 기능 을 삭제했습니다. 내 모든 코드는 그냥
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

티켓의 이중 선언 .

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 )

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

티켓 숨김 선언 ... ㅋ ㅋ ? 내가 인간 컴파일러임을 참조하십시오.

두 번째 int 를 제거 합니다.

 
mrluck1 :

나는 넣어

부울 주문 및

인트 티켓

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

컴파일되지 않은, 테스트되지 않은

void OnTick ()
  {
   double up   = iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 ),
          down = iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );
   static bool was_above = true ;
   bool is_above = ( MathMax (up,down)< Bid );
   if (!was_above && is_above && open_orders()< 1 )
     {
       if ( OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point )< 0 )
        {
         printf ( "OrderSend() failed. Error code: %i" , GetLastError ());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // good habit to count down
     {
       if (! OrderSelect (i, SELECT_BY_POS ))   continue ;   // select the order
       if ( OrderSymbol () != _Symbol )       continue ;   // optional check for same symbol
       if ( OrderMagicNumber ()!= magic_no)   continue ;   // optional check for magic number
       if ( OrderType () < 2 )                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return (count);
  }
 

Marco: 중복된 int를 제거했지만 이제 거래가 이루어지지 않습니다. price> ichimoku cloud 인 경우 1개의 거래가 필요합니다. 그 코드는 처음에는 훌륭했지만 다음과 같은 경우 계속해서 새로운 거래를 생성했습니다.

가격은 클라우드보다 높았습니다. 1 거래 후에 스크립트가 중지되는 방식으로 코딩하는 데 도움이 필요합니다.

Honest Knave: 귀하의 코드를 시도했습니다. 방금 누락된 magic_no를 정의했습니다. 잘 작동합니다. 새로운 거래를 기다리고 있습니다. 가격이 다시 클라우드에 닿을 때까지 기다립니다. 다음 프로젝트에는 정말 유용할 것입니다.

1º 거래 후 중지해야 합니다. 어떻게 해야 합니까?

도와주셔서 모두 감사합니다

 
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!= 1 )
        {
         order= 1 ;
        }
      }
    }
  }

이게 문제 야.

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>- 1 )
        {
         order= 1 ;
        }
      }
    }
  }


그래서 이것을 시도하고 나는 몇 가지 포스트에서 그것을 지적했습니다.

Marco vd Heijden :

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

보다.
 
mrluck1 :

Honest Knave: 코드를 시도했는데 누락된 magic_no를 정의했습니다. 잘 작동합니다. 가격이 다시 클라우드에 닿으면 새로운 거래를 기다리며 다음 프로젝트에 정말 유용할 것입니다.

1 거래 후 중지해야 합니다. 어떻게 해야 합니까?

도와주셔서 모두 감사합니다

1개 이상 거래하면 안되나요...? 이것이 바로 다음과 같습니다.

void OnTick ()
  {
   double up   = iIchimoku ( NULL , 5 , 9 , 26 , 52 , 3 , 0 ),
          down = iIchimoku ( NULL , 5 , 9 , 26 , 52 , 4 , 0 );
   static bool was_above = true ;
   bool is_above = ( MathMax (up,down)< Bid );
   if (!was_above && is_above && open_orders()< 1 )
     {
       if ( OrderSend ( NULL , 0 , 0.01 , Ask , 3 , Bid - 150 * Point , Bid + 100 * Point )< 0 )
        {
         printf ( "OrderSend() failed. Error code: %i" , GetLastError ());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // good habit to count down
     {
       if (! OrderSelect (i, SELECT_BY_POS ))   continue ;   // select the order
       if ( OrderSymbol () != _Symbol )       continue ;   // optional check for same symbol
       if ( OrderMagicNumber ()!= magic_no)   continue ;   // optional check for magic number
       if ( OrderType () < 2 )                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return (count);
  }
 

정직한 건달:

귀하의 EA는 훌륭하지만 가격이 다시 ichimoku 클라우드로 떨어졌다가 다시 상승하면 새로운 거래를 생성합니다. 그것은 내가 가진 문제처럼 같은 양초에서 주문을 반복하지 않으며, 당신이 나에게 준 이 샘플을 통해 새로운 것을 만들기 위해 많은 것을 배울 것입니다.

EA, 하지만 첫 번째 거래 후 EA 또는 스크립트가 즉시 닫히도록 코딩하는 방법이 필요합니다. 그래서 나는 한 번만 거래하면 됩니다.

Marco: 귀하의 새 업데이트를 시도했지만 거래가 되지 않습니다. 귀하가 마지막으로 게시한 방식을 티켓에 넣고 두 번째 정수를 제거했습니다. 그러나 첫 번째 거래는 전략 테스터 에서 이루어지지 않습니다. 이제 어떻게해야합니까?

 
mrluck1 :

정직한 건달:

귀하의 EA는 훌륭하지만 가격이 다시 ichimoku 클라우드로 떨어졌다가 다시 상승하면 새로운 거래를 생성합니다. 그것은 내가 가진 문제처럼 같은 양초에서 주문을 반복하지 않으며, 당신이 나에게 준 이 샘플을 통해 새로운 것을 만들기 위해 많은 것을 배울 것입니다.

EA, 하지만 첫 번째 거래 후 EA 또는 스크립트가 즉시 닫히도록 코딩하는 방법이 필요합니다. 그래서 나는 한 번만 거래하면 됩니다.

무슨 말인지 이해가 안 돼요.

해당 코드는 한 번에 2개 이상의 주문을 열 수 없습니다.

그러나 주문이 닫히고 트리거가 다시 발생하면 다른 주문이 열립니다.

한 번만 거래가 열리기를 원하십니까?

 
honest_knave :

무슨 말인지 이해가 안 돼요.

해당 코드는 한 번에 2개 이상의 주문을 열 수 없습니다.

그러나 주문이 닫히고 트리거가 다시 발생하면 다른 주문이 열립니다.

한 번만 거래가 열리기를 원하십니까?

네 고객님, 지금까지 단 1번의 거래만 이루어졌습니다. 하지만 귀하의 모범은 훌륭했습니다. 새로운 EAS를 만드는 기반으로 매우 유용할 것입니다.