Pergunte! - página 11

 

Você está falando em ter um roteiro ou algo para facilitar como servidor para que os EAs sejam capazes de se comunicar. Acho que levará algum tempo para que as metaquotas cheguem a algo assim. Entretanto, olhando para mql4.com, eles dizem que a função da qual eu estava falando, GlobalVariableSetOnCondition() é atômica em execução. Com isso, eu provavelmente posso criar um conjunto de funções para fazer o que eu preciso.

 

Alguém pode me ajudar: https://www.mql5.com/en/forum/174184?

 

Ajuda - Divisão zero???

Olá a todos os codificadores...

O que eu tenho que fazer para resolver este erro: divisão zero?

Obrigado por qualquer ajuda...

Arquivos anexados:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

olá codersguru,

posso usar jma em vez de ema em código EA?

 
 

precisa de ajuda - MACD ajustado

Estou tentando criar um indicador que ajuste a linha de sinal com base no valor do RSI. Realmente eu gostaria de traçar outra linha de sinal no MACD que seja ajustada e deixar a linha de sinal regular no lugar.

editar:

Tenho o indicador para desenhar a linha de RSI (primeiro passo) na mesma janela. Mas, por alguma razão, ele não desenhará o último período. Por favor, veja em anexo.

Arquivos anexados:
 

qualquer ajuda seria ótimo

herel é um pouco de código estou tendo um problema com//// ele funciona quando eu o carrego na northfinace 1 vez e depois nunca mais faço uma troca...mas ele não faz nada no Interbank...é um sistema de reversão usando kama o .0005 é pips de reversão...eu não tenho idéia do que está acontecendo, pois ele fez 1 troca na northfinance perfeitamente quando eu o carreguei pela primeira vez, mas era uma troca existente que já deveria ter sido feita...

 

o código

#propriedade copyright "Expert Advisor Builder"

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

número interno externo MagicNumber = 0;

sinal externo boolMail = Falso;

bool externo EachTickMode = Verdadeiro;

double Lots externo = 1;

extern int Slippage = 3;

bool StopLossMode externo = Verdadeiro;

StopLoss int externo = 40;

bool TakeProfitMode = Falso;

extern int TakeProfit = 60;

bool TrailingStopMode = Verdadeiro;

Exterior int TrailingStop = 35;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

no BarCount;

int Corrente;

bool TickCheck = Falso;

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

//| função de iniciação de especialista |

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

int init() {

BarCount = Barras;

se (CadaTickMode) Corrente = 0; caso contrário Corrente = 1;

retorno(0);

}

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

//| função de desinicialização especializada |

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

int deinit() {

retorno(0);

}

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

//| função de início especializado |

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

int start() {

int Ordem = SIGNAL_NONE;

int Total, Bilhete;

nível duplo StopLossLevel, TakeProfitLevel;

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

Total = EncomendasTotal();

Order = SIGNAL_NONE;

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

//| Início variável |

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

duplo Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0,0005, 0, Atual + 0);

duplo Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Corrente + 0);

duplo Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Corrente + 0);

duplo Comprar1_1 = Var1 ;

dupla Compra1_2 = 25;

dupla Compra2_1 = Var2 ;

dupla Compra2_2 = 80;

dupla Compra3_1 = Var3 ;

dupla Compra3_2 = 50;

o dobro Vender1_1 = Var1 ;

o dobro Vender1_2 = -25;

duplo Sell2_1 = Var2 ;

duplo Sell2_2 = -80;

duplo Sell3_1 = Var3 ;

duplo Sell3_2 = -50;

duplo CloseBuy1_1 = Var1 ;

duplo CloseBuy1_2 = -25;

duplo CloseBuy2_1 = Var2 ;

fechamento duplo CloseBuy2_2 = -80;

fechamento duplo CloseBuy3_1 = Var3 ;

fechamento duplo CloseBuy3_2 = -50;

duplo CloseSell1_1 = Var1 ;

duplo CloseSell1_2 = 25;

duplo FecharVenda2_1 = Var2 ;

fechamento duploFechamentoVenda2_2 = 80;

Fecho duploVenda3_1 = Var3 ;

Fecho duploVenda3_2 = 50;

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

//| Fim variável |

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

//Cheque posição

bool IsTrade = Falso;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

IsTrade = Verdadeiro;

if(OrderType() == OP_BUY) {

//Close

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

//| Início do Sinal (Compra de Saída) |

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

if (CloseBuy1_1 <= CloseBuy1_2 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) Ordem = SINAL_CLOSEBUY;

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

//| Fim do sinal (Compra de Saída) |

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

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

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(TrailingStopMode && TrailingStop > 0) {

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

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

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

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

{} else {

//Close

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

//| Início do Sinal (Sair de Venda) |

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

if (CloseSell1_1 >= CloseSell1_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Ordem = SINAL_CLOSESELL;

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

//| Fim do sinal (Sair de Venda) |

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

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

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(TrailingStopMode && TrailingStop > 0) {

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

if((OrderStopLoss() > (Pergunte + Ponto * TrailingStop)) ||| (OrderStopLoss() == 0)) {

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

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

}

}

}

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

//| Início do sinal (Entrada) |

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

if (Buy1_1 >= Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Pedido = SIGNAL_BUY;

if (Vender1_1 <= Vender1_2 && Vender2_1 = Vender3_2) Encomendar = SINAL_SELL;

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

//| Fim do sinal |

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

//Compra

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

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (StopLossMode) StopLossLevel = Perguntar - StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfitLevel * Ponto; caso contrário 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)) {

Imprimir("Pedido de compra aberto : ", Preço Aberto());

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

} else {

Imprimir("Erro na abertura do pedido de compra : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

//vender

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

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (StopLossMode) StopLossLevel = Bid + StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfitLevel * Ponto; caso contrário TakeProfitLevel = 0,0;

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

if(Ticket > 0) {

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

Imprimir("ordem de venda aberta : ", OrderOpenPrice());

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

} else {

Imprimir("Erro na abertura do pedido de VENDA : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

se (!EachTickMode) BarCount = Bars;

retorno(0);

}

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

 

mudei o valor de .0005 do indicador no especialista, pois isso só mostra a linha de canal em última instância os níveis são o que você precisa para mudar 25,-25 para .0005 ...30,,-30 para .0006, e assim por diante...

 

Problema com o breakeven e o trailing stop

Olá,

Estou aprendendo codificação usando o tutorial MQL4 da Codersguru, e estou trabalhando em "My_First_EA". É realmente a minha primeira EA. Funciona muito bem, mas estou tentando escrever uma parada de breakeven e não consigo entender. O problema que tenho é que a parada de equilíbrio segue o preço tal qual uma parada de trilha. Eu gostaria que a parada inicial se movesse para manter 1 pip de lucro quando eu fizer 15 pips (por exemplo), então eu quero que a parada fique na parada de equilíbrio (1 pip de lucro) até que a parada de equilíbrio comece a funcionar com 25 pips de lucro. Depois quero que a parada móvel funcione como sempre, movendo cada pip de lucro. Acho que o problema pode ser o "OrderStopLoss()", mas eu não sei mais nada. Meu cérebro está em papa. Obrigado

Aqui está o código pertinente que fiz:

TrailingStop duplo externo=25.0;

double BreakEvenProfit externo=15;

double BreakEvenStop=1;

......................

meu código de entrada e de pedidos abertos aqui funciona bem

......................

para (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType()<=OP_SELLL&&OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY)//Long position is opened

{

// deve ser fechado?

se (FSAR > FMA) //meu sinal de saída

{

//----CLOSE LONG POSITION funciona bem

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta);

retorno(0);//saída

}

//////////////////// ESTA É A ÁREA PROBLEMÁTICA ABAIXO/////////

//----CHECK FOR BREAKEVEN STOP LONG POSITION------

if (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

se (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow);

retornar(0);

}

}

//----- TUDO AQUI ABAIXO FUNCIONA COMO UMA TÍPICA PARADA DE TRILHA

//----check for trailing stop LONG POSITION

if(TrailingStop>0)

{

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

{

se (OrderStopLoss()<Bid-Point*TrailingStop)

{

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

retornar(0);

}

}

}

}

caso contrário//vai para a posição curta

Razão: