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

 

미셸,

시간을 내어 코드를 살펴보고 응답해 주셔서 대단히 감사합니다. 때로는 다른 한 쌍의 눈만 있으면 됩니다! 오류가 누락된 막대를 사용하여 0으로 나눈 것이 맞습니다. 이제 모두 처리되었습니다.

흑백

 

코드 설명 - Ind-Fractals-1

누구든지 이 ( https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4 ) 표시기에서 프랙탈이 어떻게 결정되는지 설명할 수 있습니까? 나는 일반 프랙탈과 마찬가지로 전환점과 실제 프랙탈이 그려지는 사이에 지연이 있음을 알았지 만 그 지연이 얼마나 긴지 알고 싶습니다. 15분 프랙탈은 포인트가 설정된 후 40-50 1분 막대가 그려집니다. 나는 또한 일부 15분 프랙탈이 1시간 프랙탈이 됨에 따라 프랙탈의 색상이 변경된다는 사실을 알게 되었습니다(위치는 변경되지 않음).

 

다음을 코딩하는 방법?

안녕하세요 여러분,

저는 metatrader 4를 처음 접한 사람입니다. mt4 코딩에 대해 잘 모릅니다.

나는 메타 트레이더가 언제 경고를 주기를 원합니다

1. 30일 단순 이동평균선 이 60일 단순이동평균선을 넘어선다.

2. 30일 단순이동평균선이 60일 단순이동평균선 아래로 떨어지는 경우.

누구든지 여기에 코드를 게시하는 데 도움을 줄 수 있습니까?

정말 감사합니다

 
adamk203:
안녕하세요 여러분,

저는 metatrader 4를 처음 접한 사람입니다. mt4 코딩에 대해 잘 모릅니다.

나는 메타 트레이더가 언제 경고를 주기를 원합니다

1. 30일 단순이동평균선이 60일 단순이동평균선을 넘어선다.

2. 30일 단순이동평균선이 60일 단순이동평균선 아래로 떨어지는 경우.

누구든지 여기에 코드를 게시하는 데 도움을 줄 수 있습니까?

정말 감사합니다

왜 이것을 사용하지 않습니까? MA를 입력하고 간단하게 0을 선택하고 선과 화살표를 제공합니다.

파일:
 

많이~~

 
increase:
왜 이것을 사용하지 않습니까? MA를 입력하고 간단하게 0을 선택하고 선과 화살표를 제공합니다.

안녕하세요, 미리 크로스오버 후 2개의 클린캔들이 끝나면 시그널이 나오도록 하고 싶습니다.thx

파일:
gbp_4h.gif  19 kb
 

pls는 내 코드를 수정하는 데 도움이

우선 이 코드는 매우 편리하며 많은 사람들이 좋아할 것이라고 생각합니다. 개선할 수 있도록 도와주세요.

사실, 이 코드는 이미 훌륭하게 작동합니다. 하지만 NO Symbol이 표시된 단순한 Alert 팝업에 지쳤습니다. 그래서 %%%%%%%%% 부분인 시도할 몇 줄을 변경/추가했습니다.

왜, 인쇄하고, 댓글을 달고... 무엇이든, 아무 일도 일어나지 않는지 모르겠습니다.

그리고 이상하게도 "----alert----" 부분에서 UPBREAK 경고를 다른 것으로 변경했지만 여전히 "UP BREAK"로 표시되는 것을 볼 수 있습니다. ---- 확실히 코드를 다시 작성할 때마다 컴파일하고 차트에서 삭제하고 다시 로드합니다.

어떤 아이디어라도?

#property indicator_chart_window

#import "usr32.dll" // %%%%%%%%%%

int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%

#import //%%%%%%%%%%

int PrevAlertTime = 0;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

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

int start()

{

int i=ObjectsTotal();

int redtotal=0,j,typ1;

double price1,price2,up,down;

color col;

string name1,name2,nameup,namedown,warn1,sym=Symbol();

warn1=sym + "Break Up"; //%%%%%%%%%%

Print(sym); //%%%%%%%%%%%

//----make sure exactly 2 red lines on chart---------------------

for (j=0; j<i; j++)

if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)

{ redtotal++;

if (redtotal==1) name1=ObjectName(j);

if (redtotal==2) name2=ObjectName(j);

}

if (redtotal==2)

{

if(ObjectFind("remind")==0) ObjectDelete("remind");

}

else

{

ObjectCreate("remind",OBJ_LABEL,0,0,0);

ObjectSet("remind", OBJPROP_XDISTANCE,0);

ObjectSet("remind", OBJPROP_YDISTANCE,20);

ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);

return(0); // question here: what should I use, 0 or -1 ?

}

//--------decide which line is up / down ---------------------

price1=NormalizeDouble(ObjectGetValueByShift(name1,1),

MarketInfo(Symbol(),MODE_DIGITS));

price2=NormalizeDouble(ObjectGetValueByShift(name2,1),

MarketInfo(Symbol(),MODE_DIGITS));

if (price2>=price1)

{

nameup=name2; namedown=name1;

up=price2; down=price1;

}

else

{ nameup=name1; namedown=name2;

up=price1; down=price2;

}

//-------- alert ----------------------------------------------

if (TimeCurrent() - PrevAlertTime > Period()*60/3)

{

if (Close[1]up)

{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%

Print(Symbol()); // %%%%%%%%%%

PrevAlertTime = TimeCurrent();

}

if (Close[1]>=down && Close[0]<down)

{ Alert("DOWN BREAK",Symbol());

PrevAlertTime = TimeCurrent();

}

}

return(0);

}

 

잘못된 점을 찾았습니다.

일반적으로 "Metaeditor---file---new/open..."을 통해 코드를 생성하거나 편집합니다.

하지만 방금 알았습니다. 차트에 연결한 다음 이 코드의 일부 변경 사항을 적용하면 마침내 더 많은 변경 사항이 차트에 더 이상 영향을 미치지 않습니다(확실히 컴파일했습니다!)----- 하지만 "Metaeditor--navigator--files-- -내 코드 ... "하십시오! 이상하네요. 같은 코드여야 합니다!

 

트레일 코드 도움말

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY) {

//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {

// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);

// break;

//}

if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

} else if (OrderType() == OP_SELL) {

if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||

(OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

} // proc TrailIt()

그것이 바로 코드입니다. 하나의 주문에 대한 첨부 파일에서 볼 수 있듯이 중지를 수정하지만 잘못된 방향으로 수정하기도 하고 고칠 수도 없습니다. 솔루션을 찾는 데 도움을 주시면 정말 감사하겠습니다!!

파일:
ordermodify.txt  40 kb
 

이 시도. 다른 기호로 주문을 수정하려는 것 같습니다. 그렇다면 Bid and Ask는 EA가 첨부된 차트 창의 기호에서만 시장 데이터를 가져옵니다. MarketData(symbol, MODE_BID)를 사용하는 것이 적절한 데이터를 얻는 방법입니다.

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

double bid=MarketInfo(OrderSymbol(),MODE_BID);

double ask=MarketInfo(OrderSymbol(),MODE_ASK);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY)

{

if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

else if (OrderType() == OP_SELL)

{

if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

return;

}