닫힌 막대에서 십자가를 테스트하고 싶었습니다. Shift 1은 첫 번째 닫힌 막대를 의미하고 Shift 2는 그 이전의 첫 번째 막대를 의미합니다. 그리고 닫힌 막대에서 십자가를 테스트하려면 테스트해야 하는 막대입니다.
(diff1*diff2)<0) 현재 : 실제로는 매우 간단합니다.
diff1은 막대 1에 있는 2개의 평균 간의 차이입니다.
diff2는 막대 2에 있는 2개의 평균 간의 차이입니다.
모두 양수 또는 음수일 수 있습니다. 우리가 관심을 갖는 것은 하나는 양수이고 다른 하나는 음수일 때입니다. 이는 평균이 교차했음을 의미하기 때문입니다. 그것들을 곱하면 십자가가 있는 경우 빠른 답을 얻을 수 있습니다(기호가 다르면 결과는 0보다 작음, 부호가 같으면 해당 곱의 결과는 0보다 큼)
이 코드가 수행하는 작업이 명확해졌기를 바랍니다.
tkuan77: 안녕 Mladen, 나는 당신이 나에게 말한 것을 시도했고 그것은 경이롭게 작동합니다. 그러나 나는 코드 뒤에 있는 논리를 잘 이해하지 못합니다. 왜 iMA의 시프트를 1과 2로 설정하고 이것을 코딩합니까: (diff1*diff2)<0)도 마찬가지입니까? 죄송하지만 저는 현재 여전히 학습 문구에 있습니다.
닫힌 막대에서 십자가를 테스트하고 싶었습니다. Shift 1은 첫 번째 닫힌 막대를 의미하고 Shift 2는 그 이전의 첫 번째 막대를 의미합니다. 그리고 닫힌 막대에서 십자가를 테스트하려면 테스트해야 하는 막대입니다.
(diff1*diff2)<0) 현재 : 실제로는 매우 간단합니다.
diff1은 막대 1에 있는 2개의 평균 간의 차이입니다.
diff2는 막대 2에 있는 2개의 평균 간의 차이입니다.
모두 양수 또는 음수일 수 있습니다. 우리가 관심을 갖는 것은 하나는 양수이고 다른 하나는 음수일 때입니다. 이는 평균이 교차했음을 의미하기 때문입니다. 그것들을 곱하면 십자가가 있는 경우 빠른 답을 얻을 수 있습니다(기호가 다르면 결과는 0보다 작음, 부호가 같으면 해당 곱의 결과는 0보다 큼)
이 코드가 수행하는 작업이 명확해졌기를 바랍니다.
도움을 주신 Mladen에게 감사드립니다! 그러나 그 코드를 추가했을 때 내 EA가 약간 엉망이 된 것 같습니다. 때때로 내 스크린샷에 표시된 것과 같이 실제 SL 또는 TP에 도달하기 전에도 자체적으로 SL 또는 TP를 자동으로 실행합니다. 이게 왜 그래?
그 코드는 SL 또는 TP와 아무 관련이 없습니다. 그것은 단순히 십자가에 대한 2개의 평균을 테스트합니다(michaelB도 nan EA이기 때문에 2MACrosses에서 동일한 코드를 사용한 방법 참조). 나머지 코드는 해당 SL 및 TP 오류에 대해 수정해야 합니다.
tkuan77: 도움을 주신 Mladen에게 감사드립니다! 그러나 그 코드를 추가했을 때 내 EA가 약간 엉망이 된 것 같습니다. 때때로 내 스크린샷에 표시된 것과 같이 실제 SL 또는 TP에 도달하기 전에도 자체적으로 SL 또는 TP를 자동으로 실행합니다. 이게 왜 그래?
지표가 아닌 EA를 만드셨기 때문에 마지막 활성 십자가만 표시하고 활성 십자가가 없을 때 화살표를 표시하지 않도록 추가되었습니다. 여러 개의 화살표를 표시할 수 있게 하려면 먼저 지표로 변환한 다음 전체를 다시 작성해야 하지만 차트에 이미 평균 십자형을 표시하는 지표가 많이 있다고 생각합니다.
michaelB: "2MAcrossover with comment"는 정말 잘 작동합니다.
mladen: Terrance 그 코드는 SL 또는 TP와 관련이 없습니다. 그것은 단순히 십자가에 대한 2개의 평균을 테스트합니다(michaelB도 nan EA이기 때문에 2MACrosses에서 동일한 코드를 어떻게 사용했는지 참조). 나머지 코드는 해당 SL 및 TP 오류에 대해 수정해야 합니다.
이미 많은 질문에 대한 답변이 있고 일반적인 EA 작성에 대한 매우 좋은 예를 찾을 수 있다고 생각합니다. 귀하의 질문에 대해 : 귀하의 EA를 테스트하지 않았으므로 모르겠습니다. 다른 사람의 EA를 테스트할 때의 문제는 그 아이디어와 논리를 알아야 하고 코드 자체에서 "읽기"가 불가능한 경우가 많다는 것입니다. 우리가 이야기한 코드 조각은 닫힌 막대에서 2개의 평균 교차를 감지하는 방법에 관한 것이며 그 코드는 그 일을 하고 있을 뿐입니다. 그래서 "SL이나 TP와는 아무 상관이 없다"고 말한 것입니다.
...
테런스
닫힌 막대에서 십자가를 테스트하고 싶었습니다. Shift 1은 첫 번째 닫힌 막대를 의미하고 Shift 2는 그 이전의 첫 번째 막대를 의미합니다. 그리고 닫힌 막대에서 십자가를 테스트하려면 테스트해야 하는 막대입니다.
(diff1*diff2)<0) 현재 : 실제로는 매우 간단합니다.
모두 양수 또는 음수일 수 있습니다. 우리가 관심을 갖는 것은 하나는 양수이고 다른 하나는 음수일 때입니다. 이는 평균이 교차했음을 의미하기 때문입니다. 그것들을 곱하면 십자가가 있는 경우 빠른 답을 얻을 수 있습니다(기호가 다르면 결과는 0보다 작음, 부호가 같으면 해당 곱의 결과는 0보다 큼)
이 코드가 수행하는 작업이 명확해졌기를 바랍니다.
안녕 Mladen, 나는 당신이 나에게 말한 것을 시도했고 그것은 경이롭게 작동합니다. 그러나 나는 코드 뒤에 있는 논리를 잘 이해하지 못합니다. 왜 iMA의 시프트를 1과 2로 설정하고 이것을 코딩합니까: (diff1*diff2)<0)도 마찬가지입니까? 죄송하지만 저는 현재 여전히 학습 문구에 있습니다.
감사합니다
테런스화살표를 추가하는 방법
첨부된 것은 지난 몇 개의 게시물에서 논의된 MA 크로스오버 EA의 축약된 버전입니다.
닫힌 양초에서 크로스오버가 발생하면 이 버전 로그 파일에 메시지를 인쇄합니다.
차트에 위/아래 화살표를 표시하는 코드로 인쇄 논리를 대체할 수 있습니까?
도와주셔서 감사합니다.
...
이 방법을 시도하십시오 ...
화살표가 그려지고 차트의 오른쪽 하단 모서리에 주석이 표시됩니다. 다음과 같습니다(차트에 평균을 추가하여 수행하는 작업을 명확하게 하기 위함).
첨부된 것은 지난 몇 개의 게시물에서 논의된 MA 크로스오버 EA의 축약된 버전입니다.
닫힌 양초에서 크로스오버가 발생하면 이 버전 로그 파일에 메시지를 인쇄합니다.
차트에 위/아래 화살표를 표시하는 코드로 인쇄 논리를 대체할 수 있습니까?
도와주셔서 감사합니다.MA 화살표
"2MAcrossover with comment"는 정말 잘 작동합니다.
한 가지 질문입니다. 화살표가 나타나면 새 양초가 열리면 사라집니다. 의도한 것입니까?
차트의 오른쪽 하단에 있는 댓글이 마음에 듭니다.
다시 한번 감사합니다.
테런스
닫힌 막대에서 십자가를 테스트하고 싶었습니다. Shift 1은 첫 번째 닫힌 막대를 의미하고 Shift 2는 그 이전의 첫 번째 막대를 의미합니다. 그리고 닫힌 막대에서 십자가를 테스트하려면 테스트해야 하는 막대입니다.
(diff1*diff2)<0) 현재 : 실제로는 매우 간단합니다.
모두 양수 또는 음수일 수 있습니다. 우리가 관심을 갖는 것은 하나는 양수이고 다른 하나는 음수일 때입니다. 이는 평균이 교차했음을 의미하기 때문입니다. 그것들을 곱하면 십자가가 있는 경우 빠른 답을 얻을 수 있습니다(기호가 다르면 결과는 0보다 작음, 부호가 같으면 해당 곱의 결과는 0보다 큼)
이 코드가 수행하는 작업이 명확해졌기를 바랍니다.도움을 주신 Mladen에게 감사드립니다! 그러나 그 코드를 추가했을 때 내 EA가 약간 엉망이 된 것 같습니다. 때때로 내 스크린샷에 표시된 것과 같이 실제 SL 또는 TP에 도달하기 전에도 자체적으로 SL 또는 TP를 자동으로 실행합니다. 이게 왜 그래?
감사합니다
테런스
//--- 입력 매개변수
외부 이중 TakeProfit=1000.0;
외부 이중 로트=0.1;
외부 이중 StopLoss=1500.0;
//+----------------------------------------------- -------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- -------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
int mainCrossed (이중 mainline1 , 이중 mainline2)
{
정적 int mainlast_direction = 0;
정적 int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; // 메인 업
if(mainline1<mainline2)maincurrent_dirction = 2; //메인다운
if(maincurrent_dirction != mainlast_direction) //메인 변경됨
{
mainlast_direction = maincurrent_dirction;
반환(mainlast_direction);
}
또 다른
{
리턴(0);
}
}
//+----------------------------------------------- -------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- -------------------+
정수 시작()
{
//----
int cnt, 티켓, 합계;
이중 shortEma, longEma, mainshortEma, mainlongEma;
if(막대<100)
{
Print("100개 미만의 막대");
리턴(0);
}
if(테이크프로핏<10)
{
Print("TakeProfit이 10 미만입니다.");
리턴(0); // TakeProfit 확인
}
정수 isCrossed = 0;
이중 shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
더블 longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
이중 shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
더블 longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
이중 diff1 = shortEma1-longEma1;
이중 diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed(mainshortEma,mainlongEma);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
그렇지 않으면 isCrossed = 2;
}
총계 = OrdersTotal();
if(총 < 1)
{
if(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"내 EA",12345,0,녹색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print(" SELL 주문 이 열렸습니다 : ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
리턴(0);
}
리턴(0);
}
//+----------------------------------------------- -------------------+
테런스
그 코드는 SL 또는 TP와 아무 관련이 없습니다. 그것은 단순히 십자가에 대한 2개의 평균을 테스트합니다(michaelB도 nan EA이기 때문에 2MACrosses에서 동일한 코드를 사용한 방법 참조). 나머지 코드는 해당 SL 및 TP 오류에 대해 수정해야 합니다.
도움을 주신 Mladen에게 감사드립니다! 그러나 그 코드를 추가했을 때 내 EA가 약간 엉망이 된 것 같습니다. 때때로 내 스크린샷에 표시된 것과 같이 실제 SL 또는 TP에 도달하기 전에도 자체적으로 SL 또는 TP를 자동으로 실행합니다. 이게 왜 그래?
감사합니다
테런스
//--- 입력 매개변수
외부 이중 TakeProfit=1000.0;
외부 이중 로트=0.1;
외부 이중 StopLoss=1500.0;
//+----------------------------------------------- -------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- -------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
int mainCrossed (이중 mainline1 , 이중 mainline2)
{
정적 int mainlast_direction = 0;
정적 int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; // 메인 업
if(mainline1<mainline2)maincurrent_dirction = 2; //메인다운
if(maincurrent_dirction != mainlast_direction) //메인 변경됨
{
mainlast_direction = maincurrent_dirction;
반환(mainlast_direction);
}
또 다른
{
리턴(0);
}
}
//+----------------------------------------------- -------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- -------------------+
정수 시작()
{
//----
int cnt, 티켓, 합계;
이중 shortEma, longEma, mainshortEma, mainlongEma;
if(막대<100)
{
Print("100개 미만의 막대");
리턴(0);
}
if(테이크프로핏<10)
{
Print("TakeProfit이 10 미만입니다.");
리턴(0); // TakeProfit 확인
}
int isCrossed = 0;
이중 shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
더블 longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
이중 shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
더블 longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
이중 diff1 = shortEma1-longEma1;
이중 diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed(mainshortEma,mainlongEma);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
그렇지 않으면 isCrossed = 2;
}
총계 = OrdersTotal();
if(총 < 1)
{
if(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"내 EA",12345,0,녹색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
리턴(0);
}
리턴(0);
}
//+----------------------------------------------- -------------------+...
네, 의도적입니다.
지표가 아닌 EA를 만드셨기 때문에 마지막 활성 십자가만 표시하고 활성 십자가가 없을 때 화살표를 표시하지 않도록 추가되었습니다. 여러 개의 화살표를 표시할 수 있게 하려면 먼저 지표로 변환한 다음 전체를 다시 작성해야 하지만 차트에 이미 평균 십자형을 표시하는 지표가 많이 있다고 생각합니다.
"2MAcrossover with comment"는 정말 잘 작동합니다.
한 가지 질문입니다. 화살표가 나타나면 새 양초가 열리면 사라집니다. 의도한 것입니까?
차트 오른쪽 하단에 있는 댓글이 마음에 듭니다.
다시 한번 감사합니다.Terrance 그 코드는 SL 또는 TP와 관련이 없습니다. 그것은 단순히 십자가에 대한 2개의 평균을 테스트합니다(michaelB도 nan EA이기 때문에 2MACrosses에서 동일한 코드를 어떻게 사용했는지 참조). 나머지 코드는 해당 SL 및 TP 오류에 대해 수정해야 합니다.
안녕 믈라덴
내가 TP와 SL을 설정하는 방식이 잘못되었다는 뜻인가요?
문안 인사
테런스
...
테런스
TSD: Lessons 의 이 섹션을 보셨습니까?
이미 많은 질문에 대한 답변이 있고 일반적인 EA 작성에 대한 매우 좋은 예를 찾을 수 있다고 생각합니다. 귀하의 질문에 대해 : 귀하의 EA를 테스트하지 않았으므로 모르겠습니다. 다른 사람의 EA를 테스트할 때의 문제는 그 아이디어와 논리를 알아야 하고 코드 자체에서 "읽기"가 불가능한 경우가 많다는 것입니다. 우리가 이야기한 코드 조각은 닫힌 막대에서 2개의 평균 교차를 감지하는 방법에 관한 것이며 그 코드는 그 일을 하고 있을 뿐입니다. 그래서 "SL이나 TP와는 아무 상관이 없다"고 말한 것입니다.
문안 인사
믈라덴
안녕 믈라덴
내가 TP와 SL을 설정하는 방식이 잘못되었다는 뜻인가요?
문안 인사
테런스MQL 수업 스레드
mladen-- 링크 주셔서 감사합니다!!