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

 
V-Force:
저는 mq4를 처음 사용하고 MACD용 크로스오버가 있을 때 화면에 디스플레이를 만들려고 합니다. 아래는 내 코드이지만 몇 분마다 경고가 계속 나타납니다.

1시간에 한 번만 경고를 표시하도록 코딩하려면 어떻게 해야 합니까? 아니면 막대당 하나의 경고입니까?

정수 시작()

{

문자열 MACD1="";

컬러 콜트9;

이중 MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0);

이중 MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0);

이중 MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1);

이중 MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1);

if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=라임그린; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="IN DOWNTREND"; colt9=빨간색; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="NEW UP CROSSING"; colt9=라임그린; }

if ((MACDM_S11 MACDS_S10)) { MACD1="뉴 다운 크로싱"; colt9=빨간색; }

문자열 MACD2="";

컬러 콜트14;

이중 MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0);

이중 MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0);

이중 MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1);

이중 MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1);

if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=라임그린; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="IN DOWNTREND"; colt14=빨간색; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="NEW UP CROSSING"; colt14=라임그린; }

if ((MACDM_L11 MACDS_L10)) { MACD2="뉴 다운 크로싱"; colt14=빨간색; }

if(MACD1=="NEW UP CROSSING"&&MACD2=="상승세")

Alert(Symbol()," - ","H1:"," MACD MAIN UPTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD1=="뉴 다운 크로싱"&&MACD2=="하락 추세")

Alert(Symbol()," - ","H1:"," MACD MAIN DOWNTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="NEW UP CROSSING"&&MACD1=="인 UPTREND")

Alert(Symbol()," - ","H1:"," MACD, MAIN TREND CHANGE TO UPTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="뉴 다운 크로싱"&&MACD1=="하락 추세")

Alert(Symbol()," - ","H1:"," MACD, MAIN TREND CHANGE TO DOWNTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

반환(0);

}

Minute()==1을 사용하십시오. 상태

 

수정을 위한 트렌드 Alexcud

if (MaH11v < MaH1pr1v){H11v = "V"; co11v = 빨간색; u1x5v = 0; d1x5v = 1;}

if (MaH11v > MaH1pr1v){H11v = " /\\ "; co11v = 파란색; u1x5v = 1; d1x5v = 0;}

if (MaH11v == MaH1pr1v){H11v = "0"; co11v = 녹색; u1x5v = 0; d1x5v = 0;}

안녕하세요 여러분, 트렌드를 수정하려고합니다 alexcud(첨부)

나는 "0"이 있는 3개 대신 2개의 신호만 위아래로 원합니다...

그래서 계산이 더 정확할 수 있습니다 ...

어떤 아이디어?

파일:
 

누군가 이 프로그래밍 라인을 이해하는 데 도움을 줄 수 있습니까? 간단한 영어로

그것은 바가 끝난 후 무언가를 시작하는 EA에 관한 것입니다.

코드는 다음과 같습니다.

날짜/시간 이전=0;

// 완료된 바당 한 번만 실행

if(timeprev==시간[0]) return(0);

timeprev = 시간[0];

MQ4 매뉴얼을 보면 Time[0]은 bar[0]의 오픈 시간 을 추출하기 위한 것입니다. 1970년 1월 1일부터 초로 표시됩니다.

나는 그것이 어떻게 작동하는지 이해하지 못한다. 먼저 "timeprev=0"이 있습니다.

그런 다음 다음 줄 "if (timeprev==Time[0]) return(0).

이때 Time[0]의 값은 얼마입니까? 어떻게 그것이 0("timeprev"의 값)이 될 수 있습니까?

다음 줄은 "timeprev=Time[0]"입니다.

왜 전체 라인이 막대가 끝날 때까지 EA가 아무 것도 하지 않게 만드는 이유는 무엇입니까?

 
crn:
Minute()==1을 사용하십시오. 상태

이것은 여전히 각 막대의 첫 번째 분에 각 틱을 설정합니다. 그러면 숫자가 크게 줄어들 수 있지만 여전히 여러 번 경고합니다.

가장 좋은 방법은 전역 변수(또는 객체)를 설정하고 마지막 막대의 Time[]으로 설정하는 것입니다.

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
안녕,

나는 OrderModify 오류 1을 피할 수 없다: 수정하기 전에 데이터가 다르다는 것을 제어하려고 해도 항상 나타난다! 나는 이중 정규화도 시도했습니다 ... 작동하지 않습니다 ...

이것은 코드입니다:

if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)

{

if (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)

{

Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,녹색);

어떤 제안?

감사해요.

빠른 확인 ... 손익분기점을 너무 짧게 설정하지 않았는지 확인하십시오. MarketInfo(Symbol(),MODE_STOPLEVEL)에 대해 충분히 큰지 확인하십시오.

VPoint의 목적은 무엇입니까? 숫자가 틀리면 문제가 발생합니다. "포인트" 자체는 항상 정확합니다. 해당 번호가 꺼져 있으면 확실히 문제가 발생할 수 있습니다. IE는 실수로 POINT가 실제보다 0 이하입니다.

 

간단한 코딩 질문

주문 선택(5555, SELECT_BY_TICKET);

새로 고침 비율();

if (문의 >= (OrderOpenPrice()+ (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {

주문 닫기(5555,1,문의,10,빨간색); }

if (입찰가 <= (OrderOpenPrice()- (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_SELL)) {

주문종료(5555,1,입찰가,10,파란색); }

그래도 배우려고 노력중...

가격이 공개 가격 에서 5핍 떨어져 있을 때 기본적으로 포지션의 절반(2랏에서 1로)을 마감하는 데 이것이 효과가 있습니까?

감사해요!!!!!!

 

대략적으로 보입니다. 그래도 좀 지저분합니다. 실제로 달성하고자 하는 것에 따라 OrderProfit을 사용할 수도 있습니다.

럭스

추신: 소수점 이하 5자리 중개인을 조심하라는 언급을 잊었습니다. 모든 것에 10을 곱해야 하므로 귀하의 예에서 5는 50이 됩니다. 행운을 빕니다!

 
luxinterior:
대략 맞는 것 같습니다. 조금 지저분합니다. 실제로 달성하고자 하는 것에 따라 OrderProfit을 사용할 수도 있습니다.

럭스

추신: 소수점 이하 5자리 중개인을 조심하라는 언급을 잊었습니다. 모든 것에 10을 곱해야 하므로 귀하의 예에서 5는 50이 됩니다. 행운을 빕니다!

감사합니다

문제는 Windsor 다이렉트를 사용하여 1분 GBP/USD 차트 에서 디버그하기 위해 실행하고 있으며 5핍에 도달할 때 1랏을 닫지 않아 거래가 무엇인지 모릅니다.

또한,

나는 매수를 닫고 즉시 매도를 열려고 하고 있는데 그것도 잘 되지 않습니다.

작동하고 다음은 작동하지 않습니다...

프로그래밍이 훨씬 쉬웠으면 합니다.

만약 (*******************) {

새로 고침 비율();

주문선택(5555,SELECT_BY_TICKET);

if (OrdersTotal() > 0 && OrderType()==OP_BUY) {OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");}

수면(1500);

새로 고침 비율();

if (OrdersTotal() ==0) 티켓 = OrderSend(Symbol(), OP_SELL, lot, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket<0)Print("오류 #로 인해 OrderSend 실패",GetLastError());

}

 

디버깅 지표

저는 이 언어가 처음이고 지표를 작성하려고 합니다. 디버거가 없기 때문에 문제가 있습니다. Print()를 사용하려고 했지만 아무 것도 인쇄되지 않습니다. Alert()를 사용하여 버퍼[1]에 대한 출력으로 ZERO를 얻습니다. 누구든지 나에게 이것을 설명 할 수 있습니까? 어떻게 Print() 및 Alert()를 사용하여 모든 0을 얻지 않고 디버깅할 수 있습니까? 누구든지 아이디어가 있으면 알려주십시오. 정말 고마워.

tigger.longtail@gmail.com

ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i);

ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i);

현재 표시줄 = 시간;

if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == 시간 && 플래그 == 0)

{

Alert("ExtMapBuffer1 =", ExtMapBuffer1," Short is above. ",Hour()," Minute ",Minute());

Alert("ExtMapBuffer2 =", ExtMapBuffer2," Short is above. ",Hour()," Minute ",Minute());

Print("ExtMapBuffer1 = ", ExtMapBuffer1);

Print("ExtMapBuffer2 = ", ExtMapBuffer2);

 

어쨌든 안돼