Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Estou tentando aprender o MQ4. Meu primeiro programa simples é suposto lançar um alerta quando 2 MAs se cruzam. Eu não consigo entender por que
este código não está funcionando.
Qualquer ajuda será realmente apreciada! Agradecemos antecipadamente.
Exterior int Período_MA1 = 5;
extern int Período_MA2 = 1;
duplo MA1;
duplo MA2;
int int init()
{
retorno(0);
}
//+------------------------------------------------------------------+
int deinit()
{
retorno(0);
}
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);
MA2=iMA(NULL,0,Período_MA2,0,MODE_SMA,PRICE_CLOSE,0);
//--------------------------------------------------------------------
se (MA2 == MA1 )
Alerta("Preço é o mesmo(",Período_MA2,")");// Alerta
retornar;
}Olá Lincoln2012,
Pode verificar o código desta Cruz Ma
Estou tentando aprender MQ4. Meu primeiro programa simples é suposto lançar um alerta quando 2 MAs se cruzam. Eu não consigo entender por que
este código não está funcionando.
}A chave para codificar uma cruz de quaisquer 2 linhas indicadoras é este conceito:
1. Se a linha de barra atual1>linha2, e a linha de barra anterior1<linha2, então existe uma cruz para cima.
2. Se a linha de barras atual1 linha2, então há uma cruz para baixo.
oi
bem, eu estava fazendo pouca programação no Mt4 sua diversão, mas não sou a favor apenas da simples edição do antigo indicador. Ok, eu quero fazer um indicador simples, mas não sei como fazê-lo.
seu indicador simples ele simplesmente verifica o valor se o valor de todas as variáveis são iguais ele desenha aquele ponto onde o valor de todas as variáveis combina.
minha solução simples
vamos supor que temos variáveis
duplo movimentoavg1;
double movingavg12;
double moveavg13;
double moveavg14;
double moveavg15;
double moveavg16;
double moveavg17;
double moveavg18;
double moveavg19;
double moveavg10;
double moveavgall;
declaramos a variável que estou apenas dando um exemplo que estou usando iStochastic(1), mas podemos usar para qualquer indicador.
movingavg12=iStochastic(1)
movavg13=iStochastic(2)
.
.
.
... e assim por diante
agora
if (movingavg12=movingavg13=movingavg14,....) (colocar valor na variável "movingavgall") //put o valor que é igual para vria
draw movavgall em barras
Aplicação
vamos supor que eu queira verificar onde a média móvel 3 e a média móvel 5 têm o mesmo valor
mesmo este indicador pode ser usado com RSI onde o valor RSI 1 e RSI 2 = 80
e muito mais
mesmo se adicionarmos o MTF que será adicionado bônus
parece simples por escrito, mas não fui capaz de encontrar a solução espero que alguém possa ajudar
espero que vocês entendam o que estou dizendo
obrigadoUma vez que você tenha valores para comparar, você usaria um código semelhante ao seguinte.
A verificação de valores sendo iguais usos ==. Um único = é usado para atribuir um valor a uma variável.
A verificação de mais de 1 conjunto deve usar && para significar AND
movingavgall = 0;
se ((a == b) && (b == c) && (c == d)) movingavgall = a;
Você pode então verificar se a movingavgall tem um valor com
se (movingavgall != 0)
{
// fazer algo aqui
}
Faça uma busca por programação de metatrader usando o Google.
Você deve encontrar vários bons tutoriais para programação no MT4.
Um bom livro sobre programação em C também ajudará.
Robert Hill, também conhecido como MrPip
simplificar este código
Olá a todos!
Estou tentando semplificar este código usando o comando stringconcatenate a partir disto:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a isto:
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%","/\ ", uitog2v, "%","/\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguém possa me ajudar.
Com os melhores cumprimentos
doc
trend_alexcud_v_2men.mq4
...
... Doc
Se você precisa de todos esses elementos, não há uma maneira mais simples de escrevê-lo
Olá a todos!
Estou tentando semplificar este código usando o comando stringconcatenate a partir disto:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a isto:
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%","/\ ", uitog2v, "%","/\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguém possa me ajudar.
Com os melhores cumprimentos
doc
trend_alexcud_v_2men.mq4Como fazer: Alertar a cada 60 segundos
Como posso fazer algum código que, por exemplo, me dê um alerta a cada 60 segundos?
Eu criei este código abaixo, mas ele me dá um alerta a cada minuto a partir de quando o anexei ao gráfico e quero que ele siga o tempo do corretor para que ele me alerte, por exemplo, a cada 60 segundos.
#include
#include
// exported variables
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int ExpectedTime2 = 0;
int init()
{
NDigits = Digits;
ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePerMinutes2();
}
void OncePerMinutes2()
{
int datetime800 = TimeLocal();
if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1; // reset paused time
}
if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1;
Alert3();
}
}
void Alert3()
{
Alert("One minute gone");
}
int deinit()
{
if (true) ObjectsDeleteAll();
}
DocSe você precisa de todos esses elementos, não há uma maneira mais simples de escrevê-lo
Uhm, má sorte desta vez, obrigado de qualquer forma.
Com os melhores cumprimentos
doc
Há um problema com a segunda chamada StringConcatenate.
Você está somando 3 nomes de fontes diferentes e não haverá um nome válido resultante.
Robert
Olá a todos!
Estou tentando semplificar este código usando o comando stringconcatenate a partir disto:
ObjectSetText("uitog1v", StringConcatenate("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a isto:
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%","/\ ", uitog2v, "%","/\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguém possa me ajudar.
Com os melhores cumprimentos
doc
trend_alexcud_v_2men.mq4Necessidade de ajuda com a EA ... negócios não sendo fechados no testador
Estou trabalhando em um EA, mas não importa o que eu faça, não posso fazer negócios fechados. Ela as abre muito bem, mas quando as quero fechadas, a EA não as fecha.
Vou postar parte do meu código EA para que talvez um de vocês programadores experientes possa descobrir porque estou tendo este problema. As vars 'buyTrade' e 'sellTrade' são globais para toda a EA.
NOTA: Eu quero apenas UM comércio aberto a qualquer momento, seja longo ou curto. As negociações estão "sempre dentro", então quando um sinal longo chega, a curta existente deve ser fechada e vice-versa.
NÃO está fazendo isso. O que ele está fazendo é abrir negócios e depois abrir mais tordos ... e abrir mais ... e mantê-los abertos até que todos eles acabem batendo em suas paradas.
Obrigado de antemão.
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);...
Como esse é um código parcial: tente substituir symBid por symAsk no fechamento da venda e symAsk por symBid no fechamento da ordem de compra (inverta os preços de fechamento, você não pode fechar uma venda por lance e não pode fechar uma compra por preço de venda)
Estou trabalhando em um EA, mas não importa o que eu faça, não posso fazer negócios fechados. Ela as abre muito bem, mas quando as quero fechadas, a EA não as fecha.
Vou postar parte do meu código EA para que talvez um de vocês programadores experientes possa descobrir porque estou tendo este problema. As vars 'buyTrade' e 'sellTrade' são globais para toda a EA.
NOTA: Eu quero apenas UM comércio aberto a qualquer momento, seja longo ou curto. As negociações estão "sempre dentro", portanto, quando um sinal longo chega, a curta existente deve ser fechada e vice-versa.
NÃO está fazendo isso. O que ele está fazendo é abrir negócios e depois abrir mais tordos ... e abrir mais ... e mantê-los abertos até que todos eles acabem batendo em suas paradas.
Obrigado de antemão.
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);