EA 및 지표 매수/매도 - 페이지 4

 
cifox:
안녕하세요 마스터즈......., EA 공개매수나 공개매도를 한번에 할 수 있게 도와주실 수 있으신가요...

글을 여기로 옮겼습니다.

첫 번째 게시물에서 이 스레드를 읽으면 몇 가지 EA를 찾을 수 있습니다.

 

하루에 한 번만 매수하고 한 번만 매도를 엽니다!

안녕하세요 여러분,

EA에 약간의 문제가 있습니다. 가격 변동을 기반으로 하며 하루 동안 하나 이상의 포지션을 엽니다. 나는 이것을 제한하고 싶지만 어떻게 할 수 있는지 이해하지 못했습니다.

내가하고 싶은 것은 다음과 같습니다.

현재 날짜에 이미 매수 포지션을 연 경우 다른 BUY 포지션을 열지 마십시오. 그러나 매도 신호를 찾으면 매도 신호 를 엽니다. 이 경우 이후에 다른 매도 신호를 찾으면 다른 매도 포지션을 열지 마십시오.

이 글을 쓰는 방법과 올바른 위치가 무엇인지 모르겠습니다. 도와주세요?

정말 감사합니다!!!

문안 인사,

마우로

편집하다:

다른 주제에서 이 코드를 찾았지만 어디에 어떻게 첨부하는지 모르겠습니다.

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

이 주제에는 내가 찾고 있는 것에 관한 것이 없습니다... 이 주제는 동시에 구매 및 판매에 관한 것입니다....하지만 내가 말하는 것은 내가 이미 구매 주문을 연 경우 EA 동안 해당 날짜에는 신규 구매 주문이 없습니다. 이미 판매 주문 을 연 경우에도 마찬가지입니다.

그러나 매수 주문을 열면 낮에는 매도 주문만 열 수 있습니다...위의 규칙에 따라.

예시:

시간: 오늘

EA가 구매 주문을 엽니다.

위치가 TakeProfit 또는 StopLoss에 도달하므로 닫힙니다.

이제 EA는 또 다른 구매 신호를 볼 수 있지만 이전 시간에 이미 구매 주문을 열었음을 확인하고 이 주문을 열지 않습니다.

이제 EA는 SELL 신호를 보고 아직 SELL ORDER를 열지 않았음을 확인하고 SELL 위치를 엽니다.

위치가 TakeProfit 또는 StopLoss에 도달하므로 닫힙니다.

이제 EA는 다른 매도 신호를 볼 수 있지만 이전 시간에 이미 매도 주문을 열었음을 확인하고 이 주문을 열지 않습니다.

이것이 내가 찾는 것입니다....

 

이 경우 2개의 스레드가 필요합니다.

https://www.mql5.com/en/forum/176322

https://www.mql5.com/en/forum/173026

 

네, 답변 주셔서 감사합니다. NewDigital. 이제 내 코드는 다음과 같다고 생각합니다.

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

위의 코드는 매수 포지션만을 위한 것이므로, 이런 식으로 매수 포지션만 열어야 합니다. SELL에 대한 코드에 대해 동일한 작업을 수행하면 판매 위치만 열리겠죠?

당신의 도움을 주셔서 감사합니다.

마우로

 

MMM...메타에디터에서 오류가 있다고 합니다...

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

이 것을 의미한다.

{[/CODE]

and

[CODE]}

불균형하다.

코드를 체크인하십시오 .

제가 코더가 아니라서 많은 도움을 드리지 못해서 죄송합니다.

 

안녕하세요 newdigital...예, 나는 pharentesis에 대해 알고 있습니다....하지만 모든 코드를 확인 했으며 pharentesis가 균형을 이룹니다...

mmm....문제가 어디에 있는지 이해가 되지 않습니다....하지만 계속 확인하겠습니다...해결책을 찾길 바랍니다!

모두 감사합니다...

마우로

 

예를 들어 다음과 같습니다.

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

MT4 디버깅은 골치 아픈 일이지만 인내심이 있다면 문제를 파악할 수 있습니다.

제가 가장 먼저 말하고 싶은 것은 MT4가 당신에게 문제는...그렇지 않다는 것입니다! 다음으로 할 일은 문제를 일으킬 가능성이 가장 높은 복잡한 IF 문에서 엄청난 양의 코드를 잘라내는 것입니다.

예를 들어 내가 가지고있는 경우 ...

if(){

//second if

if(){

//third if

if(){

}

}

}

2와 3이면 잘라내고 1이면 그대로 두겠습니다. 컴파일해 보세요. 컴파일하면 범위를 좁힌 것입니다. 그런 다음 2 & 3을 다시 붙여넣고 3을 잘라냅니다. 다시 테스트합니다. 이 작업을 몇 분 동안 계속하면 결국 문제를 찾을 수 있습니다.

행운을 빕니다.

럭스