안녕
이제 이 문제를 해결했습니다. EA를 컴파일하고 백테스트 를 시도했습니다. 그러나 불행히도 그것은 아무것도 사거나 팔지 않습니다!
이 외에도 작동하는 것 같지만 저널은 다음과 같습니다.
14:16:18 EL1 입력: 로트=0.1; 기간=240;
14:16:18 ELine GBPUSD,H4: 삭제됨
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: 성공적으로 로드됨
그리고 이것은 EA 코드입니다:
//+----------------------------------------------- -------------------+
//| T1.mq4
//|
//|
//+----------------------------------------------- -------------------+
extern 이중 랏 = 0.1;
extern int 시간 프레임 = 240;
문자열 strDirCurrent="없음";
문자열 strDirPrevious="없음";
//+----------------------------------------------- -------------------+
//| |
//+----------------------------------------------- -------------------+
정수 시작()
{
// 현재 방향 확인
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
strDirCurrent="긴";
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
strDirCurrent="짧은";
// 이전 방향과 비교하여 변경 사항이 있으면 위치를 엽니다.
if(strDirCurrent=="긴" && strDirPrevious=="짧은")
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200,"EABuyOrder",16384,0,Green);
if(strDirCurrent=="짧은" && strDirPrevious=="긴")
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200,"EASellOrder",16384,0,Red);
strDirPrevious=strDirCurrent;
}
// 끝.
어떤 도움이라도 대단히 환영합니다!!
감사해요
에릭
이 보드의 개발 과정 을 보면 MA를 넘는 코드인 "My_First_EA"를 찾을 수 있습니다.
나는 당신의 EA를 테스트하는 어떤 결과 도 얻을 수 없었고 EA-Proramming도 아주 초보입니다. 죄송합니다
밸류님 감사합니다. NULL의 공간은 복사 및 붙여 넣기에서만 가능하며 내 코드에서는 올바르게 작성되었습니다. 그리고 컴파일합니다(두 번째 버전).
나는 MQL 과정을 알고 있습니다(아직 다 배우지는 못했지만).
테스트를 위해 ADX에 대해 유사한 EA를 작성했으며 작동합니다. 내 사용자 지정 표시기 를 사용하려고 할 때만 거래되지 않습니다..
백테스팅 을 할 수 있도록 표시기를 첨부하세요.
안녕
훌륭한 코드 - 백테스트하고 싶습니다 - 귀하의 icustom Eline을 저희에게 주십시오.
귀하의 코드를 광범위하게 수정했습니다.
/*
* Created by SharpDevelop.
* User: CARDIO
* Date: 1/17/2006
* Time: 4:55 AM
*
*Todo: if there is an ope position - close it- then open in opposite direction.
*
*/
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
#include
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
int cnt, magicEA;
bool isclosing = false;
double slippage = 3;
int init() {
return(0);
}
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
magicEA = 16384;
// check for current direction
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
{
strDirCurrent="long";
}
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
{strDirCurrent="short";
}
// compare to previous direction and open a position if there was a change
if(strDirCurrent=="long" && strDirPrevious=="short")
{
//firs close open positions
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);
return(0);
}
if(strDirCurrent=="short" && strDirPrevious=="long")
{
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);
return(0);
}
strDirPrevious=strDirCurrent;
return(0);
}
// the end.
void isclosing1(){
//Close all open orders
//todo: get a requote on the prices if error 138 occurs, use refreshrates
//todo: check if the last 3 closes where losers - if so stop the ea
int totalOrders = OrdersTotal();
int numPos = 0;
for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...
OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders
if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA
numPos++;
if(OrderType() == OP_BUY) { // Check for close signal for bought trade
if(isclosing) {
if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade
//writetofile("10","Closed buy", OrderTicket());
//prtAlert("Day Trading: Closing BUY order");
} else {
// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));
}
}
} else { // Check sold trade for close signal
if(isclosing) {
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
//writetofile("10","Closed buy", OrderTicket());
// prtAlert("Day Trading: Closing SELL order");
}else {
//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));
}
}
}
}
}
고마워, 이제 나는 이것을 얻는다.
2006.01.17 18:59:10 2006.01.12 08:20 EL1: OrderSend 함수 에 대한 매개변수 7의 잘못된 이중 숫자
2006.01.17 18:59:10 2006.01.12 08:10 EL1: OrderSend 함수에 대한 주석은 문자열이어야 합니다.
2006.01.17 18:59:09 EL1: 성공적으로 로드됨
그리고 오류는 약 백만 번 반복됩니다 ;-)
하지만 이것은 쉽게 고칠 수 있다고 생각합니다.
여전히 수정 중입니다. 잠시만 기다려 주십시오. 지금 게시하겠습니다.
아직 수정 중
안녕
저는 매우 간단한 EA를 코딩하려고 하지만 프로그래머가 아니며 이전에 EA를 만든 적이 없습니다.
MT4에서 MACD 샘플을 가져 와서 일부 부분을 편집하고 필요하지 않다고 생각한 나머지는 모두 삭제했습니다.
내 코드가 정말 끔찍하다고 확신합니다
EA가 다음과 같이 작동하기를 바랍니다.
내 사용자 지정 표시기 ELine에는 단계적으로 이동하는 두 줄이 있습니다. 때로는 하나가 다른 것보다 높거나 때로는 동일합니다.
한 라인이 다른 라인과 교차할 때 교차하는 라인에 따라 EA가 롱 포지션 또는 숏 포지션에 진입하기를 바랍니다.
EA의 시작을 제외하고는 항상 열린 위치가 있습니다.
컴파일하려고 할 때 "if"라고 표시됩니다. 세미콜론이 필요합니다(20,7).
그런 다음 다음 단계에서 새 위치를 열 때 항상 이미 존재하는 위치를 닫아야 하지만 지금까지는 이것을 코딩할 수 없었습니다.
누군가 내 코드의 오류를 수정하고 EA가 새 위치를 입력할 때마다 위치를 닫을 수 있는 방법을 알려줄 수 있습니까?
정말 감사합니다!