Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 149

 
ALXIMIKS:

A pergunta é monótona, mas a resposta não está em lugar nenhum, ou talvez eu tenha apenas parecido errado:

Em funções, ou talvez em outro lugar, já vi o & símbolo depois do tipo de dado e, se não estou enganado, uma vez &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

Para que serve? O que ele faz? (Referência, se você puder saber mais sobre isso)))

Esta é uma transferência de parâmetro por referência.
hoz:


E mais ao ponto? Tem sido discutido que o INIT pode falhar em caso de, por exemplo, desconexões ou outras situações similares. Porque não reinicializa os próprios dados depois, em caso de contingências, e só funciona uma vez! Portanto, esta não é exatamente a maneira correta de fazer isso.
Ninguém o impede de chamar o init() onde você precisar, de acordo com sua condição.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();

É o mesmo que:

gInitTrue = false;   // В глобальных
-------------------------------------

bool init()
{
   if
   {
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные..
   }
   return(gInitTrue =true);
}
-------------------------------------
void start()
 {//Вызов из старта так:
  if (gInitTrue = false) init();
 }
 
001:

Não consigo descobrir como implementar a lógica com o mínimo de esforço.

Se(...) estabelecer uma ordem de parada;

Se(a vida útil do pedido>tempo) retirar o pedido, e se(...) estabelecer um novo pedido;

A dificuldade é que pode haver várias posições que já estão abertas, e como lutar contra todas elas? Qual é a maneira mais fácil?

Obrigado!

int MagicNumber=555;
//---
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  //--- фильтр по символу
         if (OrderSymbol()!=Symbol()) continue;
         //--- фильтр по магик номеру (если такая проверка предусмотрена)
         if (OrderMagicNumber()!=MagicNumber) continue;
         //--- срабатывает условие удаления отложенного ордера
         if (OrderOpenPrice()>vremya)
         {  
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            {  
               if (OrderDelete(OrderTicket())==true)
               {  Sleep(5*1000); //после удачного удаления усыпляем советник на 5 секунд
                  if (/*установить стоповый ордер*/)
                  {   OrderSend(...)
                  }
               }
            }
            else return(0);
         }
}  }  }
 
Zhunko:
Isto é passar o parâmetro por referência.
Ninguém está impedindo você de chamar o init() onde você quer, de acordo com sua condição.


Então, novamente, devemos resolver a questão do controle deste momento. Afinal, para saber "onde deve estar", você precisa saber. E você pode descobri-lo através de uma bandeira, por exemplo. Acontece, por exemplo, que a bandeira estará no mundo inteiro:

gInitTrue = false;

No init(), atribua um valor no final da função:

gInitTrue = true;

E controlaremos o início logo no início da função:

if (gInitTrue != true)
    init();
Estou entendendo isso corretamente? Ou há algo mais a considerar?
 
hoz:


Mas mais ao ponto? Tem sido discutido que o INIT pode falhar em caso de, por exemplo, desconexões ou outras situações similares. Porque não reinicializa os próprios dados depois, em caso de contingências, e só funciona uma vez! Portanto, esta não é uma maneira muito correta de fazer isso.
Não há limite de tempo para o init(), teoricamente os cálculos podem ser executados por vários segundos/minutos. Não faz sentido quebrar uma conexão aqui. Isto é, a coruja foi lançada em um gráfico -> um tick chegou -> cálculos no init() começaram (neste momento pode haver muitos ticks ou uma falha na conexão) -> o Expert Advisor para o primeiro início da operação() e por isso está esperando por um novo tick.
 
como o código deve ser escrito corretamente para que, se a parada ou lucro especificado for menor que a parada mínima, então faça-os iguais e use as paradas como a parada mínima. ?
 
webip:
como o código deve ser escrito corretamente para que, se a parada ou lucro especificado for menor que a parada mínima, então faça-os iguais e use as paradas como a parada mínima. ?
MathMax().
 
Você pode me dizer um pequeno código? Opened file.... Que funções podem ser usadas para escrever um registro, salvá-lo e depois fechá-lo...
 
Zolotai:
Você pode me dizer um pequeno código? Opened file.... Que função pode ser usada para escrever uma gravação, salvá-la e depois fechá-la...

https://docs.mql4.com/ru/files
Razão: