[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 395

 
KostelloArtua:

Muito obrigado pelas dicas!!! Já resolvi meu problema. Descobri que o corretor que eu procurava, ao colocar uma ordem de mercado, ou seja, de acordo com as condições, não me permite colocar níveis de parada ao mesmo tempo. Agora os pedidos são feitos sem nenhum nível de parada e eu estabeleço níveis de parada imediatamente após cada pedido. Tenho um problema com isso: apenas uma pequena parte dos pedidos é modificada, enquanto a maioria dos pedidos mostra os seguintes resultados na seção "Consultores Especialistas":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: aberto #30906670 venda 0.01 CLM1 a 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: bilhete inválido para a função OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: aberto #30906787 compra 0.01 ESM1 a 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: Bilhete inválido para a função OrderModify

Aqui está o texto do código:

{
res=OrderSend(Symbol(),OP_SELLL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
return(0);

}

Além disso, é a primeira ordem que é modificada depois que o Expert Advisor é iniciado!

Obviamente, coloquei a modificação errada dos pedidos no código. Por favor, me ajude!

res=OrderSend(Symbol(),OP_SELLL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Digits),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red);
 
ilunga:
res=OrderSend(Symbol(),OP_SELLL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red);
Obrigado pela dica!!!
 
Sancho77:
Caros programadores, estou pedindo ajuda para modificar o Expert Advisor: tenho uma posição aberta e após algum tempo há um segundo sinal para abrir a posição na mesma direção. Quero preencher a posição até o segundo sinal somente se a primeira ordem já estiver na posição de mais. Eu implementei isto comparando o tamanho do saldo e o patrimônio líquido (se o patrimônio líquido for maior que o saldo, a ordem aberta está no positivo).
Você pode sugerir um código para determinar o lucro/perda na última ordem em aberto que tiver?

Se seu número de bilhete for salvo, então simplesmente

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

Se seu número de bilhete for salvo, simplesmente


Obrigado! Você pode me dizer como salvar o bilhete do último pedido?
 
Sancho77:
Obrigado! Você pode aconselhar como salvar o bilhete do último pedido?

bem, a opção mais simples é declarar uma variável global int ticket

e substituir bilhete = OrderSend(...) em toda parte por bilhete = OrderSend(...)

sempre armazenará o número da última ordem aberta

Ou veja apenas o tópico "Funções úteis da KimIV"!

 
ilunga:

bem, a opção mais simples é declarar uma variável global int ticket

e substituir bilhete = OrderSend(...) em toda parte por bilhete = OrderSend(...)

sempre armazenará o número da última ordem aberta

ou ver apenas o tópico "Funções úteis da KimIV".

Obrigado por toda a sua ajuda!
 
rustein:

Ajude-me a encontrar um erro,

Obrigado


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

Obrigado,

Eu não sei... Pensei que funcionaria, não funciona sem nenhum dos dois, fizesse assim e funciona....

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
PRICE_OPEN !!!! - você não pode usar este preço! Funciona apenas para indicadores. Use o Bid or Ask.

Obrigado!!! Sim, essa é uma possibilidade definitiva.
 

Gente uma pergunta mais complicada......

Como fazer uma EA fechar todos os pedidos quando um determinado lucro é alcançado .... Fechar apenas pedidos em um símbolo ...

Exemplo: a EA trabalha em 3 pares para fechar todos os pedidos em um símbolo de 100p ...

Se o EUR tiver mais de 100p só fechará pedidos em EUR enquanto outros podem ter 200p ...

Se eu levar em contabalanse() então o assessor fechará somente quando a soma de três pares for superior a 100p. Esta opção não me serve !!!!

Ajuda por favor.........