Como codificar? - página 18

 

Michel,

Muito obrigado por reservar um tempo para olhar o código e responder. Às vezes tudo o que é preciso é outro par de olhos! Você estava certo de que o erro era a divisão por 0 com uma barra em falta. Tudo isso foi resolvido agora.

BW

 

Explicação do código - Ind-Fractals-1

qualquer um pode explicar como os fractais são determinados neste indicador(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4). eu notei que, como os fractais normais, há um atraso entre o ponto de virada e o fractal real sendo traçado, mas eu gostaria de saber quanto tempo esse atraso é longo. eu acho que um fractal de 15min é traçado 40-50 barras de 1min depois que o ponto é estabelecido. eu também notei que a cor dos fractais muda (embora sua posição não mude), pois cerca de 15min de fractais tornam-se fractais de 1hr.

 

como codificar o seguinte?

Olá a todos,

Sou um recém-chegado ao metatrader 4. Não sei muito sobre codificação no mt4.

quero que a metatrader dê alerta quando

1. Média móvel simples de 30 períodos sobe acima da média móvel simples de 60 períodos.

2. 30 período média móvel simples cai abaixo da média móvel simples período 60 período média móvel simples.

Alguém pode me ajudar a postar o código aqui?

Muito obrigado.

 
adamk203:
Olá a todos,

Sou um recém-chegado ao Metatrader 4. Não sei muito sobre codificação no mt4.

quero que a metatrader dê alerta quando

1. Média móvel simples de 30 períodos sobe acima da média móvel simples de 60 períodos.

2. 30 período média móvel simples cai abaixo da média móvel simples período 60 período média móvel simples.

Alguém pode me ajudar a postar o código aqui?

muito obrigado

Por que não usar isto? coloque em seu MA e escolha 0 para simples, lhe dá linhas e flechas

Arquivos anexados:
 

o lote~~~

 
increase:
Por que não usar isto? coloque em seu MA e escolha 0 para simples, dá-lhe linhas e flechas

Olá, gostaria de fazer o sinal subir quando as duas velas limpas tiverem sido concluídas após o cruzamento com antecedência.

Arquivos anexados:
gbp_4h.gif  19 kb
 

pls ajudam a corrigir meu código

Antes de tudo, acredito que este código é muito útil, muitos ppl irão adorá-lo. Portanto, por favor, ajude-me a melhorá-lo.

Na verdade, este código já funciona muito bem. Mas estou apenas cansado do simples popup Alerta, com o símbolo NO Symbol mostrado. Então eu mudei/adicionei algumas linhas para tentar, que é a parte %%%%%%%%%.

Não sei por que, imprimir, comentar... o que quer que seja, nada acontece.

E, estranhamente, você pode ver na parte "----alert----", eu mudei o alerta UPBREAK para outra coisa, mas ele ainda mostra "UP BREAK". ---- Tenho certeza que toda vez que reescrevo o código, eu o compenso, deleto-o do gráfico e o carrego novamente.

Alguma idéia?

#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);

}

 

Encontrei o que está errado:

Normalmente, eu crio ou edito um código por: "Metaeditor---arquivo---novo/aberto..."

Mas eu apenas descobri: depois de anexar ao gráfico, e então algumas mudanças neste código, finalmente mais mudanças não afetam mais o gráfico (certamente eu compilei !)----- mas "Metaeditor--navigator--files---meu código..." fazem ! Isso é estranho, eles deveriam ser o mesmo código!

 

Ajuda com o código da trilha

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()

Esse é o código. Como visto no anexo de uma ordem, ele modificará a parada mas também a modificará na direção errada e eu não posso consertá-la. Eu realmente apreciaria a ajuda para encontrar a solução!!

Arquivos anexados:
ordermodify.txt  40 kb
 

Tente isto. Parece que você possivelmente está tentando modificar os pedidos com símbolos diferentes. Se assim for, o Bid and Ask estará puxando os dados do mercado apenas do símbolo da janela do gráfico que a EA está anexada. Usando MarketData(símbolo, MODE_BID) é a maneira de obter os dados apropriados.

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;

}
Razão: