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
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); }
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); }
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 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 를 제거 합니다.
나는 넣어
부울 주문 및
인트 티켓
전역 변수와 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º 거래 후 중지해야 합니다. 어떻게 해야 합니까?
도와주셔서 모두 감사합니다
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 ;
}
}
}
}
이게 문제 야.
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 ;
}
}
}
}
그래서 이것을 시도하고 나는 몇 가지 포스트에서 그것을 지적했습니다.
또한 OrderSend는 티켓 번호를 반환하거나 실패하면 -1에서 1을 뺀 값을 반환합니다.
Honest Knave: 코드를 시도했는데 누락된 magic_no를 정의했습니다. 잘 작동합니다. 가격이 다시 클라우드에 닿으면 새로운 거래를 기다리며 다음 프로젝트에 정말 유용할 것입니다.
1 거래 후 중지해야 합니다. 어떻게 해야 합니까?
도와주셔서 모두 감사합니다
1개 이상 거래하면 안되나요...? 이것이 바로 다음과 같습니다.
{
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: 귀하의 새 업데이트를 시도했지만 거래가 되지 않습니다. 귀하가 마지막으로 게시한 방식을 티켓에 넣고 두 번째 정수를 제거했습니다. 그러나 첫 번째 거래는 전략 테스터 에서 이루어지지 않습니다. 이제 어떻게해야합니까?
정직한 건달:
귀하의 EA는 훌륭하지만 가격이 다시 ichimoku 클라우드로 떨어졌다가 다시 상승하면 새로운 거래를 생성합니다. 그것은 내가 가진 문제처럼 같은 양초에서 주문을 반복하지 않으며, 당신이 나에게 준 이 샘플을 통해 새로운 것을 만들기 위해 많은 것을 배울 것입니다.
EA, 하지만 첫 번째 거래 후 EA 또는 스크립트가 즉시 닫히도록 코딩하는 방법이 필요합니다. 그래서 나는 한 번만 거래하면 됩니다.
무슨 말인지 이해가 안 돼요.
해당 코드는 한 번에 2개 이상의 주문을 열 수 없습니다.
그러나 주문이 닫히고 트리거가 다시 발생하면 다른 주문이 열립니다.
한 번만 거래가 열리기를 원하십니까?
무슨 말인지 이해가 안 돼요.
해당 코드는 한 번에 2개 이상의 주문을 열 수 없습니다.
그러나 주문이 닫히고 트리거가 다시 발생하면 다른 주문이 열립니다.
한 번만 거래가 열리기를 원하십니까?