저는 mql4 코딩이 처음이고 첫 번째 EA를 완료했습니다. 지금 내 유일한 문제는 한 쌍 이상의 거래를 열 수 없다는 것입니다. 저널 옆에 있는 터미널의 EA 섹션에서는 EA가 한 쌍에서 잘 열리고 닫히더라도 오류 스트림, orderclose 기능에 대한 잘못된 티켓을 보냅니다. 누구든지 손 좀 빌려주세요.
코드나 오류 로그를 표시하지 않으면 어떻게 알 수 있습니까?
우리는 마음 독자가 아닙니다! 도움이 필요하면 코드와 코드가 제공하는 오류(로그의 결과)를 보여주어야 합니다. 또한 코드를 볼 때 테스트 중인 통화 쌍과 기간을 아는 것도 도움이 됩니다.
또한 MetaTrader 4 에서는 전략 테스터 에서 한 번에 하나의 통화 만 테스트할 수 있습니다. EA가 단일 차트에서 동시에 여러 통화를 거래하는 경우 전략 테스터 에서 테스트할 수 없습니다. 라이브 데모 또는 실제 계정에서만 가능합니다!
Matt_Townsend : 비록 EA가 한 쌍에서 거래를 열고 닫는 것은 괜찮습니다. | 이것이 내가 추천하는 이유입니다 하나의 EA에서 여러 통화를 거래하지 마십시오
|
게시물을 수정하고 SRC 버튼을 사용하여 코드를 추가하세요! 읽기 어렵기 때문에 표준 텍스트로 복사/붙여넣기만 하지 마십시오. 다른 스레드에서 어떻게 수행해야 하는지 알 수 있습니다. SRC 버튼을 사용하여 코드를 게시하십시오.
편집: 이전에 요청한 대로 - ... 테스트 중인 통화 쌍 과 기간을 아는 것도 도움이 됩니다...
EDIT2: 이전에 요청한 대로 - ... 뿐만 아니라 그것이 제공하는 오류(로그의 결과) ...
게시물을 수정하고 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 );
}
//+-----------------------------------------------------------------------------------+
스레드가 너무 길어지지 않도록 새 게시물을 추가하지 말고 이전 게시물을 편집 해 달라고 요청했습니다!
저는 1시간 동안 EURUSD 및 1시간 GBPUSD를 테스트했습니다.
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...
닫기 작업에 대한 결과를 올바르게 확인하고 있지 않습니다.
논리 측면에서 귀하의 EA에는 몇 가지 문제가 있지만 현재로서는 Strategy Tester 에서 오류 없이 실행되고 있으므로 발생하는 오류 목록을 제공하십시오!
다음 코드에 대해 이미 두 가지 컴파일러 경고가 있습니다.
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...
닫기 작업에 대한 결과를 올바르게 확인하고 있지 않습니다.
논리 측면에서 귀하의 EA에는 몇 가지 문제가 있지만 현재로서는 제 입장에서는 오류 없이 실행되고 있으므로 발생하는 오류 목록을 제공하십시오!
EA에서 받은 유일한 오류 는 orderclose 기능 에 대한 잘못된 티켓 옆에 숫자가 있는 것입니다. 실제 로그를 표시하고 싶지만 EA가 실행되는 두 번째 차트에서는 아무 작업도 수행하지 않습니다. 일반적으로 즉시 거래를 시작하려고 시도하기 때문입니다. 로그가 오류로 채워지기 시작하면 실제 로그를 어떻게 표시할까요?
클릭, Ctrl-클릭 또는 Shift-클릭(표준 Windows 작업)으로 해당 라인을 선택한 다음 선택 항목을 마우스 오른쪽 버튼으로 클릭하고 "복사"를 선택하십시오!
편집: 코드와 관련하여 OrderSelect 를 사용하고 있지만 항상 매번 작동한다고 가정합니다. 그리고 작동하지 않을 때는 닫기에서 OrderTicket() 과 같은 주문 세부 정보 기능을 계속 사용합니다. 초기 OrderSelect() 도 실패하면 실패할 수 있습니다. 내가 말했듯이 코드에 많은 논리 문제가 있습니다!
bool ans;
//You do not select an order
{
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);
}
}
EA에서 받은 유일한 오류 는 orderclose 기능 에 대한 잘못된 티켓 옆에 숫자가 있는 것입니다. 실제 로그를 표시하고 싶지만 EA가 실행되는 두 번째 차트에서는 아무 작업도 수행하지 않습니다. 일반적으로 즉시 거래를 시작하려고 시도하기 때문입니다. 로그가 오류로 채워지기 시작하면 실제 로그를 어떻게 표시할까요?
여러 통화 쌍 또는 시간 프레임에서 귀하 EA를 사용하는 것과 관련하여 또 다른 매우 중요한 참고 사항입니다.
귀하의 코드는 "매직 번호" 선택을 사용하지 않으며 기록에서 미결 주문을 확인할 때 사용 중인 기호(또는 "매직 번호"도 확인하지 않음)를 확인하지 않습니다. 따라서 본질적으로 귀하의 EA는 자체 또는 다른 EA와 올바르게 작동하지 않습니다.
있는 그대로, 다른 EA가 실행되지 않고 이 EA만 사용할 수 있습니다. 다른 차트에서도 사용할 수 없습니다!