코딩에 도움이 필요합니다

 

안녕

저는 매우 간단한 EA를 코딩하려고 하지만 프로그래머가 아니며 이전에 EA를 만든 적이 없습니다.

MT4에서 MACD 샘플을 가져 와서 일부 부분을 편집하고 필요하지 않다고 생각한 나머지는 모두 삭제했습니다.

내 코드가 정말 끔찍하다고 확신합니다

EA가 다음과 같이 작동하기를 바랍니다.

사용자 지정 표시기 ELine에는 단계적으로 이동하는 두 줄이 있습니다. 때로는 하나가 다른 것보다 높거나 때로는 동일합니다.

한 라인이 다른 라인과 교차할 때 교차하는 라인에 따라 EA가 롱 포지션 또는 숏 포지션에 진입하기를 바랍니다.

EA의 시작을 제외하고는 항상 열린 위치가 있습니다.

컴파일하려고 할 때 "if"라고 표시됩니다. 세미콜론이 필요합니다(20,7).

그런 다음 다음 단계에서 새 위치를 열 때 항상 이미 존재하는 위치를 닫아야 하지만 지금까지는 이것을 코딩할 수 없었습니다.

누군가 내 코드의 오류를 수정하고 EA가 새 위치를 입력할 때마다 위치를 닫을 수 있는 방법을 알려줄 수 있습니까?

정말 감사합니다!

파일:
el1.mq4  2 kb
 

안녕

이제 이 문제를 해결했습니다. 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;

}

// 끝.

어떤 도움이라도 대단히 환영합니다!!

감사해요

에릭

 

안녕,

NULL 에서 NUL L을 변경할 때 복사에서 오류가 발생하지 않습니다.

 

이 보드의 개발 과정 을 보면 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()));

}

}

}

}

}

 

수정, 바랍니다

번거로움을 해결했습니다. 이 시도

우리는 여전히 자금 관리 등을 해야 합니다.

파일:
el1.mq4  4 kb
 

고마워, 이제 나는 이것을 얻는다.

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: 성공적으로 로드됨

그리고 오류는 약 백만 번 반복됩니다 ;-)

하지만 이것은 쉽게 고칠 수 있다고 생각합니다.

 

이 시도

나는 코드를 테스트하지 않고 있습니다. 지표를 제공하면 – 테스트할 것입니다. 실제로 곧 다른 지표로 테스트할 것입니다. 그래도 도움이 되기를 바랍니다.

파일:
el1_1.mq4  5 kb
 

여전히 수정 중입니다. 잠시만 기다려 주십시오. 지금 게시하겠습니다.

아직 수정 중

 

수정됨 - 잘하면

실제로 이익실현(tp) 값을 놓치고 있었습니다.

TP와 손절매를 원하지 않습니까?

행운을 빕니다

파일:
el1_2.mq4  5 kb