[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 292

 

Olá.

Por favor, ajude-me a descobrir o que estou fazendo de errado.

Condicionalmente: Pergunte = 1.3000

PriceAsk = 1,3055 (incl. onde Step=50 e Srpead=3)

bool BuyOrder=1 ,

se (Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0) por que esta condição é verdadeira?
 
ed3sss:

Imediatamente antes da declaração se, imprimir os valores de todas as variáveis na condição

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
É provável que alguns valores variáveis sejam diferentes do que você imaginou.
 
Olá, em meu terminal mt4, quando clico em um dos pares de moedas que estão diretamente sob o terminal, por exemplo (eurusd) para abrir uma janela de terminal apenas com este parpreciso expandir a janela para o canto superior direito da janela, isso nunca aconteceu antes, por favor me diga por que isso é assim e como consertá-lo ?
 
GaryKa:

Imediatamente antes da declaração de se, registrar os valores de todas as variáveis na condição

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
É provável que alguns valores variáveis sejam diferentes do que você imaginou.

Confira, obrigado)
 
a hoz : Primeiro, um pouco de teoria.


E agora a conclusão

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Eu quero entender como funciona. Foi por isso que eu perguntei.
A expressãosublinhada retorna o logaritmo decimal (logaritmo na base 10) de bd_LOTSTEP, que é o poder de 10 para obter bd_LOTSTEP.
 

GaryKa:

Imediatamente antes da declaração de se, registrar os valores de todas as variáveis na condição

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Certamente, alguns dos valores variáveis não serão os que você imaginou.


ed3sss:


Confira, obrigado)

Obrigado, encontrei um erro lógico no programa, agora tudo funciona.
 

Olá.

Como posso exibir no gráfico a inscrição no instrumento atual Lucro/perda de ordens abertas.

É difícil verificar no Expert Advisor se ele abriu ou não posições (terminal on/off) e pegar o último volume do lote antes de fechar o terminal.

Obrigado.

 
hoz:

Acabei de me deparar com uma função aqui:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Eu quero entender como funciona. Foi por isso que eu perguntei.

Se eu estiver errado, peço desculpas. MathLog(x) é ln(x) (logaritmo natural). A fórmula de conversão é log_a(b)=ln(b)/ln(a), neste caso obtemos ln(x)/ln(10)=lg(x)(logaritmo decimal). A parte inteira do logaritmo decimal lg(1...9) é 0, lg(10...99) é 1, lg(100...999) é 2, lg(1000...9999) é 3 e assim por diante, ou seja, o logaritmo de um número maior que um é igual ao número de dígitos daquele número(antes do ponto decimal, não contar depois) menos um. Se x é 0 para um, então a parte inteira de lg(0.1....0.9) é igual a -1, lg(0.01...0.09) é igual a -2, lg(0.001...0.009) é igual a -3 e assim por diante, ou seja, se você não olhar para o menos, o logaritmo decimal do número de 0 para um é igual ao número total de zeros antes do primeiro dígito significativo. Eu não sei como MathCeil funciona, mas se ele retornar a parte inteira de um número, esta função deve retornar o número de dígitos no número antes do ponto decimal menos um se o número for maior que 1, e o número de zeros no número antes do primeiro dígito significativo se o número for de 0 para 1. O mínimo desta função está na faixa x igual a 1...9. De 10...99 e 0,1...0,9, a função retorna 1, com 100...999 e 0,01...0,09, retorna 2, e assim por diante. A idéia é...
 

Boa tarde, há um bug no programa, já estou com os miolos em franja, por favor, aponte o dedo para o que está errado. Só quero saber por que a condição para modifi não funciona. Mesmo que a condição não seja verdadeira, ela ainda é satisfeita e, portanto, ao modificar os erros ou 1, ou 130. Obrigado a todos vocês.

//--------------- modificar pedidos sob TP-------------------
para (i = OrderTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuar;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
se (OrderType() == OP_BUY) {
if (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE);
}
}
se ((OrderType() == OP_SELL)) {
if(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE);
}
}
}
}
retorno(0);
}

duplo LastOpPrBuy(duplo va=0)
{
para (i = OrderTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (va == 0) va = OrderOpenPrice();
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuar;
se (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice()
}
retornar (va);
}
//----------------------------------------------------------------------------------
duplo LastOpPrSell(duplo va=0)
{
para (i = OrderTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (va == 0) va = OrderOpenPrice();
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuar;
se (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
retornar (va);
}
//----------------------------------------------------------------------------------
duplo OprTPB(int TP)
{
int j=0;
duplo TPB=0;
para (i = OrderTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuar;
se (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
se (OrderType() == OP_BUY)
{
TPB+=Preço Aberto de Encomenda();
j++;
}
}
se (j==0) {
j++;
TPB = Pergunte;
}
TPB=(TPB/j)+TP*Point;
retorno (TPB);
}
//----------------------------------------------------------------------------------
duplo OprTPS(int TP)
{
int j=0;
duplo TPS=0;
para (i = OrderTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuar;
se (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
se (OrderType() == OP_SELL)
{
TPS+=OrderOpenPrice();
j++;
}
}
se (j==0) {
j++;
TPS = Licitação;
}
TPS=(TPS/j)-TP*Point;
retorno (TPS);
}
//----------------------------

 
borilunad:
Todos nós somos novatos aqui! Não veja que nós não sabemos coisas simples! Onde mais podemos descobrir! Pelo menos queremos saber, não da maneira que algumas pessoas pensam que basta pedir para colocar no código e imediatamente bombear o dinheiro!


))) A partir do humor de um comerciante:

- Onde posso obter um Expert Advisor rentável?

- Procure em algum lugar acima na linha, eles postaram um robô chamado @MOZG@v4.12.

Razão: