각 통화 쌍에 대한 EA - 통화 쌍당 한 번만 열리는 코드는 무엇입니까? - 페이지 3

 

닫기 메커니즘을 다음에서 변경했습니다.

 for ( int j = 0 ; j < OrdersTotal (); j ++) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ()) continue ;       // Another security    

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose ()

에게

 for ( int k = 0 ; k < OrdersTotal (); k ++) 
   {
       OrderSelect (k, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType () <= OP_SELL &&   OrderSymbol () == Symbol ()) 
      {
         if ( OrderType () == OP_BUY) 
         {   

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose (....)

이제 모든 것이 예상대로 작동합니다. 왜 그런지 이해가 안 가면서도. 두 번째 코드의 추가 줄을 정말로 이해하지 못하기 때문입니다. 하지만 고마워요!

 
grey.unit :

닫기 메커니즘을 다음에서 변경합니다.

에게

이제 모든 것이 예상대로 작동합니다. 감사합니다!

그것은 아마 항상 작동하지 않을 것입니다. . . 미결 주문을 닫거나 루프 내에서 보류 중인 주문을 삭제할 때 카운트다운이 아닌 카운트다운을 해야 합니다. . . 루프를 변경해야 합니다. 그리고 Symbol() 에 대한 핵을 다시 넣어야 합니다. . . 그렇지 않으면 EURUSD에 대한 EA는 잠재적으로 GBPUSD에 대한 주문을 마감하게 됩니다. . . 당신이해야 할 일은 계속 을 제거하는 것입니다. . . 또는 ==!= 로 만드십시오.
 
grey.unit :

닫기 메커니즘을 다음에서 변경했습니다.

에게

이제 모든 것이 예상대로 작동합니다. 왜 그런지 이해가 안 가면서도. 두 번째 코드의 추가 줄을 정말로 이해하지 못하기 때문입니다. 하지만 고마워요!

두 번째 코드는 정확하지만 약간 재미있습니다. MetaEditor, 탐색기 창(Ctrl + D), 사전 탭을 열고 MQL4 참조 > 표준 상수 > 거래 작업 을 선택합니다.

 
RaptorUK :
그것은 아마 항상 작동하지 않을 것입니다. . . 미결 주문을 닫거나 루프 내에서 보류 중인 주문을 삭제할 때 카운트다운이 아닌 카운트다운을 해야 합니다. . . 루프를 변경해야 합니다. 그리고 Symbol() 에 대한 핵을 다시 넣어야 합니다. . . 그렇지 않으면 EURUSD에 대한 EA는 잠재적으로 GBPUSD에 대한 주문을 마감하게 됩니다. . . 당신이해야 할 일은 계속 을 제거하는 것입니다. . . 또는 ==!= 로 만드십시오.

당신을 바로 잡기 위해. 당신이 말하는 것은 첫 번째 코드를 다음과 같이 수정한다는 것입니다.

 for ( int j = 0 ; j < OrdersTotal (); j --) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ())       // Another security    
                 {

//--------------Exit criteria (Exit Buy)    

                    
                 if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;       // Trigger for CloseBuy (more can be added)
                 if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                         if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose (....)

그러면 작동해야합니까?? 내가 이것을 시도했는데 통화 쌍당 하나의 주문을 다시 시작하기 때문입니다.

또는 두 번째 코드를 (k++에서 k--로) 변경하면 통화 쌍당 하나의 거래만 열립니다.

 for ( int k = 0 ; k < OrdersTotal (); k --) 
   {
       OrderSelect (k, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType () <= OP_SELL &&   OrderSymbol () == Symbol ()) 
      {
         if ( OrderType () == OP_BUY) 
         {   
 
grey.unit :

당신을 바로 잡기 위해. 당신이 말하는 것은 첫 번째 코드를 다음과 같이 수정한다는 것입니다.

그러면 작동해야합니까?? 이것을 시도했는데 통화 쌍당 하나의 주문을 다시 시작하기 때문입니다.

또는 두 번째 코드를 (k++에서 k--로) 변경하면 통화 쌍당 하나의 거래만 열립니다.

나는 첫 번째 코드, 당신이 주문을 마감하는 곳에서 사용하고 있는 루프에 대해 이야기하고 있습니다. . . 감소해야 합니다. . . 그렇지 않으면 주문을 놓칠 것입니다. 나는 당신이 계속 을 제거하고 { } 중괄호를 추가한 것을 보았습니다. 아주 좋습니다 :-)

통화 쌍당 하나의 주문 또는 총 하나의 주문을 열 수 있습니까?

 
RaptorUK :

통화 쌍당 하나의 주문 또는 총 하나의 주문을 열 수 있습니까?

네, 물론입니다. 좋아 두 번째 코드:


 for ( int j = 0 ; j < OrdersTotal (); j ++) 
   {
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                           // Analyzing orders:        
               if ( OrderSymbol ()== Symbol ()) continue ;       // Another security    

루프에 대해 이야기할 때 다음을 의미한다고 생각합니다.

 for ( int j = 0 ; j < OrdersTotal (); j ++)

실제로 다음과 같이 변경할 것입니다.

 for ( int j = OrdersTotal ()+ 1 ; j > OrdersTotal (); j --) 
   {

이 라인은 통화 쌍당 하나의 주문만 엽니다(원하는 대로!)

이 문제에 대한 루프가 지금 올바른가요? :

랩터영국 :

그것은 아마 항상 작동하지 않을 것입니다. . . 미결 주문을 닫거나 루프 내에서 보류 중인 주문을 삭제할 때 카운트다운이 아닌 카운트다운을 해야 합니다. . . 루프를 변경해야 합니다. 그리고 Symbol() 에 대한 핵을 다시 넣어야 합니다. . . 그렇지 않으면 EURUSD에 대한 EA는 잠재적으로 GBPUSD에 대한 주문을 마감하게 됩니다. . . 당신이해야 할 일은 계속 을 제거하는 것 입니다. . . 또는 == != 로 만드십시오.
 
grey.unit :

네, 물론입니다. 좋아 두 번째 코드:


루프에 대해 이야기할 때 다음을 의미한다고 생각합니다.

실제로 다음과 같이 변경할 것입니다.

이 라인은 통화 쌍당 하나의 주문만 엽니다(원하는 대로!).

이제 이 문제에 대한 루프가 정확합니까? :

아니, 이렇게 하세요. . .

 for ( int j = OrdersTotal ()- 1 ; j >= 0 ; j --)   // start at OrdersTotal() -1 ,  finish when j = 0

첫 번째 주문 위치는 0이므로 5개의 주문이 있는 경우 위치는 0, 1, 2, 3, 4입니다. . . 그래서 마지막은 OrdersTotal() - 1 입니다. . . 카운트다운을 하려면 OrdersTotal()-1에서 시작하여 0에서 끝납니다.

 
알겠습니다. 도와주셔서 감사합니다!
 
RaptorUK :

아니요, 이렇게 하세요. . .

첫 번째 주문 위치는 0이므로 5개의 주문이 있는 경우 위치는 0, 1, 2, 3, 4입니다. . . 그래서 마지막은 OrdersTotal() - 1 입니다. . . 카운트다운을 하려면 OrdersTotal()-1에서 시작하여 0에서 끝납니다.

따라서 다음과 같이 표시되어야 합니다.

 for ( int j = OrdersTotal ()- 1 ; j = 0 ; j --) 

당신이 이것을 썼기 때문에:

 for ( int j = OrdersTotal ()- 1 ; j >= 0 ; j --) 

아니면 내가 틀렸어?

 
grey.unit :

따라서 다음과 같이 표시되어야 합니다.

당신이 이것을 썼기 때문에:

아니면 내가 틀렸어?

당신은 완전히 틀렸습니다. 귀하의 코드는 실행되지 않습니다 !!!. RaptorUK를 사용하십시오.