Pergunte! - página 122

 

Olá, sou novo na programação da MQL4 e tenho uma pergunta. Atualmente estou escrevendo um EA. Gostaria de mudar a cor do candelabro quando ele atender aos meus critérios pré-definidos. Também estará bem se puder marcar um sinal "Errow" ou "Check" acima ou abaixo do candelabro. Será que isso é possível? Alguém pode me ajudar? Obrigado.

 
Arquivos anexados:
 

Ajuda com a EA para traçar a média móvel na tela

Olá, estou tentando aprender como programar o MT4 e não consigo descobrir como traçar uma média móvel na tela. Posso conseguir todas as outras linhas e coisas que quero, mas sem média móvel.

Alguém pode me indicar um código de amostra?

Obrigado antecipadamente por sua ajuda.

 

A média móvel é um indicador padrão no Metatrader.

Portanto, encontre este indicador aqui

e anexar à tabela.

Leia esta linha também https://www.mql5.com/en/forum/178706

Arquivos anexados:
 
newdigital:
A média móvel é o indicador padrão no Metatrader.

Então, encontre este indicador aqui

Leia também este tópico https://www.mql5.com/en/forum/178706

Não, você entendeu mal minha pergunta. Eu sei como anexar um indicador, sem problemas. Preciso do código para chamar o indicador de dentro de um EA para que quando eu carregar meu EA, ele automaticamente desenhe o indicador na minha tela.

Espero estar claro desta vez?

 
jwhite1319:
Não, você entendeu mal minha pergunta. Eu sei como anexar um indicador, sem problemas. Preciso do código para chamar o indicador de dentro de um EA para que, quando eu carregar minha EA, ele desenhe automaticamente o indicador na minha tela, espero estar claro desta vez?

Um exemplo de um código que traça 2 MAs no gráfico:

ExtCountedBars=IndicatorCounted();

se (ExtCountedBars<0) retornar(-1);

if (ExtCountedBars>0) ExtCountedBars--;

int pos=Bars-ExtCountedBars-1;

while(pos>=0)

{

ExtMapBuffer1[pos] = iMA(Symbol(),0,MAslow_period,MAslow_shift,MAslow_type,MAslow_price,pos);

ExtMapBuffer2[pos] = iMA(Symbol(),0,MAfast_period,MAfast_shift,MAfast_type,MAfast_price,pos);

pos--;

}

Esperança que ajuda.

FerruFx

 

Estava me perguntando se alguém poderia me ajudar a fazer esta EA aumentar muito à medida que a conta crescia. Assim, ele usaria uma porcentagem ao invés de lotes fixos. Ou apenas dobraria toda vez que a conta dobrasse. Obrigado de antemão

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 1.0;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 200;

extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = True;

extern int TrailingStop = 200;

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

double Buy1_1 = iClose(NULL, 0, Current + 0);

double Buy1_2 = iOpen(NULL, 0, Current + 3);

double Sell1_1 = iClose(NULL, 0, Current + 0);

double Sell1_2 = iOpen(NULL, 0, Current + 0);

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

//| Variable End |

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

//Check position

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

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

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

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

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

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

//| Signal End |

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

//Buy

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;

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

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

if (Order == SIGNAL_SELL && ((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 = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

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

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

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

} else {

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

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

ajuda com o código

Um exemplo de um código que traça 2 MAs no gráfico:

A esperança que ajuda.

Perfeito. Exatamente o que eu precisava. Obrigado, FerruFx!

 

desaparecendo as barras de ferramentas.

Alguém sabe por que minhas barras de ferramentas desaparecem toda vez que eu encerro o MT4? Eu tenho que passar e recarregar as barras de ferramentas quando volto a ligar o MT....

 

compilar o problema

Talvez você possa me ajudar.

Às vezes, quando compilo um novo indicador, o MT4 decide compilar a maioria dos meus indicadores, mas não todos eles. Alguns dos meus indicadores NÃO aparecem na janela do Navigator quando isso acontece, então não posso arrastá-los para um gráfico. Você tem alguma idéia de por que isso pode acontecer?

Tenho que mover alguns indicadores para uma pasta diferente para que todos os meus indicadores que começam com "_TRO_" sejam compilados e apareçam na janela do Navegador. Será que o "_" na frente do nome pode estar causando o problema?