순환 연산자 'for' 질문 - 페이지 10

 
WhooDoo22 :

당신이 나에게 완료하라고 조언한 코딩 연습에 대한 "잘못된 티켓" 오류를 수정했습니다. 나는 당신이 개인적으로 볼 수 있도록 전문 고문의 사본을 첨부했습니다.

이 연습의 OrderClose() 함수 섹션은 완전하다고 생각합니다.

이 연습의 Print() 함수 섹션은 완전하다고 생각합니다.

나머지는 세 번째 섹션인 OrderModify() 함수라고 생각합니다.

고맙습니다.

문제를 해결하지 않고 문제를 해결했습니다. 이는 문제가 이해되지 않을 때 일반적입니다. 이미 말했듯이 증상이 아닌 원인을 해결하십시오. . .

아직 USDJPY 티켓 번호가 인쇄되지 않습니다. 원래 요구 사항을 확인 하십시오.

MarketInfo() 호출은 작동하더라도 잘못되었습니다. . .

 

사이먼,

OrderModify() 함수 는 오류 없이 실행됩니다.

OrderPrint() 함수는 오류 없이 실행됩니다.

OrderClose() 함수는 오류 없이 실행됩니다.

응답을 게시하십시오.

고맙습니다.

 
WhooDoo22 :


응답을 게시하십시오.


랩터영국 :

문제를 해결하지 않고 문제를 해결했습니다. 이는 문제가 이해되지 않을 때 일반적입니다. 이미 말했듯이 증상이 아닌 원인을 해결하십시오. . .

아직 USDJPY 티켓 번호가 인쇄되지 않습니다. 원래 요구 사항을 확인하십시오.

MarketInfo() 호출은 작동하더라도 잘못되었습니다. . .

게다가 . . .

USDJPY 주문이 없는 이전과 같은 상황이 있는 경우 OrderStopLoss(), OrderTakeProfit(), OrderSelect() 및 OrderType() 호출에 실패하게 됩니다.

이것은 무엇을 의미합니까? 이 코드 줄에 대해 어떻게 예상하십니까? 문서를 찾지 않고 대답하십시오.

 GetLastError ();

코드의 마지막 블록에서 이 코드 줄을 실행하려는 이유는 무엇입니까? . . .

   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}

경우에만 . . .

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       

그러나 TP 및 SL에 관계없이 항상 이 코드 줄과 그 뒤에 오는 모든 코드를 실행합니다.

   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);} 

MarketInfo() 호출이 여전히 잘못되었습니다. . . 문서를 보고 이유를 알아보세요.

 

사이먼,


당신은 문제를 해결하지 않았고, 당신은 그것을 해결했습니다 ...

내가 아직 해결하지 못한 문제는 무엇이라고 생각합니까?


아직 USDJPY 티켓 번호를 인쇄하지 않고 있습니다...

티켓 번호를 주문하십시오.



MarketInfo() 호출은 작동하더라도 잘못되었습니다. . .

MetaEditor 사전 MarketInfo() 함수 예:

견본:

 // MarketInfo() function example;

   double bid   = MarketInfo( "EURUSD" ,MODE_BID);
   double ask   = MarketInfo( "EURUSD" ,MODE_ASK);
   double point =MarketInfo( "EURUSD" ,MODE_POINT);
   int     digits=MarketInfo( "EURUSD" ,MODE_DIGITS);
   int     spread=MarketInfo( "EURUSD" ,MODE_SPREAD);

다음은 내 OrderClose() 함수 코드 블록의 샘플입니다.

 // OrderClose() function code block example;

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask= MarketInfo( "USDJPY" ,MODE_BID); }
   if (OrderType()==OP_SELL){bid_ask= MarketInfo( "USDJPY" ,MODE_ASK); }           
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
       Print (OrderCloseTime());
       GetLastError ();
     }

내 OrderClose() 함수 코드 샘플 형식에 어떤 문제가 있다고 생각합니까? MetaEditor 사전에서 제공하는 'MarketInfo()' 샘플과 거의 동일하게 보입니다.


게다가 . . .


이것은 무엇을 의미합니까? 이 코드 줄에 대해 어떻게 예상하십니까? 문서를 찾지 않고 대답하십시오.

 GetLastError ();

GetLastError() 함수는 테스트를 실행하는 동안 '전문가' 페이지에 오류를 인쇄합니다. 함수가 오류를 찾지 못하면 영(0)이 인쇄됩니다. 위에서 제공한 스냅샷에 0이 인쇄된 것을 확인하십시오.


코드의 마지막 블록에서 이 코드 줄을 실행하려는 이유는 무엇입니까? . . .

 if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}

경우에만 . . .

 if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))

그러나 TP 및 SL에 관계없이 항상 이 코드 줄과 그 뒤에 오는 모든 코드를 실행합니다.

 if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}


네, 제가 이 일을 하는 이유를 설명하려고 하기 때문에 이 문제를 제기해주셔서 기쁩니다.

여러 줄 주석 "/* - */"을 사용하여 프로그램 실행에서 다른 모든 코드 블록이 생략되고 Start() 및 Return(0) 함수 내에 남아 있는 두 개의 코드 블록만 있는 경우...

   int i;
   double bid_ask,
          OM_Param_3,
          OM_Param_4;

// code block 1;   

while ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true && OrderSymbol()!= "USDJPY" )
   
   i++;

// code block 2;

   if ((OrderStopLoss()== 0 )&&(OrderTakeProfit()== 0 ))
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))   
     {
       Print (OrderTicket());     
       GetLastError ();
     }

코드 블록 2 아래에는 함수 호출이 있습니다.

     {
       Print (OrderTicket());     
       GetLastError ();
     }

Print() 함수는 계속해서 전문가 창에 숫자를 인쇄하고 계속 인쇄합니다. 추가하면 믿었는데...

 if ((OrderStopLoss()== 0 )&&(OrderTakeProfit()== 0 ))

Print() 함수는 바로 아래에 있는 OrderModify() 함수가 실행되면 SL 및 TP가 더 이상 0이 아니며 Print() 함수가 중단되기 때문에 한 번만 실행됩니다.

이제 나는 이것이 프로그램이 실행되는 방식 때문에 그렇지 않다는 것을 깨달았습니다. 프로그램이 위에서 아래로 실행된다는 것을 이해하므로 프로그램이 전체 주기를 처음 완료하면 위에서 아래로 다시 실행을 시도하고 '전문가' 창에 티켓을 인쇄하지 못할 것입니다. USDJPY 통화 쌍에 대한 주문.


고맙습니다.

 
WhooDoo22 :

사이먼,


당신은 문제를 해결하지 않았고, 당신은 그것을 해결했습니다 ...

내가 아직 해결하지 못한 문제는 무엇이라고 생각합니까?

while 루프를 코딩한 방식으로 인해 발생하는 근본적인 문제입니다. . . OrderClose 기능에 대한 잘못된 티켓 및 OrderModify에 대한 알 수 없는 티켓 2를 유발하는 문제는 증상을 해결한 원인을 수정하지 않았습니다.

후두22 :

MarketInfo() 호출은 작동하더라도 잘못되었습니다. . .

MetaEditor 사전 MarketInfo() 함수 예:


죄송합니다. 제 실수입니다. 해당 문제를 해결했습니다. . . 내가 말한 문제가 무엇인지 아십니까?

후두22 :

사이먼,

이것은 무엇을 의미합니까? 이 코드 줄에 대해 어떻게 예상하십니까? 문서를 찾지 않고 대답하십시오.

GetLastError() 함수는 테스트를 실행하는 동안 '전문가' 페이지에 오류를 인쇄합니다. 함수가 오류를 찾지 못하면 영(0)이 인쇄됩니다. 위에서 제공한 스냅샷에 0이 인쇄된 것을 확인하십시오.


아니요, GetLastError()는 로그에 인쇄하지 않습니다. . . it "함수는 마지막으로 발생한 오류를 반환하고 마지막 오류 코드가 저장된 특수 last_error 변수의 값은 0이 됩니다. 따라서 GetLastError()에 대한 다음 호출은 0을 반환합니다."

이미지의 0은 아마도 . . .

 Print (OrderCloseTime());

. . . 그리고 히스토리 풀에서 닫혀 있으므로 더 이상 주문 풀에 없기 때문에 주문이 더 이상 선택되지 않았기 때문에 오류입니다. 하려고 하는 일을 하려면 이와 같은 것이 필요합니다. . .

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
       int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
      
       OrderSelect (ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

       Print (OrderCloseTime());
       GetLastError ();
     }

. . . . 이 두 줄을 추가하고 시도하십시오.

후두22 :

Print() 함수는 계속해서 전문가 창에 숫자를 인쇄하고 계속 인쇄합니다. 추가하면 믿었는데...

 if ((OrderStopLoss()== 0 )&&(OrderTakeProfit()== 0 ))

Print() 함수는 바로 아래에 있는 OrderModify() 함수가 실행되면 SL 및 TP가 더 이상 0이 아니며 Print() 함수가 중단되기 때문에 한 번만 실행됩니다.

이제 나는 이것이 프로그램이 실행되는 방식 때문에 그렇지 않다는 것을 깨달았습니다. 프로그램이 위에서 아래로 실행된다는 것을 이해하므로 프로그램이 전체 주기를 처음 완료하면 위에서 아래로 다시 실행을 시도하고 '전문가' 창에 티켓을 인쇄하지 못할 것입니다. USDJPY 통화 쌍에 대한 주문.

나는 당신이 내 요점을 놓치고 있다고 생각합니다. . . 중괄호를 추가하면 더 명확해질 것입니다. . . 당신은 이것을 했다. . .

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
       {
       if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
       }

   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
       Print (OrderCloseTime());
       GetLastError ();
     }

. . . 이걸 하려고 했지?

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
       {
       if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
       if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
       if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
         Print (OrderCloseTime());
         GetLastError ();
         }
       )
 
WhooDoo22 :

사이먼,

아직 USDJPY 티켓 번호를 인쇄하지 않고 있습니다...


요구 사항은 . . . "티켓 번호를 "USDJPY에 대한 티켓 번호 = " " 형식으로 로그에 인쇄하십시오.

 

사이먼,


while 루프를 코딩한 방식으로 인해 발생하는 근본적인 문제입니다. . . OrderClose 기능에 대한 잘못된 티켓 및 OrderModify에 대한 알 수 없는 티켓 2를 유발하는 문제는 증상을 해결한 원인을 수정하지 않았습니다.

나는 이 문제에 대해 다른 점에 주의를 흐트러뜨리지 않고 문제를 해결하는 데 내 생각을 집중할 수 있도록 그 자체로 이 문제에 대해 자세히 논의하고 싶습니다.


죄송합니다. 제 실수입니다. 해당 문제를 해결했습니다. . . 내가 말한 문제가 무엇인지 아십니까?

네, 올려주셔서 감사합니다!


"함수는 마지막으로 발생한 오류를 반환하고 마지막 오류 코드가 저장된 특수 last_error 변수의 값은 0이 됩니다. 따라서 GetLastError()에 대한 다음 호출은 0을 반환합니다."

MetaEditor 사전은 다음과 같이 읽습니다.

int GetLastError ( )
이 함수는 마지막으로 발생한 오류 를 반환하고 마지막 오류 코드가 저장된 특수 last_error 변수의 값은 0이 됩니다. 따라서 GetLastError()에 대한 다음 호출은 0을 반환합니다.

이 함수는 마지막으로 발생한 오류 를 반환하고 마지막 오류 코드가 저장된 특수 마지막 오류 변수의 값은 0이 됩니다...

녹색은 이해 되고 노란색은 이해되지 않습니다 .


. . . . 이 두 줄을 추가하고 시도하십시오.

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
       int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
      
       OrderSelect (ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

       Print (OrderCloseTime());
       GetLastError ();
     }

할 것이다.


나는 당신이 내 요점을 놓치고 있다고 생각합니다. . . 중괄호를 추가하면 더 명확해질 것입니다. . . 당신은 이것을 했다. . .

이거 하려고 했던거 같은데...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
       {
       if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
       if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
       if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
         Print (OrderCloseTime());
         GetLastError ();
         }
      }

조건을 원했기 때문입니다...

 if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))

중괄호(" { } ") 안의 코드 섹션에 적용됩니다.


요구 사항은 . . . "티켓 번호를 "USDJPY에 대한 티켓 번호 = " " 형식으로 로그에 인쇄하십시오.

그것은 할 수 있습니다.


고맙습니다.

 
WhooDoo22 :


"함수는 마지막으로 발생한 오류를 반환하고 마지막 오류 코드가 저장된 특수 last_error 변수의 값은 0이 됩니다. 따라서 GetLastError()에 대한 다음 호출은 0을 반환합니다."

MetaEditor 사전은 다음과 같이 읽습니다.

int GetLastError ( )
이 함수는 마지막으로 발생한 오류 를 반환하고 마지막 오류 코드가 저장된 특수 last_error 변수의 값은 0이 됩니다. 따라서 GetLastError()에 대한 다음 호출은 0을 반환합니다.

이 함수는 마지막으로 발생한 오류 를 반환하고 마지막 오류 코드가 저장된 특수 마지막 오류 변수의 값은 0이 됩니다...

녹색은 이해 되고 노란색은 이해되지 않습니다 .

좋습니다. 문서에서 볼 수 있듯이 GetLastError()는 아무것도 인쇄하지 않습니다. . . 그것은 단지 오류 번호를 반환 합니다. . . 그래서 그것을 사용하려면 그것으로 뭔가를 해야 합니다. . .

 Print ( "The last error was error number: " , GetLastError ());

//  or . . .

int ErrorNumber = GetLastError ();

//  or . . .

if ( GetLastError () == 130 )

GetLast Error()를 호출하면 오류가 반환되고 마지막 오류를 유지하기 위해 내부적으로 사용하던 변수가 0으로 지워집니다. . . 그래서 당신이 이것을 한 경우. . .

OrderDelete(- 1 );   //  should produce an error 4108 or 3

Print ( "Last error was number " , GetLastError ());     //  should print - Last error was number 4108

Print ( "Last error was number " , GetLastError ());     //  should print - Last error was number 0  the previous call cleared the GetlastError internal variable
 

GetLastError()에 대한 두 번째 호출은 첫 번째 호출이 오류 번호를 보유하는 변수를 0으로 만들 때 0을 반환합니다. . . 또한 가장 최근의 오류만 유지된다는 점에 유의하십시오.

 
WhooDoo22 :


나는 당신이 내 요점을 놓치고 있다고 생각합니다. . . 중괄호를 추가하면 더 명확해질 것입니다. . . 당신은 이것을 했다. . .

이거 하려고 했던거 같은데...

조건을 원했기 때문입니다...

중괄호(" { } ") 내의 코드 섹션에 적용됩니다.

하지만 당신은하지 않았다. . . 디자인에서 놓쳤고 코딩할 때 놓쳤고 코드를 읽고 의도한 대로 작동하는지 확인할 때 놓쳤고 테스트할 때 놓쳤습니다. . . . 중괄호는 손등처럼 알아야 할 기본적인 것 중 하나입니다.

왜 이것을 놓쳤는지 이해하고 그 문제를 해결해야 합니다. . . 코딩 비용을 지불하고 싶지 않은 한, 아무도 당신을 대신해 그렇게 할 수 없습니다.

 

사이먼,


이미지의 0은 아마도 . . .

 Print (OrderCloseTime());


으응! ;)

문서화 차선으로 여행을 떠나볼까요? 하하하.

날짜시간 주문닫기 시간( )
현재 선택한 주문의 마감 시간을 반환합니다. 주문 마감 시간이 0이 아니면 주문이 선택되고 마감되어 계정 기록에서 검색된 것입니다. 미결 및 보류 주문 마감 시간은 0입니다.

참고: 주문은 OrderSelect() 함수로 미리 선택되어 있어야 합니다.


먼저, 내가 최근에 코딩한 OrderClose() 함수 코드 블록을 둘 다 살펴보겠습니다...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
       Print (OrderCloseTime());
     }

다음으로 둘 다 '전문가' 창의 스냅샷에서 표시된 결과를 엿볼 수 있습니다...

&#39;전문가&#39; 창 결과입니다.

Aaah, 우리는 여기에 무엇을 가지고 있습니까? :)


새로 부임한 전문 고문에 대한 답변을 게시해 주십시오. 운동에 포함된 모든 기준을 아직 충족합니까?


while 루프를 코딩한 방식으로 인해 발생하는 근본적인 문제입니다. . . OrderClose 기능에 대한 잘못된 티켓 및 OrderModify에 대한 알 수 없는 티켓 2를 유발하는 문제는 증상을 해결한 원인을 수정하지 않았습니다.

나는 이 문제에 대해 다른 점에 주의를 흐트러뜨리지 않고 문제를 해결하는 데 내 생각을 집중할 수 있도록 그 자체로 이 문제에 대해 자세히 논의하고 싶습니다.


고맙습니다.

사유: