[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
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.
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?
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);
}
Obrigado.
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?
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...
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.
É 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: