코딩하는 방법? - 페이지 298

 
mladen:
테런스

TSD: Lessons 의 이 섹션을 보셨습니까?

이미 많은 질문에 대한 답변이 있고 일반적인 EA 작성에 대한 매우 좋은 예를 찾을 수 있다고 생각합니다. 귀하의 질문에 대해 : 귀하의 EA를 테스트하지 않았으므로 모르겠습니다. 다른 사람의 EA를 테스트할 때의 문제는 그 아이디어와 논리를 알아야 하고 코드 자체에서 "읽기"가 불가능한 경우가 많다는 것입니다. 우리가 이야기한 코드 조각은 닫힌 막대에서 2개의 평균 교차를 감지하는 방법에 관한 것이며 그 코드는 그 일을 하고 있을 뿐입니다. 그래서 "SL이나 TP와는 아무 상관이 없다"고 말한 것입니다.

문안 인사

믈라덴

안녕하세요 Mladen님, 다시 한 번 번거롭게 해서 죄송합니다. 내 코드를 살펴보니 내 TP와 SL뿐만 아니라 때때로 내 매수 및 매도 주문도 꺼져 있습니다. 나는 당신이 codersgurus와 내가 가지고 있었고 내 코드를 기반으로 한 동일한 튜토리얼 세트에서 나에게 준 강의에 대한 링크를 살펴 보았습니다. 심각하게 코드에서 내 오류의 원인을 찾을 수 없는 것 같습니다.

MA의 십자가는 Long 및 Short 주문과 함께 작동해야 하는 것처럼 작동하지만, 테스트하기 위해 기본 ASK 기능을 수행한 경우에도 입력 및 종료가 엉망이 되는 경우가 있습니다. 여기에서 빛을 비춰주세요.

감사합니다.

테런스

 

...

테런스

첫 번째 : 귀하의 브로커 ECN/STP는 어떻습니까? 그렇다면 손절매를 배치하고 주문 개설과 함께 이익 을 얻을 수 없지만 먼저 0으로 설정된 주문을 열고 손절매를 설정하고/하거나 이미 열린 주문에 대해 이익을 얻기 위해 OrderModify()를 사용해야 합니다. .

두 번째 : 또한 터미널 창의 전문가 탭에 기록된 내용이 있는지 항상 확인하십시오(일부 오류가 거기에 기록되어 있는지 확인하십시오. 그러면 무슨 일이 일어나고 왜 그런지 알게 될 것입니다.

세 번째 : 다음과 같이 줄을 배치하는 것이 좋습니다.

int err=GetLastError(); Print(err);

각 주문 관리 기능 후에. 전문가/include/stderror.mqh 파일에서 찾을 수 있는 오류 설명(주문과 함께 발생할 수 있는 많은 오류가 있습니다(가능한 오류 코드 및 설명 목록 참조). 가능한 각각의 모든 오류를 모니터링해야 함) 알려진 오류 코드(위의 코드 줄), 무슨 일이 일어나고 있는지 추측하는 대신 특정 오류 수정에 집중할 수 있습니다.

tkuan77:
안녕하세요 Mladen님, 다시 한 번 번거롭게 해서 죄송합니다. 내 코드를 살펴보니 내 TP와 SL뿐만 아니라 때때로 내 매수 및 매도 주문도 꺼져 있습니다. 나는 당신이 codersgurus와 내가 가지고 있었고 내 코드를 기반으로 한 동일한 튜토리얼 세트에서 나에게 준 강의에 대한 링크를 살펴 보았습니다. 심각하게 코드에서 내 오류의 원인을 찾을 수 없는 것 같습니다.

MA의 십자가는 Long 및 Short 주문과 함께 작동해야 하는 것처럼 작동하지만, 테스트하기 위해 기본 ASK 기능을 수행한 경우에도 입력 및 종료가 엉망이 되는 경우가 있습니다. 여기에서 빛을 비춰주세요.

감사합니다

테런스
파일:
terminal_1.gif  62 kb
 
mladen:
테런스

첫 번째 : 귀하의 브로커 ECN/STP는 어떻습니까? 그렇다면 손절매를 배치하고 주문 개설과 함께 이익을 얻을 수 없지만 먼저 0으로 설정된 주문을 열고 손절매를 설정하고/하거나 이미 열린 주문에 대해 이익을 얻기 위해 OrderModify()를 사용해야 합니다. .

두 번째 : 또한 터미널 창의 전문가 탭에 기록된 내용이 있는지 항상 확인하십시오(일부 오류가 거기에 기록되어 있는지 확인하십시오. 그러면 무슨 일이 일어나고 왜 그런지 알게 될 것입니다.

세 번째 : 다음과 같이 줄을 배치하는 것이 좋습니다.

int err=GetLastError(); Print(err);
각 주문 관리 기능 후에. 전문가/include/stderror.mqh 파일에서 찾을 수 있는 오류 설명(주문과 함께 발생할 수 있는 많은 오류가 있습니다(가능한 오류 코드 및 설명 목록 참조). 가능한 각각의 모든 오류를 모니터링해야 함) 알려진 오류 코드(위의 코드 줄), 무슨 일이 일어나고 있는지 추측하는 대신 특정 오류 수정에 집중할 수 있습니다.

안녕 믈라덴

ECN/STP 문제를 지적해 주셔서 감사합니다. 나는 당신이 그것을 언급하기 전까지 그것들에 대해 몰랐습니다. 나는 당신이 제안한 것처럼 변경을 수행했지만 지금은 나에게 최악의 상황이 되었습니다. 입장 및 퇴장 문제가 계속될 뿐만 아니라 현재 SL이 누락되었습니다. 이게 생각보다 어렵네요.

//--- 입력 매개변수

외부 이중 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,0,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,0,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print(" SELL 주문 이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

for(cnt=0;cnt<전체;cnt++)

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // 롱 포지션 오픈

{

OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,바이올렛);

// 닫기 위치

리턴(0); // 출구

}

else // 숏 포지션으로 이동

{

OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,바이올렛);

// 닫기 위치

리턴(0); // 출구

}

}

}

리턴(0);

}

//+----------------------------------------------- -------------------+

 
mladen:
테런스

첫 번째 : 귀하의 브로커 ECN/STP는 어떻습니까? 그렇다면 손절매를 배치하고 주문 개설과 함께 이익을 얻을 수 없지만 먼저 0으로 설정된 주문을 열고 손절매를 설정하고/하거나 이미 열린 주문에 대해 이익을 얻기 위해 OrderModify()를 사용해야 합니다. .

두 번째 : 또한 터미널 창의 전문가 탭에 기록된 내용이 있는지 항상 확인하십시오(일부 오류가 거기에 기록되어 있는지 확인하십시오. 그러면 무슨 일이 일어나고 왜 그런지 알게 될 것입니다.

세 번째 : 다음과 같이 줄을 배치하는 것이 좋습니다.

int err=GetLastError(); Print(err);
각 주문 관리 기능 후에. 전문가/include/stderror.mqh 파일에서 찾을 수 있는 오류 설명(주문과 함께 발생할 수 있는 많은 오류가 있습니다(가능한 오류 코드 및 설명 목록 참조). 가능한 각각의 모든 오류를 모니터링해야 함) 알려진 오류 코드(위의 코드 줄), 무슨 일이 일어나고 있는지 추측하는 대신 특정 오류 수정에 집중할 수 있습니다.

Hey Mladen, 며칠간 도움을 주셔서 감사합니다. 내 코드에서 입력 및 종료 오류를 일으키는 오류를 찾았습니다 .

문안 인사

테런스

 

1개 이상의 거래 열기

안녕 모두, 나는 내 EA가 여러 거래를 열 수 있도록 노력하고 있지만 지금까지 나는 1 거래로 제한할 수 있습니다.

내 목표는 간단합니다.

LWMA 10이 LWMA 20 아래로 교차할 때 시스템은 LWMA 10과 20이 모두 SMA 50 아래로 교차하고 긴 거래의 경우 그 반대의 경우에 매도합니다.

EA를 2개 이하의 거래로 제한하고 싶지만 코드를 변경하면 기준당 1개의 거래가 열리는 대신 한 번에 2개의 거래가 열립니다.

카운터 시스템이나 다른 것을 설정해야 합니까? 아니면 내 거래 중 하나에 이미 TP 또는 SL이 있을 때 반응하도록 카운터를 설정하려면 어떻게 해야 합니까?

누군가 내 코드에 문제가 있는지 알려주세요.

많은 감사와 안부

테런스

//--- 입력 매개변수

외부 이중 TakeProfit=500.0;

외부 이중 로트=0.1;

외부 이중 StopLoss=500.0;

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

//----

int cnt, 티켓, 합계;

이중 shortEma, longEma, mainshortEma, mainlongEma;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

if(테이크프로핏<10)

{

Print("TakeProfit이 10 미만입니다.");

리턴(0); // TakeProfit 확인

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

정수 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,50,0,MODE_SMA,PRICE_CLOSE,0);

if ((diff1*diff2)<0)

{

if (shortEma1>longEma1)

isCrossed = 1;

그렇지 않으면 isCrossed = 2;

}

총계 = OrdersTotal();

if(총 < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,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 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print(" SELL 주문 이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

if(총 == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,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 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

리턴(0);

}

//+----------------------------------------------- -------------------+

 

질문

믈라덴,

나는 당신이 나에게 보여준 링크 아래에서 수업을 찾으려고 노력하고 있지만 그것들은 일반적인 수업이며, 특히 Henderson의 지표에 대한 정보를 찾고 있습니다...

또한 게시된 스레드를 살펴본 후 다음 사항을 알고 싶습니다.

-간단하고 이해하기 쉬운 언어로 대략 몇 개의 막대가 지나고 색이 변하는지 묻고 싶습니다.

즉, 선의 색상이 파란색에서 분홍색으로 바뀌기까지 최대 몇 개의 막대가 필요합니까? 불행히도 나는 멋진 용어를 이해하지 못하며 전략을 계속 진행하고 시작할 수 있는 매우 간단한 대답을 듣겠습니다. 모든 차트는 높이 평가됩니다. premalmunshaw@yahoo.com 은 제 이메일 주소입니다.

이 패키지를 활성화하는 데 39달러를 지불하려고 합니다.

긍정적인 답변을 기대합니다!

문안 인사,

프리멀 먼쇼

mladen:
솔직히 말해서 나는 당신이 묻는 것을 이해하지 못합니다

언제 색이 바뀌냐고 묻는다면 답은 기울기가 변할 때입니다.

색상을 변경하도록 코딩된 방법을 묻는 경우 이 섹션에서 찾아야 하는 답변: 수업 .
 

...

불행히도 나는 귀하의 질문을 이해하지 못하므로 내가 할 일은 다시 인용하는 것뿐입니다(계산 길이는 Henderson의 필터 계산 길이를 나타냄).

계산 길이가 5이면 마지막 2개의 막대가 변경될 수 있습니다.

계산 길이가 7이면 마지막 3개 막대가 변경될 수 있습니다.

계산 길이가 9이면 마지막 4개 막대가 변경될 수 있습니다.

그보다 간단한 것은 대답할 수 없습니다. 그리고 Henderson의 필터가 어떻게 계산되는지 더 간단한 설명은 없습니다. "1+1 = 2"의 관점에서 푸리에 변환을 설명하려고 하면 그렇게 될 것입니다. 제공된 링크를 확인하십시오.

나머지: 필터 뒤에 있는 수학에 대한 링크를 얻었고, 얼마나 많은 막대가 다시 계산되었는지에 대한 정보를 얻었고, 엘리트 섹션 뉴스 스레드에서 예제도 얻었습니다. 해당 필터를 사용하는 전략으로 : 나는 재계산 지표(SSA, Henderson의 필터, 중심 TMA, 푸리에 변환, 회귀 분석 등)가 "시그널링 모드"에서 사용되어서는 안 된다고 1000개의 게시물에서 1000번 말했습니다. "추정 모드". Henderson의 필터에서 나온 신호를 쫓는다면 완전히 잘못된 길을 가고 있는 것이며 이것이 엘리트 섹션 구독을 고려하는 유일한 이유라면 구독하지 않는 것이 좋습니다.

추신: 이메일을 공개하는 것은 나쁜 습관입니다. 그렇게 하면 이메일 상자에 엄청난 양의 스팸 메시지만 수신됩니다.

__________________________________________

거래 시스템에 대한 귀하의 탐구에 최선을 다하기를 바랍니다

문안 인사

믈라덴

premalmunshaw:
믈라덴,

나는 당신이 나에게 보여준 링크 아래에서 수업을 찾으려고 노력하고 있지만 그것들은 일반적인 수업이며, 특히 Henderson의 지표에 대한 정보를 찾고 있습니다...

또한 게시된 스레드를 살펴본 후 다음 사항을 알고 싶습니다.

-간단하고 이해하기 쉬운 언어로 대략 몇 개의 막대가 지나고 색이 변하는지 묻고 싶습니다.

즉, 선의 색상이 파란색에서 분홍색으로 바뀌기까지 최대 몇 개의 막대가 필요합니까? 불행히도 나는 멋진 용어를 이해하지 못하며 전략을 계속 진행하고 시작할 수 있는 매우 간단한 대답을 듣겠습니다. 모든 차트는 높이 평가됩니다. premalmunshaw@yahoo.com 은 제 이메일 주소입니다.

이 패키지를 활성화하는 데 39달러를 지불하려고 합니다.

긍정적인 답변을 기대합니다!

문안 인사,

프리멀 먼쇼
 

믈라덴,

내 거래에 TP 또는 SL이 있을 때 카운터 점프를 트리거할 수 있도록 내 거래에 카운터를 설정할 수 있는 방법이 있습니까?

문안 인사

테런스

tkuan77:
안녕 모두, 나는 내 EA가 여러 거래를 열 수 있도록 노력하고 있지만 지금까지 나는 1 거래로 제한할 수 있습니다.

내 목표는 간단합니다.

LWMA 10이 LWMA 20 아래로 교차할 때 시스템은 LWMA 10과 20이 모두 SMA 50 아래로 교차하고 긴 거래의 경우 그 반대의 경우에 매도합니다.

EA를 2개 이하의 거래로 제한하고 싶지만 코드를 변경하면 기준당 1개의 거래가 열리는 대신 한 번에 2개의 거래가 열립니다.

카운터 시스템이나 다른 것을 설정해야 합니까? 아니면 내 거래 중 하나에 이미 TP 또는 SL이 있을 때 반응하도록 카운터를 설정하려면 어떻게 해야 합니까?

누군가 내 코드에 문제가 있는지 알려주세요.

많은 감사와 안부

테런스

//--- 입력 매개변수

외부 이중 TakeProfit=500.0;

외부 이중 로트=0.1;

외부 이중 StopLoss=500.0;

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

//----

int cnt, 티켓, 합계;

이중 shortEma, longEma, mainshortEma, mainlongEma;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

if(테이크프로핏<10)

{

Print("TakeProfit이 10 미만입니다.");

리턴(0); // TakeProfit 확인

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);

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,50,0,MODE_SMA,PRICE_CLOSE,0);

if ((diff1*diff2)<0)

{

if (shortEma1>longEma1)

isCrossed = 1;

그렇지 않으면 isCrossed = 2;

}

총계 = OrdersTotal();

if(총 < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,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 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

if(총 == 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,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 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

리턴(0);

}

//+----------------------------------------------- -------------------+
 

...

기능을 사용해 보세요.

int countOpenedOrders(int type)

{

int openedOrders = 0;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
다음을 확인할 수 있습니다.
openBuys==0인 경우 공개 매수

openSells==0인 경우 공개 판매

tkuan77:
믈라덴,

내 거래에 TP 또는 SL이 있을 때 카운터 점프를 트리거할 수 있도록 내 거래에 카운터를 설정할 수 있는 방법이 있습니까?

문안 인사

테런스
 

안녕 믈라덴

"바" 기능을 사용하여 다른 방법을 생각해 냈습니다. 거래가 트리거되면 막대 기능 으로 정수 카운트를 설정하고(예: 구매 거래는 막대 122에서 트리거되므로 카운트는 122가 됨) 내 기준이 다시 트리거되면 막대 기능을 다시 호출합니다. 카운트와 비교하면 새 카운트가 이전 카운트(이 경우 122)보다 높은 경우에만 거래가 트리거됩니다.

그러나 여전히 기준당 1개가 아닌 2개의 거래를 함께 트리거하고 있습니다. 왜 그런가요?

도와주세요

감사합니다

테런스

//--- 입력 매개변수

외부 이중 TakeProfit=530.0;

외부 이중 로트=0.1;

외부 이중 StopLoss=520.0;

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

//----

int cnt, 티켓, 합계;

이중 shortEma, longEma, mainshortEma, mainlongEma;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

if(테이크프로핏<10)

{

Print("TakeProfit이 10 미만입니다.");

리턴(0); // TakeProfit 확인

}

shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);

정수 isCrossed = 0;

이중 shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);

더블 longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1);

이중 shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);

더블 longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2);

이중 diff1 = shortEma1-longEma1;

이중 diff2 = shortEma2-longEma2;

mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);

if ((diff1*diff2)<0)

{

if (shortEma1>longEma1)

isCrossed = 1;

그렇지 않으면 isCrossed = 2;

}

int BarCounter, BarCounter2;

총계 = OrdersTotal();

if(총 < 1)

{

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"내 EA",12345,0,녹색);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());

BarCounter = 막대;

}

else Print("구매 주문 열기 오류: ",GetLastError());

리턴(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

BarCounter = 막대;

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

if(총 == 1)

{

BarCounter2 = 막대;

if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"내 EA",12345,0,녹색);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());

BarCounter = BarCounter2;

}

else Print("구매 주문 열기 오류: ",GetLastError());

리턴(0);

}

if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

BarCounter = BarCounter2;

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

리턴(0);

}

mladen:
이 기능을 사용해 보세요.
int countOpenedOrders(int type)

{

int openedOrders = 0;

for(int i=0; i < OrdersTotal(); i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;

if(OrderSymbol() != Symbol()) continue;

if(OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == type) openedOrders++;

}

return(openedOrders);

}

[/PHP]

To count opened buy orders, call it like this :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
다음을 확인할 수 있습니다.
openBuys==0인 경우 공개 매수

openSells==0인 경우 공개 판매

사유: