Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 149

 
ALXIMIKS:

La domanda è noiosa, ma la risposta non si vede da nessuna parte, o forse ho solo guardato male:

Nelle funzioni, o forse da qualche altra parte, ho visto il simbolo & dopo il tipo di dati e, se non mi sbaglio, una volta &&

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

A cosa serve, cosa fa? (Riferimento, se riesci a saperne di più))

Questo è un trasferimento di parametri per riferimento.
hoz:


E più precisamente? È stato discusso che INIT può fallire in caso, per esempio, di disconnessioni o altre situazioni simili. Perché non reinizializza i dati stessi dopo, in caso di imprevisti, e viene eseguito solo una volta! Quindi, questo non è esattamente il modo giusto per farlo.
Nessuno vi impedisce di chiamare init() dove vi serve, secondo le vostre condizioni.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

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

È la stessa cosa:

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

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

Non riesco a capire come implementare la logica con il minimo sforzo.

Se(...) imposta un ordine di stop;

Se(la durata di vita dell'ordine>tempo) ritira l'ordine, e se(...) imposta un nuovo ordine;

La difficoltà è che ci possono essere diverse posizioni già aperte, e come si fa a combatterle tutte? Qual è il modo più semplice?

Grazie!

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:
Questo è passare il parametro per riferimento.
Nessuno vi impedisce di chiamare init() dove volete, secondo le vostre condizioni.


Poi di nuovo dobbiamo risolvere il problema del controllo di questo momento. Dopo tutto, per sapere "dove dovrebbe essere", bisogna saperlo. E lo si può scoprire attraverso una bandiera, per esempio. Si scopre, per esempio, che la bandiera sarà in globale:

gInitTrue = false;

In init(), assegnate un valore alla fine della funzione:

gInitTrue = true;

E controlleremo l'inizio all'inizio della funzione:

if (gInitTrue != true)
    init();
Ho capito bene? O c'è qualcos'altro da considerare?
 
hoz:


Ma più precisamente? È stato discusso che INIT può fallire in caso, per esempio, di disconnessioni o altre situazioni simili. Perché non reinizializza i dati stessi dopo, in caso di imprevisti, e viene eseguito solo una volta! Quindi, questo non è proprio un modo corretto di farlo.
Non c'è un limite di tempo per init(), teoricamente i calcoli possono andare avanti per diversi secondi/minuti. Non ha senso rompere una connessione qui. Cioè, owl è stato lanciato su un grafico -> è arrivato un tick -> sono iniziati i calcoli in init() (in questo momento ci possono essere molti tick o un errore di connessione) -> l'Expert Advisor per la prima operazione start() e quindi è in attesa di un nuovo tick.
 
come dovrebbe essere scritto correttamente il codice in modo che se lo stop loss o il take profit specificato è inferiore allo stop minimo, allora li rende uguali e usa gli stop come stop minimo. ?
 
webip:
come dovrebbe essere scritto correttamente il codice in modo che se lo stop loss o il take profit specificato è inferiore allo stop minimo, allora li rende uguali e usa gli stop come stop minimo. ?
MathMax().
 
Puoi dirmi un po' di codice? File aperto.... Quali funzioni si possono usare per scrivere un record, salvarlo e poi chiuderlo...
 
Zolotai:
Puoi dirmi un po' di codice? File aperto.... Quale funzione può essere usata per scrivere una registrazione, salvarla e poi chiuderla...

https://docs.mql4.com/ru/files