[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 147

 

Os profissionais não passam por eles, precisam de sua ajuda. Bot está abrindo posição de venda, então esta posição deve ser fechada abaixo, ver código e onde posição de venda deve ser fechada, posição de compra deve ser aberta, o número de posições abertas deve ser 1 (OrdensTotal()). A questão é, como fazer algo como uma fila de execução de ordens: primeiro uma posição de venda deve fechar e depois uma posição de compra deve abrir e o número de posições abertas deve ser igual a 1?

OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,"",0,0,Green);
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL)   // long position is opened
           {
                 OrderClose(OrderTicket(),OrderLots(),Ask,4,Violet); // close position
                }
    }
 
bandeiras bool
 
eddy:
Quero dizer que é apenas definido para um buffer e não para uma variável externa

então use este indicador_colorN

 
eddy:
Quero dizer que é definido apenas para um buffer, não para uma variável externa
Você não pode fazer isso com MQL. Mas se você precisar, é claro, você pode fazer isso))))
 
alsu:
Você não pode fazer isso em MQL. Mas se for MUITO, MUITO necessário, então é claro que pode ser feito))))

você nem sabe o que precisa...

Tenho certeza de que as necessidades do eddy podem ser resolvidas pela MQL

 
sergeev:

você nem sabe o que precisa...

Tenho certeza de que as necessidades do eddy são resolvidas por MQLs

Não, eu entendi... ele precisa obter a cor de renderização do buffer indicador no código indicador (certo, eddy?). Tanto quanto eu sei, é impossível na MQL.
 
alsu:
Não, eu entendi... ele precisa obter a cor do desenho do buffer indicador programmaticamente no código indicador (certo, eddy?). Tanto quanto eu sei, isto não é possível na MQL.
é possível.
basta usar o parâmetro indicador_colorN. Pode-se dizer que é a mesma variável.
 
sergeev:
talvez.
basta usar o parâmetro indicator_colorN. Pode ser dito que esta é a mesma variável.

nãooooooo.

Suponha que tenhamos um indicador que traça uma linha. Suponha que queiramos desenhar um círculo com este indicador. Mas queremos torná-la verde se a linha indicadora for verde, e vermelha se for vermelha.

 

Cavalheiros programadores, favor aconselhar como fechar todos os pedidos corretamente. Abaixo está o problema a ser resolvido e o que tem sido aconselhado a fazer. Em resumo, tudo funciona, exceto o fechamento de ordens e a colocação de bandeiras para proibir a negociação.

Tenho certeza de que há programadores experientes entre vocês. Favor me ajudar a escrever as seguintes condições no meu consultor especializado:
1) С+=Lucro em ordem(1)+Lucro em ordem(2)+...+Lucro em ordem(n) - lucro total em todas as ordens abertas no tempo atual.
2) C-=(c+)perda na ordem(1)+ perda na ordem(2)+...+ perda na ordem(n) - soma das perdas em todas as ordens em aberto no momento atual.
3) X=(c+)/(c-) - a razão lucro/perda atual
4) Se o patrimônio (S) multiplicado pela razão lucro/perda (X) for superior ao valor especificado (K), você é bom para negociar. (Se S*X>K, OK)
5) Se o Patrimônio (S) multiplicado pela relação Lucro/Perda (X) for menor que o Alvo (K) definido, então todas as ordens abertas nas cotações atuais serão fechadas e o Expert Advisor será desativado até que seja habilitado manualmente novamente. (S*X<K, fechar todas as encomendas e desligar)

Parece-me que esta seria uma boa proteção contra a perda de dinheiro.

É o que parece. Vamos criar duas funções que contem lucros e perdas:
double CalculateProfitTotal()
{
double Result = 0;
for(int i = 0; i < OrderTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() > 0)
Result = Result + OrderProfit();
return(Result);
}

double CalculateLossTotal()
{
duplo Resultado = 0;
for(int i = 0; i < OrderTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() < 0)
Resultado = Resultado + MathAbs(OrderProfit());
return(Result);
}

Na função start(), escreva suas condições.
Por exemplo:
X = CalculateProfitTotal() / CalculateLossTotal();
if(AccountEquity() * X < K)
{
// Onde fechamos todos os pedidos e
//set flag proibindo o comércio
return(0);
}

 
alsu:

Suponha que queiramos desenhar um círculo como indicador. Mas queremos torná-lo verde se a linha indicadora estiver verde

então eu quero criar um objeto em azul)

sergeev, entãoindicador_color1 é uma variável de cor?