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

 
Roman.:

Guarda i serbatoi, riavvia, forse ti aiuterà... :-)

P.S. Sono gentile.

No. I carri armati non sono un'opzione. Se vuoi davvero fare una cosa del genere. È solo il risultato che ti tranquillizza))
 
hoz:
No. I carri armati non sono un'opzione. Se vuoi davvero fare una cosa del genere. Si calmerà solo il risultato).

:-)
 

Assolutamente no. Comunque, si scopre che è un momento strano. Non avevo il lotto normalizzato. Qui abbiamo la funzione di normalizzazione dei lotti:

//+-------------------------------------------------------------------------------------+
//| Проверка объема на корректность и округление                                        |
//+-------------------------------------------------------------------------------------+
double LotFloor(double value)
{
   return(MathFloor(MathMin(MathMax(value, g_minLot), g_maxLot)/g_lotStep)*g_lotStep);

Ho controllato dove c'era un errore, nella funzione di trading stessa da dove vengono chiamate le funzioni di apertura degli ordini. Ho aggiunto questa funzione nel parametro del lotto della funzione chiamante che invia gli ordini. L'errore non è scomparso.

E appena ho aggiunto la funzione di normalizzazione direttamente alla prima funzione di cursing, e questa è la funzione che imposta gli ordini pendenti, il cursing si è fermato. Cosa vuoi dire con questo?

//+-------------------------------------------------------------------------------------+
//| Открытие отложенной короткой позиции                                                |
//+-------------------------------------------------------------------------------------+
bool OpenPendingSell(double lot, double price)
{
   int g_ticket = -1;
   double OOP = price - i_distanceFromLastPos * pt;
      
   if (OOP < Bid)
   {
       fCheck_ValidPendingOOP(Symbol(), OP_SELLSTOP, OOP);
       
       g_ticket = OrderSend(Symbol(), OP_SELLSTOP, LotFloor(lot), ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   }
   if (g_ticket > 0)
   {
       return (true);
   }
   else
       pr ("OpenPendingSell(): Ордер послать не удалось " + GetLastError());
   
   return (false);
}

Nel primo caso, invio immediatamente un lotto controllato, e nel secondo caso, controllo la dimensione del lotto nella funzione OrderSend() stessa. Ma qual è la differenza?

 
chief2000:
Ecco il problema: c'è un array unidimensionale, la cui dimensione può variare.
Come fare un ciclo di tutte le possibili combinazioni di elementi di un array tra loro?
L'ordine degli elementi non ha importanza, cioè 123==213==321.

Ecco un esempio per un array con 4 elementi:

Beh, tra di loro non sembra difficile.

int k = ArraySize(array);
for(int i=0;i<k-1;i++)
for(int ii=i+1;ii<k;ii++)
   {
   ...
   }
Ma qui, quando ce ne sono più di due, non è chiaro come confrontare. Mostra un metodo per confrontare tre numeri 1, 2 e 3 allo stesso tempo,
 
Qualcuno può dirmi come fare per non dover riaprire la finestra di ottimizzazione..... Cas sted che questa finestra era con diverse impostazioni per lo sfondo, la candela, ecc.
 
Forse ci sono degli script del genere!!!
 
Ciao a tutti, per favore consigliatemi su questo argomento... Se voglio spostare il livello a 798, è troppo complicato da calcolare per molte coppie, come dovrei scrivere un indicatore che o disegna il prezzo della media mobile spostata o lo visualizza nella finestra dei dati senza contare manualmente?livelli a MA
 
Roger:

Beh, tra di noi non sembra difficile

Ma quando ce ne sono più di due, non è chiaro come confrontare. Mostrami un metodo per confrontare tre numeri 1, 2 e 3 allo stesso tempo,

.

Se non mi sbaglio, il numero di cicli deve corrispondere al numero di elementi dell'array. Il problema è che il numero di elementi non è fisso e può essere molto più di 4, bisogna pensare a come progettarlo. Mi chiedo anche se ci sono altre opzioni di implementazione che influenzano la velocità, il consumo di memoria, ecc.
 
paladin80:



Grazie! Non importa da che parte si inizia a contare, cioè dalla terza barra?
 
Voglio riformulare e aggiungere alla mia domanda precedente.
Di seguito è riportato il codice per un array di 4 elementi. In realtà il numero di elementi nell'array è variabile.
Come posso cambiare il codice in modo che il numero di cicli 'for' annidati diventi variabile, un 'for' per ogni elemento dell'array?
Grazie!

int start() { 

   int Array[4]                                       = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size                                  = ArrayRange(Array,0);


   for(x1=0; x1<Array_Size; x1++) {
      Print("Combination                       = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++) {
         Print("Combination                    = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++) {
            Print("Combination                 = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++) {
               Print("Combination              = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(0);
}
Motivazione: