Como codificar? - página 199

 
V-Force:
Sou novo no mq4 e estou tentando criar uma exibição na tela quando há um crossover para MACD. Abaixo está meu código, mas os alertas continuam aparecendo a cada poucos minutos.

Como posso codificá-lo para exibir alertas apenas uma vez a cada hora? Ou um alerta por barra?

int start()

{

Cordel MACD1="";

color colt9;

duplo MACDM_S10 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_MAIN, 0);

duplo MACDS_S10 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_SIGNAL,0);

duplo MACDM_S11 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_MAIN, 1);

duplo MACDS_S11 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_SIGNAL,1);

if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=LimeGreen; }

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

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

if ((MACDM_S11 MACDS_S10)) { MACD1="NEW DOWN CROSSING"; colt9=Red; }

MACD2="";

color colt14;

duplo MACDM_L10 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_MAIN, 0);

duplo MACDS_L10 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_SIGNAL,0);

duplo MACDM_L11 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_MAIN, 1);

duplo MACDS_L11 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_SIGNAL,1);

if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=LimeGreen; }

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

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

if ((MACDM_L11 MACDS_L10)) { MACD2="NEW DOWN CROSSING"; colt14=Red; }

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

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

if(MACD1=="NEW DOWN CROSSING"&&MACD2=="IN DOWNTREND")

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

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

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

if(MACD2=="NEW DOWN CROSSING"&&MACD1=="IN DOWNTREND")

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

return(0);

}

Tente UTILIZAR Minuto()==1; em condição

 

Tendência Alexcud para modificar

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

if (MaH11v > MaH1pr1v){H11v = " /\v "; co11v = Azul; u1x5v = 1; d1x5v = 0;}

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

hy everyone, estou tentando modificar a tendência alexcud(attached)

quero apenas 2 sinais para cima e para baixo em vez de 3 com "0".

para que os cálculos possam ser mais precisos...

Alguma idéia ?

Arquivos anexados:
 

Alguém pode me ajudar a entender estas linhas de programação? Em inglês simples

Trata-se de uma EA começando algo depois que um bar tiver terminado.

O código é assim :

datetime timeprev=0;

// Só funciona uma vez por barra completada

if(timeprev==Tempo[0]) retorno(0);

timeprev==Tempo[0];

Ao ver o manual do MQ4, Time[0] é para extrair o tempo aberto da barra [0]. É indicado como segundos a partir de 1 de janeiro de 1970.

Eu não entendo como isso funciona. Primeiro temos "timeprev=0".

Depois a próxima linha "se (timeprev==Time[0]) retornar(0).

Qual é o valor de Time[0] neste momento? Como pode tornar-se 0 (o valor de "timeprev"?

A próxima linha é "timeprev=Time[0]".

Como a linha inteira faz com que a EA não faça nada até que uma barra tenha terminado?

 
crn:
Tente usar o Minuto()==1; em condição

Isto ainda irá desencadear cada tique no primeiro minuto de cada barra. Isso pode reduzir significativamente o número, mas ainda assim alertará várias vezes.

A melhor coisa a fazer é definir uma variável global (ou objeto) e configurá-la para o Tempo[] da última barra.

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
Hi,

Eu não posso evitar o erro OrderModify 1 : sempre aparece mesmo tentando controlar que os dados antes de modificar são diferentes ! Tentei também duplicar a duplicação de dados...não estou trabalhando...

Este é o código:

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

{

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

{

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

Alguma sugestão ?

Obrigado.

Verificação rápida... certifique-se de não estar definindo a distância de breakeven muito curta. Compare-a com MarketInfo(Symbol(),MODE_STOPLEVEL) para ter certeza de que é suficientemente grande.

Qual é a finalidade do VPoint? Se esse número estiver errado, vai estragar as coisas. O "Ponto" por si só sempre estará correto. Se esse número estiver errado, isso definitivamente pode estar causando o problema. IE é acidentalmente 0 ou menos do que o "POINT" na verdade é.

 

SIMPLES questão de codificação

OrderSelect(5555, SELECT_BY_TICKET);

RefreshRates();

se (Perguntar >= (OrderOpenPrice()+ (5 * Ponto)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {

OrderClose(5555,1,Ask,10,Red); }

if (Bid <= (OrderOpenPrice()- (5 * Ponto)) && OrderLots() == 2 && (OrderType() == OP_SELLL)) {

OrderClose(5555,1,Bid,10,Blue); }

Ainda tentando aprender...

este trabalho de basicamente fechar metade (2 lotes para 1) de uma posição quando o preço atinge 5 pips de distância do preço aberto?

AGRADECIMENTO!!!!!!

 

Parece certo. Mas é um pouco confuso. Você também poderia usar OrderProfit, dependendo do que você realmente quer alcançar.

Lux

PS: Esqueci de mencionar os corretores de 5 casas decimais. Tudo precisa ser multiplicado por 10 para que em seu exemplo 5 sejam 50. Boa sorte!

 
luxinterior:
Parece certo. Mas é um pouco confuso. Você também poderia usar OrderProfit, dependendo do que você realmente quer alcançar.

Lux

PS: Esqueci de mencionar para ter cuidado com os corretores de 5 casas decimais. Tudo precisa ser multiplicado por 10 para que em seu exemplo 5 sejam 50. Boa sorte!

Obrigado LUX

O problema é que eu o tenho funcionando apenas para depurar em um gráfico de 1 minuto GBP/USD com Windsor direto e ele não está fechando 1 lote quando atinge os 5 pips então eu não sei qual é o negócio.

TAMBÉM,

Estou tentando fechar uma compra e imediatamente abrir uma VENDA e QUE "TAMBÉM NÃO VAI BEM".

Funciona e depois não...

DESEJO QUE ESTE TERÁ sido MUITO mais fácil de programar

se (*******************) {

RefreshRates();

OrderSelect(5555,SELECT_BY_TICKET);

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

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

Sleep(1500);

RefreshRates();

se (OrdensTotal() ==0) Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket<0)Print("OrderSend failed with error #",GetLastError());

}

 

Indicadores de depuração

Eu sou novo nesta língua e estou tentando escrever um indicador. Estou tendo problemas, já que não há um depurador. Eu tentei usar o Print() mas nada é impresso. Usando o Alerta() recebo ZERO como saída para o buffer[1] . Alguém pode me explicar isto, por favor? Como posso usar a Print() e Alert() para depuração sem obter todos os ZEROs. Se alguém tiver alguma idéia, por favor, me avise. Muito obrigado.

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

Barra de Corrente = Tempo;

if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Tempo && Bandeira == 0)

{

Alerta("ExtMapBuffer1 =", ExtMapBuffer1," Abreviação está Acima. ",Hora()"," Minuto ",Minuto()));

Alert("ExtMapBuffer2 ="," ExtMapBuffer2," Abreviação está Acima. ",Hora()"," Minuto ",Minuto()));

Imprimir("ExtMapBuffer1 = ", ExtMapBuffer1);

Imprimir("ExtMapBuffer2 = ", ExtMapBuffer2);

 

de jeito nenhum.

Razão: