EA는 여러 쌍에서 실행되지 않으므로 도움이 필요합니다. - 페이지 2

 
Fernando Carreiro :

여러 통화 쌍 또는 시간 프레임에서 귀하 EA를 사용하는 것과 관련하여 또 다른 매우 중요한 참고 사항입니다.

귀하의 코드는 "매직 번호" 선택을 사용하지 않으며 기록에서 미결 주문을 확인할 때 사용 중인 기호(또는 "매직 번호"도 확인하지 않음)를 확인하지 않습니다. 따라서 본질적으로 귀하의 EA는 자체 또는 다른 EA와 올바르게 작동하지 않습니다.

있는 그대로, 다른 EA가 실행되지 않고 이 EA만 사용할 수 있습니다. 다른 차트에서도 사용할 수 없습니다!

지금까지 제 코드와 시간을 내어 도와주셔서 대단히 감사합니다. 필요한 조정을 하도록 노력하겠습니다.
 
Keith Watford :

    bool ans;

   

         //You do not select an order

         if(OrderType()==OP_BUY)
         {
           while(fastma < slowma)                                 //Use if not while
           {
             ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
             if(ticket < 1)                                        //ticket is a local variable and has not been assigned a value
             {     
                if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                Print("Buy order closed : ", OrderClosePrice());   
             }   
             else
               Print("Error closing order : ", GetLastError());
               return(0);
           }
         }
코드의 닫기 순서 섹션을 논리적으로 다시 작성하십시오. 여기서 가변 티켓을 전혀 사용하지 않아야 합니다.
티켓 변수가 없기 전에 이것을 작성하는 동안 거기에 두는 것이 코드 작동 방식에 영향을 미치는지 확인하고 있었습니다. 귀하의 의견과 시간에 감사드립니다.
 
Matt_Townsend :
지금까지 제 코드와 시간을 내어 도와주셔서 대단히 감사합니다. 필요한 조정을 하도록 노력하겠습니다.

EA에 논리 문제가 너무 많기 때문에 MetaQuotes 의 샘플 코드, 즉 " Moving Average.mq4" 및/또는 "MACD Sample.mq4"를 살펴보고 이해할 때까지 이를 기반으로 구축하는 것이 좋습니다. EA 작동 방식의 기본 원칙.

파일을 첨부했지만 "MQL4\Experts" 폴더에서 찾을 수 있습니다.

파일:
 
Fernando Carreiro :

편집: 코드와 관련하여 OrderSelect 를 사용하고 있지만 항상 매번 작동한다고 가정합니다. 그리고 작동하지 않을 때는 닫기에서 OrderTicket() 과 같은 주문 세부 정보 기능을 계속 사용합니다. 초기 OrderSelect() 도 실패하면 실패할 수 있습니다.

수정 사항을 확인한 후.....

나는 항상 새 틱이 있을 때 OrderSelect()가 손실될 것이라고 가정했습니다.

그래서 확인 하고 주문이 선택되면 후속 새 틱에서도 선택된 상태로 유지된다는 것을 알았습니다.

매일 새로운 것을 배우세요 :)

 
Keith Watford : 편집 내용을 확인한 후.....

나는 항상 새 틱이 있을 때 OrderSelect()가 손실될 것이라고 가정했습니다.

그래서 한 번 주문을 선택하면 이후의 새 틱에서도 계속 선택된 상태로 유지된다는 것을 확인했습니다.

매일 새로운 것을 배우세요 :)

그러나 실제로는 이러한 세부 정보가 시간이 지남에 따라 고정되므로 거의 사용되지 않으므로 다시 선택할 때까지 OrderClosePrice() 와 같은 항목은 업데이트되지 않습니다!
 
OrdersTotal 을 직접 사용하거나 OrderSelect 루프에서 Magic number 필터링을 사용하지 않는다는 것은 코드가 모든 EA와 호환되지 않는다는 것을 의미합니다(다른 차트 및 수동 거래의 자체 포함). 기호 다른 통화가 다른 별도의 차트에 추가될 때 Ordersymbol과 같지 않습니다. - MQL4 포럼
 
Fernando Carreiro :

여러 통화 쌍 또는 시간 프레임에서 귀하 EA를 사용하는 것과 관련하여 또 다른 매우 중요한 참고 사항입니다.

귀하의 코드는 "매직 번호" 선택을 사용하지 않으며 기록에서 미결 주문을 확인할 때 사용 중인 기호(또는 "매직 번호"도 확인하지 않음)를 확인하지 않습니다. 따라서 본질적으로 귀하의 EA는 자체 또는 다른 EA와 올바르게 작동하지 않습니다.

있는 그대로, 다른 EA가 실행되지 않고 이 EA만 사용할 수 있습니다. 다른 차트에서도 사용할 수 없습니다!


     for ( int i= 0 ;i< OrdersTotal ();i++)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
         if ( OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol ()) continue ;
         //---Check Order Type
         if ( OrderType ()== OP_BUY )
         {
           if (fastma < slowma)
           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }
           else
             Print ( "Error : " , GetLastError ());
             return ( 0 );
           break ;
         }
       if ( OrderType ()== OP_SELL )
        {
           if (fastma > slowma)
          {
             if ( OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
            
          }
           else
               Print ( "Error : " , GetLastError ());
               return ( 0 );
           break ;
        }

      } 

다음은 OrderClose 섹션입니다. 더 이상 유효하지 않은 티켓 오류가 발생하지 않지만 이제 유효하지 않은 가격이 표시됩니다.

여기 로그에서 직접 가져온 것입니다.

2016.12.09 10:47:10.243 단순 이동 평균 교차 전략 EURUSDi,H1: OrderClose 기능 에 대한 잘못된 가격 1.05454000


 
Matt_Townsend :

           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }

...

         {

             if ( OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );

 

다음은 OrderClose 섹션입니다. 더 이상 유효하지 않은 티켓 오류가 발생하지 않지만 이제 유효하지 않은 가격이 표시됩니다.

여기 로그에서 직접 가져온 것입니다.

2016.12.09 10:47:10.243 단순 이동 평균 교차 전략 EURUSDi,H1: OrderClose 기능 에 대한 잘못된 가격 1.05454000


닫을 때 Bid/Ask를 사용하지 말고 OrderClosePrice()를 사용하세요. 그것은 자동으로 좋은 가격이 될 것입니다.
 
Alain Verleyen :
마감 시 Bid/Ask를 사용하지 말고 OrderClosePrice()를 사용하십시오. 그것은 자동으로 좋은 가격이 될 것입니다.

OrderClose 함수에서 교체해야 합니까? 그렇다면 그 아래의 인쇄 기능 에서 OrderClosePrice를 제거해야 합니까?

편집하다:

나는 방금 그것을했지만 지금은 어떤 자리도 열지 않을 것입니다. 지금은 여러 쌍에서 작업하는 데 문제가 없지만 위치를 열고 닫습니다.

 

         if ( OrderType ()== OP_BUY )
         {
           if (fastma < slowma)
           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }
           else
             Print ( "Error : " , GetLastError ());
             return ( 0 );
           break ;
         }

루프를 완료해야 하므로 반환 또는 중단을 위한 베드가 없습니다.

또한 오류 인쇄는 다음에 따라 다릅니다.


           if (fastma < slowma)


OrderClose() 실패 여부와 관련이 없는 false



   if(OrderType()==OP_BUY)
     {
      if(fastma<slowma)
        {
         if(OrderClose(OrderTicket(),Lots, OrderClosePrice(),10,clrNONE))
            Print("Order Closed : ",OrderClosePrice());
         else
            Print("Error : ",GetLastError())
        }
     }