Errori, bug, domande - pagina 308

 
aharata:
Prova a leggere su BarsCalculated nell'aiuto, che, tra l'altro, dà l'esempio giusto.

Cerchiamo di farlo con questo. Grazie!
 
Im_hungry:

cioè, finché CopyBuffer>0 lo calcoliamo, e il nuovo parametro (Close())

appare quando la posizione è chiusa. In altre parole, dobbiamo fare un ciclo attraverso While. Si scopre così.

Io la metterei così: "Mentre CopyBuffer<0, ripetiamo la chiamata di questa funzione".

La linea While (vhandle>0) non sembra portare alcun carico speciale, perché in caso di primo CopyBuffer<0 ritornerà(0);

lavorerei in questa direzione:

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   for(uchar u=0;u<100;u++)  //запускаем цикл с ограниченным количеством шагов
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer) && CopyBuffer(vhandle,1,0,50,Sp2Buffer))
      {
       return(true);  //дождались копирования буферов - выходим
      }
     else
      {
       if(u==99) //т.е. выявляем последний шаг нашего цикла for, который не принёс ожидаемых результатов
         {
          Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
          return(0);
         }
       Sleep(50);  //засыпаем ненадолго (хотя я сам не сторонник использования Sleep в теле OnTick)
      }
    }
  }

In generale, qualcosa del genere, a discrezione dell'autore. Come giustamente sottolineato, una guida di riferimento non sarebbe male.

 
aharata:
Provate a leggere nell'aiuto su BarsCalculated, a proposito, l'esempio giusto è dato lì.

Grazie per il rinvio fatto - funziona, sembra non avere problemi (1 mese testato)

Ecco il mio codice di lavoro per la prima coppia

void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  ResetLastError();
  int copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
  int copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
  if(copied0<=0 || copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(vhandle)>0)
         break;
         Sleep(50);
        }
      copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
      copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
      if(copied0<=0 || copied1<=0)
        {
         Print("Не удалось скопировать Буфера индюков :-)",GetLastError(),
         "copied0",copied0,"copied1=",copied1);
         return (false); 
        }
       Print("Удалось скопировать Буфера :-)copied0",copied0,"copied1=",copied1);
       return (true);
     }
   Print("Удалось скопировать Буфера. Sp1Buffer=",ArraySize(Sp1Buffer),
         "Sp2Buffer=",ArraySize(Sp2Buffer));
   return (true);
}
 
Yedelkin:

Io direi: "finché CopyBuffer<0, ripetere la chiamata di questa funzione".

La linea While (vhandle>0) non sembra essere molto carica, perché in caso di primo CopyBuffer<0 ritornerebbe(0);

Io lavorerei in questa direzione:

In pratica, qualcosa del genere, a discrezione dell'autore. Come giustamente sottolineato, un libro di riferimento non sarebbe male.

È ancora più semplice, vediamo quale di questi 2 approcci è migliore e più veloce - questo è quello che faremo,

Grazie a tutti, andiamo a testare.

 
sviluppatori, prestate attenzione all'applicazione #33601 (c'è una "grande caratteristica" sulla leva in diversi OS)...
 
Interesting:
sviluppatori, per favore prestate attenzione alla richiesta #33601 (c'è una "grande caratteristica" sulla leva in diversi OS)...

Forse state usando terminali originariamente installati da diversi broker? Aggiungi dettagli alla tua domanda, per favore.
 
Rosh:
Forse state usando terminali originariamente installati da diversi broker? Aggiungi dettagli alla tua domanda, per favore.
Chiarito sui terminali e su ciò che devo ottenere alla fine.
 

Domanda per gli sviluppatori.

Tutto è chiaro riguardo agli spreads, sono memorizzati in barre e il tester può eseguire l'intera storia, tenendo conto degli spreads che cambiano (se la storia è caricata normalmente), ma che dire degli swaps?

Cioè, cosa succede se il broker/dealer cambia i tassi di swap o la commissione?

Capisco che la situazione è un po' assurda, ma comunque.

Se ho capito bene ora tester come in MT4 prenderà swap e commissione ultimo....

PS

Chiarito di nuovo, ora con screenshot....

 
Interesting:

Domanda per gli sviluppatori.

Tutto è chiaro riguardo agli spreads, sono memorizzati in barre e il tester può eseguire l'intera storia, tenendo conto degli spreads che cambiano (se la storia è caricata normalmente), ma che dire degli swaps?

Cioè, cosa succede se un broker/dealer cambia la dimensione degli swap o delle commissioni?

La storia degli swap e delle commissioni non è memorizzata, queste impostazioni sono prese dall'ultima connessione
 
Rosh:
Lo storico degli scambi e delle commissioni non è memorizzato, queste impostazioni sono prese dall'ultima connessione
Capisco, è più o meno quello che pensavo. Speriamo che non cambino spesso/non cambino affatto.