MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 15

 
Vitalie Postolache :
주기는 OrdersTotal () -1에서 0까지 역순으로 계산해야 합니다.
루프에서 닫을 때.
 
Vitalie Postolache :
주기는 OrdersTotal () -1에서 0까지 역순으로 계산해야 합니다.
이것들은 김의 기능이고 놓치지 않고 작동합니다. 문제는 다른 것입니다.
 
한 심볼에 대해 실수로 여러 어드바이저를 켰는데 그 중 많은 어드바이저가 그렇게 떨어졌다는 의미입니다.
 
Neron_76 :
안녕하세요! 로봇을 데모 계정 에 넣었습니다. 두 번째 달에는 작동합니다. 오늘 나는 터미널을 열었습니다. 비록 그 전에 하나의 주문이 이루어졌지만 하나의 신호에 두 개의 주문이 들어왔습니다. 주문 수에 제한이 있습니다. 이유는 무엇입니까?

코드로 판단하면 두 번째 주문은 시장가 주문이 아니라 보류 중인 주문입니다.

오픈 주문 수에 대한 제한은 시장 주문에만 적용됩니다.

따라서 오류가 없으므로 문제가 없습니다.

 
Renat Akhtyamov :

코드로 판단하면 두 번째 주문은 시장가 주문이 아니라 보류 중인 주문입니다.

오픈 주문 수에 대한 제한은 시장 주문에만 적용됩니다.

따라서 오류가 없으므로 문제가 없습니다.

제한 사항은 미결 및 보류 중인 주문 에 적용됩니다. 한 달 반 동안 이것은 나에게 두 번째 경우이며 나머지는 모두 원래대로 전시됩니다.
 
Neron_76 :
제한 사항은 미결 및 보류 중인 주문 에 적용됩니다. 한 달 반 동안 이것은 나에게 두 번째 경우이며 나머지는 모두 원래대로 전시됩니다.

다음과 같이 시도하십시오.

if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Buy< Low [ 1 ] && sar> Close [ 1 ]) {
  SetOrder( NULL , OP_BUYSTOP ,Lts,sar,sar-SL* Point (),sar+TP* Point (),Magik_number);
  return ( 0 );
}
if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Sell> High [ 1 ] && sar< Close [ 1 ]) {
  SetOrder( NULL , OP_SELLSTOP ,Lts,sar,sar+SL* Point (),sar-TP* Point (),Magik_number);
  return ( 0 );
}

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()> 1 && OrderType ()< 6 ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
 
Vitaly Muzichenko :

다음과 같이 시도하십시오.

if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Buy< Low [ 1 ] && sar> Close [ 1 ]) {
  SetOrder( NULL , OP_BUYSTOP ,Lts,sar,sar-SL* Point (),sar+TP* Point (),Magik_number);
  return ( 0 );
}
if (NumberOfPositions(Symb,- 1 ,Magik_number)== 0 && NumberOfOrders(Symb,- 1 ,Magik_number)== 0 && Delta_Sell> High [ 1 ] && sar< Close [ 1 ]) {
  SetOrder( NULL , OP_SELLSTOP ,Lts,sar,sar+SL* Point (),sar-TP* Point (),Magik_number);
  return ( 0 );
}

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int kp= 0 ;
   if (sy== "" ) sy= Symbol ();
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
     if ( OrderType ()> 1 && OrderType ()< 6 ) {
       if (mn< 0 || OrderMagicNumber ()==mn) kp++;
}}}}
   return (kp);
}
기능을 교체하면 테스트가 잘 됩니다. 데모 거래에서 어떻게 되는지 봅시다. 그러나 어떤 이유로 내 경우에는 이러한 기능과 이러한 기능이 모두 동일한 작업을 수행하는 것 같습니다. 명령과 직위가 있는지 여부에 대한 질문에 답하십시오.
 
Neron_76 :
기능 교체, 테스트는 정상입니다. 데모 거래에서 어떻게 되는지 봅시다. 그러나 어떤 이유로 내 경우에는 이러한 기능과 이러한 기능이 모두 동일한 작업을 수행하는 것 같습니다. 명령과 직위가 있는지 여부에 대한 질문에 답하십시오.
주문의 이중 설정이 반복되면 " SetOrder " 기능을 검토해야 합니다. 아마도 두 개의 요청을 제공할 것입니다. 첫 번째 요청 후에는 기능에서 나갈 수 없고 두 번째 요청을 보낼 수 있습니다.
 
Vitaly Muzichenko :
주문의 이중 설정이 반복되면 " SetOrder " 기능을 검토해야 합니다. 아마도 두 개의 요청을 제공할 것입니다. 첫 번째 요청 후에는 기능에서 나갈 수 없고 두 번째 요청을 보낼 수 있습니다.
그렇다면 항상 발생하지 않는 이유는 무엇입니까? 진드기 사이에 어떤 일이 발생합니까? 나는 이것에 능숙하지 않습니다.
 
Neron_76 :
그렇다면 항상 발생하지 않는 이유는 무엇입니까? 진드기 사이에 어떤 일이 발생합니까? 나는 이것에 능숙하지 않습니다.
한 심볼의 틱 사이에 다른 심볼의 틱이 발생할 수 있습니다. Expert Advisor가 다중 통화인 경우 다른 기호의 눈금이 표시됩니다. 타이머 이벤트는 틱 사이에도 발생할 수 있습니다. - OnTimer() 및 OnChartEvent() 이벤트 - 거의 "이벤트 이벤트"라고 썼습니다... 그것은 설정이 될 것입니다...