[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 970

 
Vinin:

Obrigado.
 
AlexSTAL:
avisos

Minha língua materna é ucraniana. Mas obrigado por sua atenção.
 

Socorro! Se eu tiver 2 pingentes configurados e um deles fechado por Take Profit, preciso que o segundo seja apagado. Como escrevê-lo? Onde está o erro no código?

int pos;
for (pos=0; pos<OrdersTotal(); pos++)
{
if (OrderSelect(pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print("Ордер удален");
       }
      }
     }
    }
break;
   }
  }
 }
return(0);
}
 

Boa noite (esqueci de cumprimentar nos posts anteriores). Você pode aconselhar qual função utilizar para fazer o seguinte. No Expert Advisor está abrindo uma ordem pelo indicador na vela atual (que seja o número = 9). Se depois da ordem de abertura, ele (o indicador) voltar a desenhar (e depois de fechar a vela 9 não apareceu), então eu preciso APÓS a ordem de fechamento da vela 9 fechada.

 

Há parâmetros de entrada:

bool Mart - se for verdade, significa que houve uma ordem fechada na parada, portanto faça o dobro.

TradeInf - permissão de comércio, se for verdade, significa que não há ordens negociadas e que podemos negociar)

Existe o seguinte código:
if (Mart == true && TradeInf===true)
{
Alert("double the lot");
LotS=NormalizeDouble(LotS*martin,2);
Alert("lot size",LotS);
}
if (Mart == false && TradeInf===true)
{
Alert("Reset lot");
LotS=lot;
}

Então, nos comandos OpenOrder, tamanho do lote = LotS.

Então, se encontrar um lote fechado por lote, o tamanho do lote torna-se -9315605757223323600
por quê? Qual é o motivo?

 

Olá, estou calculando muito a partir de um valor de equilíbrio de acordo com um princípio diferente...

Eu acabo com um número como 0,2345, como corto o dobro sem arredondar, quero dizer:

para um dígito - 0,2

a dois dígitos - 0,23

a três - 0,234 e assim por diante...

 
akacuk21:

Olá, estou calculando muito a partir de um valor de equilíbrio de acordo com um princípio diferente...

Eu acabo com um número como 0,2345, como corto o dobro sem arredondar, ou seja:

para um dígito - 0,2

a dois dígitos - 0,23

a três - 0,234 etc...


lote duplo = NormalizeDuplo(LOT,2)

lote - para fazer pedidos

LOT - fórmula para cálculo de pedidos

"2" - arredondamento para 2 casas decimais.

 
Obrigado pela resposta, mas no caso do NormalizeDouble, um número como 0,29 arredondado para um dígito será 0,3 e eu preciso que seja 0,2
 
É contra as regras de arredondamento, então vamos esperar para ouvir o que os mais velhos têm a dizer.
 
Sys15975382:
É contra as regras de arredondamento, vamos esperar pelo que os camaradas mais velhos têm a dizer.

Uh... Cavalheiros. Não se pode normalizar lotes como esse... :) Aqui está uma pequena ajuda:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}