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

 
VAM_ 08.06.2010 18:48editar | apagar

Como você o silencia? Conduzido até os joelhos brancos. Há muitas janelas de ferramentas (33). Não há EAs. Só meio e Zup. Não consigo descobrir de onde ele canta. Imploro-lhe que ajude. Serviço, os eventos têm sido. As cruzes sobre os eventos não ajudam. Ainda está cantando, o bastardo.

Técnica:


starling pode sentar-se no peru ))))

Procurei no código - sem alertas em nenhum lugar! O que fazer?
 
VAM_:

Procurei no código - sem alertas em nenhum lugar! O que fazer?

Confira em PlaySound().
 
Como posso atribuir valores diferentes a uma variável definida globalmente no decorrer da execução ao chamar funções diferentes e salvá-las?

Preciso atribuir certos valores à variável Parte, que é definida globalmente, para o fechamento parcial de uma posição, e passá-la como parâmetro para a função que executa o fechamento parcial da ordem. Esta variável é um divisor simples. Em outras palavras, se o valor inicialmente ajustado para 1, o lote é dividido por 1 e a posição inteira é fechada. Quando as condições comerciais mudam, esta variável recebe novos valores e pode ser igual a, digamos, 1,5 ou 2, então o lote de posição é dividido por este número, e o fechamento parcial é realizado. A chamada de função com passagem de parâmetro se parece com este literalmente:

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

Portanto, apesar do fato de que quando a função é chamada ...

TrailingPositionsTLE(561, 1, 2, 1);

... FecharMétodo = 1 (fechamento parcial) é definido e Parte = 2 é explicitamente especificado, a função passa seu valor inicial = 1 que foi definido globalmente ao invés do valor da Parte especificado no curso do programa (por exemplo, 2)...

Como posso derrotar isto? Obrigado...

 
artmedia70: Quando as condições comerciais mudam, esta variável recebe novos valores e pode ser igual, digamos, 1,5 ou 2, então o lote da posição é dividido por este número e um fechamento parcial é realizado.


Bem, quando as condições comerciais mudarem, então mude sua variável Peça. Ou você os tem em outro EA? Então esta variável tem que ser lida o tempo todo, ou seja

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

 
Roger:

Bem, quando as condições comerciais mudarem, então mude sua variável Peça. Ou você os tem em outro EA? Então esta variável tem que ser lida o tempo todo, ou seja

int init()

{

.....

GlobalVariableSet("Part0",Part);

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

Não, a variável está na mesma EA. Ela é definida globalmente e as funções podem usá-la, mas seu valor, se alterado dentro das funções, não é devolvido às funções externas. Portanto, as funções vêem seu valor como definido inicialmente. Se eu não a defino em nível global, então as funções se encaixam na variável não resolvida...
 

Quando você passa uma variável para uma função através de seu parâmetro, a variável é passada por valor, o que significa que a mudança da variável na própria função não fará com que ela seja sobregravada.
Tente passá-lo por referência inserindo um "&" na frente do nome do parâmetro

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

Procurei no código - sem alertas em nenhum lugar! O que fazer?

Na guia "Eventos", desmarque a caixa "Permitir".

 

Olá Prezados Profissionais.

Eu realmente gostaria de escrever um EA que abrisse dois pedidos de Venda e Compra ao mesmo tempo.

Depois de um certo número de pontos (parâmetro lim), a ordem de perda seria fechada,

e um rentável será fechado quando o preço tiver caído abaixo do preço máximo desde que a ordem foi aberta

(uma espécie de parada virtual de trilha).

Em agonia eu criei isto, mas não funciona... não funciona

Por favor, sugira algo

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
Como tornar possível atribuir valores diferentes a uma variável definida globalmente em tempo de execução ao chamar funções diferentes e salvá-las?

de duas maneiras

1. adicionar um ampersant à função onde o valor é alterado,

por exemplo, função void ( double& Part ){}

então, quando um valor dentro da função é alterado, o novo valor retornará ao local de chamada

2. remover a variável da lista de parâmetros da função, já que a variável é definida globalmente, seu valor pode ser alterado em qualquer lugar do código sem passá-la como parâmetro...

Mas para evitar confusão, a 1ª variante é melhor, para não pensar o que é esta variável, pois pode haver mais de uma variável definida globalmente (e dentro de uma função)...


Já dei uma olhada no correio, a resposta já foi dada.

 
artmedia70:
mas seu valor, alterado dentro das funções, não é devolvido a funções externas.


Mostrar a função em si.

Se for nulo ClosePartPosBySelect(peça dupla), mude para

void ClosePartPosBySelect()

Razão: