Pergunte! - página 64

 
ryanklefas:
Acho que a função normalizeDouble também funcionaria para você. Também vi código que usa as funções MathFloor e MathCeiling para realizar a mesma coisa.

Portanto, o que você diz é que o cálculo deve funcionar da forma como eu o codifiquei na seção "Início variável", como indicado abaixo:

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000))), 3);

Então talvez meu problema esteja em outro lugar, porque quando eu defino o seguinte:

external bool LotSizeManager = True;

o EA não executa nenhuma operação. Quando eu o defino como falso, ele executará operações. Presumo que não esteja executando nenhuma operação quando este valor for Verdadeiro, porque há um problema com o cálculo.

 
waaustin:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

tamanho duplo do lote = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlotes, 3: nunca usado

 
Michel:
tamanho de lote duplo = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlotes, 3: nunca usado

Portanto, seu ditado depende da precisão que eu quero que os lotes sejam. Portanto, se eu quiser a precisão dos microlotes, como 0,75 lotes, então eu usaria um valor de 2.

 
waaustin:
Portanto, seu ditado depende da precisão que eu quero que os lotes sejam. Portanto, se eu quiser a precisão dos microlotes, como 0,75 lotes, então eu usaria um valor de 2.

Sim, você conseguiu!

Mas tenha certeza de que os microlotes (2 decimais) estão bem para seu corretor e o tipo de conta que você tem.

Não sei muito bem como o IBFX trabalha com mini-conta, ou seja, se microlotes em mini-contas também são chamados de minilots e têm apenas 1 decimal. Talvez alguém usando o IBFX possa responder aqui ?

No entanto, o melhor é perguntar ao seu corretor.

 
Michel:
Sim, você o tem!

Mas tenha certeza de que os microlotes (2 decimais) estão bem para seu corretor e o tipo de conta que você tem.

Não sei muito bem como o IBFX trabalha com mini-conta, ou seja, se os microlotes em mini-contas também são denominados minilots e têm apenas 1 decimal. Talvez alguém usando o IBFX possa responder aqui ?

No entanto, o melhor é perguntar ao seu corretor.

Muito obrigado. O código LotSizing parece funcionar bem. Entretanto, parece que tenho outro bug no código em algum lugar e não consigo descobrir.

Eu tenho o EA carregado em mais de um par, ele colocará as negociações apenas em um par. O código de dimensionamento do LotSizing funciona bem. Mas, ele não coloca mais negociações em nenhum outro par de moedas. Entretanto, quando eu estabeleço o seguinte valor:

Externo bool LotSizeManager = Falso;

o EA coloca negociações para cada par de moedas ao qual eu tenho o EA anexado.

 
waaustin:
Muito obrigado. O código LotSizeSizing parece funcionar bem. Entretanto, parece que tenho outro bug no código em algum lugar e não consigo descobrir.

Tenho o EA carregado em mais de um par, ele colocará as negociações somente em um par. O código LotSizing funciona bem. Mas, ele não coloca mais negociações em nenhum outro par de moedas. Entretanto, quando eu estabeleço o seguinte valor:

Externo bool LotSizeManager = Falso;

o EA coloca negociações para cada par de moedas ao qual eu tenho o EA anexado.

Não importa. Eu descobri onde está o problema! Obrigado pela ajuda.

 

Problema: No tempo definido pelo usuário, a EA tenta colocar uma ordem pendente, mas o preço atual é fechar para que o corretor aceite a ordem.

Pergunta: Como eu codificaria um loop que verificaria a iOpen da barra de 1 minuto a cada minuto até que aceitasse o pedido? Só não sei como incorpore a verificação a cada minuto até que a ordem possa ser inserida. Parece que o código atual esquece o que está procurando após alguns minutos porque uma vez que o preço está fora do caminho de entrada, nada acontece.

Acho que parte disso é o seguinte:

duplo Open_Price_Every_Minute;

Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0);

Open_Price_Every_Minute = NormalizeDouble(Open_Price_Every_Minute, Digits);

if (Allow_LimitOrder_for_Entry_A==false)

{

OrderSend(Symbol(), OP_BUYSTOP, Lots, LA, Slippage, LASL, LATP, "", Magic, 0, FireBrick);

OrderSend(Symbol(), OP_SELLSTOP, Lots, SA, Slippage, SASL, SATP, "", Magic, 0, FireBrick);

}

Como sempre, obrigado por sua assistência e tempo.

James

 
proverbs:
Parece que o código atual esquece o que está procurando após alguns minutos porque uma vez que o preço está fora do caminho de entrada, nada acontece.

Acho que você não vai querer ter o loop funcionando indefinidamente em uma EA. Eu nunca tentei isso antes, mas não acho que seria uma coisa boa. Se você quiser que o EA "lembre" o que tem feito, armazene os dados que você precisa lembrar como variáveis estáticas (varaibles declaradas fora da função principal) ou como variáveis globais MT4.

 
ryanklefas:
Acho que você não vai querer ter o loop funcionando indefinidamente em uma EA. Eu nunca tentei isso antes, mas não acho que seria uma coisa boa. Se você quiser que o EA "lembre" o que tem feito, armazene os dados que você precisa lembrar como variáveis estáticas (varaibles declaradas fora da função principal) ou como variáveis globais MT4.

Ei!

Puting ea procesing in the loop é uma boa maneira, leia isto:

https://www.mql5.com/en/articles/1462

Você só precisa fazer isso da maneira correta

 

Kalenzo,

Obrigado pelo artigo. Parece que estou prestes a aprender mais do que pedi.