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

 
저는 mql4 코딩이 처음이고 첫 번째 EA를 완료했습니다. 지금 내 유일한 문제는 한 쌍 이상의 거래를 열 수 없다는 것입니다. 저널 옆에 있는 터미널의 EA 섹션에서는 EA가 한 쌍에서 잘 열리고 닫히더라도 오류 스트림, orderclose 기능 에 대한 잘못된 티켓을 보냅니다. 누구든지 손 좀 빌려주세요.
 
Matt_Townsend :
저는 mql4 코딩이 처음이고 첫 번째 EA를 완료했습니다. 지금 내 유일한 문제는 한 쌍 이상의 거래를 열 수 없다는 것입니다. 저널 옆에 있는 터미널의 EA 섹션에서는 EA가 한 쌍에서 잘 열리고 닫히더라도 오류 스트림, orderclose 기능에 대한 잘못된 티켓을 보냅니다. 누구든지 손 좀 빌려주세요.

코드나 오류 로그를 표시하지 않으면 어떻게 알 수 있습니까?

우리는 마음 독자가 아닙니다! 도움이 필요하면 코드와 코드가 제공하는 오류(로그의 결과)를 보여주어야 합니다. 또한 코드를 볼 때 테스트 중인 통화 쌍과 기간을 아는 것도 도움이 됩니다.

또한 MetaTrader 4 에서는 전략 테스터 에서 한 번에 하나의 통화 만 테스트할 수 있습니다. EA가 단일 차트에서 동시에 여러 통화를 거래하는 경우 전략 테스터 에서 테스트할 수 없습니다. 라이브 데모 또는 실제 계정에서만 가능합니다!

 
Matt_Townsend : 비록 EA가 한 쌍에서 거래를 열고 닫는 것은 괜찮습니다.
이것이 내가 추천하는 이유입니다
하나의 EA에서 여러 통화를 거래하지 마십시오
 
Matt_Townsend : 여기 내 코드가 있습니다. 라이브 데모에서 문제가 발생했습니다. 문제를 해결하기 위해 여러 터미널을 사용할 수 있는지 확인하려고 시도했습니다. 지금까지 피드백 주셔서 감사합니다.

게시물을 수정하고 SRC 버튼을 사용하여 코드를 추가하세요! 읽기 어렵기 때문에 표준 텍스트로 복사/붙여넣기만 하지 마십시오. 다른 스레드에서 어떻게 수행해야 하는지 알 수 있습니다. SRC 버튼을 사용하여 코드를 게시하십시오.

편집: 이전에 요청한 대로 - ... 테스트 중인 통화 쌍 과 기간을 아는 것도 도움이 됩니다...

EDIT2: 이전에 요청한 대로 - ... 뿐만 아니라 그것이 제공하는 오류(로그의 결과) ...

 
Fernando Carreiro :
게시물을 수정하고 SRC 버튼을 사용하여 코드를 추가하세요! 읽기 어렵기 때문에 표준 텍스트로 복사/붙여넣기만 하지 마십시오. 다른 스레드에서 어떻게 수행해야 하는지 알 수 있습니다. SRC 버튼을 사용하여 코드를 게시하십시오.
//+------------------------------------------------------------------+
//|                     Simple Moving Average Crossover Strategy.mq4 |
//|                                                 Matthew Townsend |
//+------------------------------------------------------------------+
#property version    "1.05"
#property strict
//---

//---Inputs
extern    double Lots         = 0.01 ;
extern    int     FastMA       = 5 ;
input    int     FastMAMode   = MODE_EMA ;
extern    int     SlowMA       = 8 ;
input    int     SlowMAMode   = MODE_SMA ;

//+----------------------------------------+
//|undesirables                            |
//+----------------------------------------+
int init()
{
   //----
   //----
   return ( 0 );
}

int deinit()
{
   //----
   //----
   return ( 0 );
}
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


     double fastma, slowma;
     int     ticket, total;
     //---define Ma's
    
    fastma = iMA ( NULL , 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , 0 );
    slowma = iMA ( NULL , 0 , 8 , 0 , MODE_SMA , PRICE_CLOSE , 0 );
    
    total = OrdersTotal ();
     //---Start operations
    
     if (total < 1 )
    {
       if (fastma > slowma)
       {
         ticket = OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 10 , 0 , 0 , "" , 0 , 0 ,Blue);
         if (ticket > 0 )
         {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
             Print ( "Buy order opened : " , OrderOpenPrice ());
         }
         else
           Print ( "Error opening order : " , GetLastError ());
           return ( 0 );
       }
       if (fastma < slowma)
       {
         ticket = OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 10 , 0 , 0 , "" , 0 , 0 ,Red);
         if (ticket > 0 )
         {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
             Print ( "Sell order opened : " , OrderOpenPrice ());
         }
         else
           Print ( "Error opening order : " , GetLastError ());
           return ( 0 );
       }
       return ( 0 );
    }
     bool ans;
    
        
         if ( OrderType ()== OP_BUY )
         {
           while (fastma < slowma)
           {
             ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
             if (ticket < 1 )
             {      
                 if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
                 Print ( "Buy order closed : " , OrderClosePrice ());    
             }    
             else
               Print ( "Error closing order : " , GetLastError ());
               return ( 0 );
           }
         }
       if ( OrderType ()== OP_SELL )
        {
           while (fastma > slowma)
          {
             ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
             if (ticket < 1 )
             {
               if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
               Print ( "Sell order closed : " , OrderClosePrice ());
              
             }
             else
               Print ( "Error closing order : " , GetLastError ());
               return ( 0 );
          }
          
        }
    
     return ( 0 );
}

//+-----------------------------------------------------------------------------------+
 
Fernando Carreiro :
스레드가 너무 길어지지 않도록 새 게시물을 추가하지 말고 이전 게시물을 편집 해 달라고 요청했습니다!
저도 이 포럼을 처음 접해서 죄송합니다. 게시물 2개를 삭제할 수 있나요?
 
Matt_Townsend :
저는 1시간 동안 EURUSD 및 1시간 GBPUSD를 테스트했습니다.
다음 코드에 대해 이미 두 가지 컴파일러 경고가 있습니다.
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...

닫기 작업에 대한 결과를 올바르게 확인하고 있지 않습니다.

논리 측면에서 귀하의 EA에는 몇 가지 문제가 있지만 현재로서는 Strategy Tester 에서 오류 없이 실행되고 있으므로 발생하는 오류 목록을 제공하십시오!

 
Fernando Carreiro :
다음 코드에 대해 이미 두 가지 컴파일러 경고가 있습니다.
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...

닫기 작업에 대한 결과를 올바르게 확인하고 있지 않습니다.

논리 측면에서 귀하의 EA에는 몇 가지 문제가 있지만 현재로서는 제 입장에서는 오류 없이 실행되고 있으므로 발생하는 오류 목록을 제공하십시오!

EA에서 받은 유일한 오류 는 orderclose 기능 에 대한 잘못된 티켓 옆에 숫자가 있는 것입니다. 실제 로그를 표시하고 싶지만 EA가 실행되는 두 번째 차트에서는 아무 작업도 수행하지 않습니다. 일반적으로 즉시 거래를 시작하려고 시도하기 때문입니다. 로그가 오류로 채워지기 시작하면 실제 로그를 어떻게 표시할까요?
 
Matt_Townsend :
EA에서 받은 유일한 오류 는 orderclose 기능 에 대한 잘못된 티켓 옆에 숫자가 있는 것입니다. 실제 로그를 표시하고 싶지만 EA가 실행되는 두 번째 차트에서는 아무 작업도 수행하지 않습니다. 일반적으로 즉시 거래를 시작하려고 시도하기 때문입니다. 로그가 오류로 채워지기 시작하면 실제 로그를 어떻게 표시할까요?

클릭, Ctrl-클릭 또는 Shift-클릭(표준 Windows 작업)으로 해당 라인을 선택한 다음 선택 항목을 마우스 오른쪽 버튼으로 클릭하고 "복사"를 선택하십시오!

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

 

    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에서 받은 유일한 오류 는 orderclose 기능 에 대한 잘못된 티켓 옆에 숫자가 있는 것입니다. 실제 로그를 표시하고 싶지만 EA가 실행되는 두 번째 차트에서는 아무 작업도 수행하지 않습니다. 일반적으로 즉시 거래를 시작하려고 시도하기 때문입니다. 로그가 오류로 채워지기 시작하면 실제 로그를 어떻게 표시할까요?

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

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

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

사유: