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

 
lufer:
Questo non risolve il problema, ora sembra che qualcosa sia sbagliato inOnTick() - quando carico l'EA nella finestra del terminale non succede nulla, e quando provo a cancellarlo, il terminale si blocca per un tempo molto lungo e poi lo cancella dopo un po' di tempo. Ho provato ad assegnare manualmente dei valori ad alcuni elementi, tutto è OK. Qualcosa nel ciclo di inizializzazione dell'array sembra essere sbagliato.

Cosa vuol dire che "non risolve"? State spingendo i dati nell'array Int con una doppia precisione inferiore a 1. L'output conterrà naturalmente degli zeri. Beh, anche il loop è stato paralizzato.

Questo codice dovrebbe funzionare:

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

Cosa vuol dire "non funziona"? State infilando dati doppi inferiori a 1 nell'array int, ovviamente l'output sarà di zeri. E l'anello era un po' incasinato.

Questo è il tipo di codice che dovrebbe funzionare:

Naturalmente hai assolutamente ragione suldoppio Mas[] (ho considerato che ATP conta i punti in valori interi per qualche motivo). Il punto era che non appariva anche dopo aver cambiato il tipo di array, ma ho capito il mio errore. Grazie mille per il vostro aiuto!
 
Non voglio creare un argomento separato, quindi chiederò qui. La documentazione della funzione OrderSelect afferma che tutti i dati degli ordini vengono copiati nell '"ambiente del programma". Si riferisce solo al grafico corrente o a tutto il terminale? Faccio questa domanda perché ho un problema nel lavorare simultaneamente con diversi ordini da diversi grafici che hanno lo stesso EA installato.
 
.roman.:
Non voglio creare un argomento separato, quindi chiederò qui. La documentazione della funzione OrderSelect afferma che tutti i dati degli ordini vengono copiati nell '"ambiente del programma". L'"ambiente di programma" si riferisce solo al grafico corrente o a tutto il terminale? Faccio questa domanda perché ho riscontrato un problema nel gestire diversi ordini simultaneamente da diversi grafici in cui è installato lo stesso EA.
Questi ordini sono disponibili per tutte le applicazioni utente in esecuzione nel terminale in cui questo ordine è aperto.
 
evillive:
Questi ordini sono disponibili per tutti i programmi utente in esecuzione nel terminale in cui l'ordine è aperto.
Come possiamo allora difenderci dalla falsa copia nell'ambiente del software dei dati di un altro ordine che è stato allo stesso tempo selezionato da un altro grafico?
 
.roman.:
Come possiamo allora evitare di copiare falsamente nell'ambiente del software i dati di un altro ordine che è stato allo stesso tempo selezionato da un altro grafico?
I dati dei diversi ordini non si sovrappongono in alcun modo, non c'è nulla da proteggere.
 
evillive:
I dati dei diversi ordini non si sovrappongono in alcun modo e non c'è nulla da proteggere.

Allora stiamo parlando di cose diverse. Inizialmente mi riferivo alla domanda su cosa sia l'"ambiente software" che viene descritto nella documentazione. Significa l'intero terminale?

In particolare, il mio problema era che nonostante il confronto esclusivo di OrderSymbol e Symbol nella funzione OrderSelect, c'era un problema quando i dati (tempo di apertura dell'ordine, prezzo aperto, ecc.) potevano apparire da un grafico di una coppia. Cioè, mi sto chiedendo, è possibile che durante la funzione OrderSelect dell'EA su EURUSD, per esempio, l'EA inizi a lavorare anche con la funzione OrderSelect su un'altra coppia di valute e i dati dell'ordine dall'ultima chiamata di questa funzione siano caricati nell'"ambiente del programma"?

 
.roman.:

Allora stiamo parlando di cose diverse. Inizialmente mi riferivo alla domanda su cosa sia l'"ambiente software" che viene descritto nella documentazione. Significa l'intero terminale?

In particolare, il mio problema era che nonostante il confronto esclusivo di OrderSymbol e Symbol nella funzione OrderSelect, c'era un problema quando i dati (tempo di apertura dell'ordine, prezzo aperto, ecc.) potevano apparire da un grafico di una coppia. Quindi, mi sto chiedendo, è possibile che durante la funzione OrderSelect dell'EA su EURUSD, per esempio, l'EA inizi a lavorare anche con la funzione OrderSelect su un'altra coppia di valute e i dati degli ordini dall'ultima chiamata di questa funzione siano caricati nell'"ambiente del programma"?

Ho bisogno del codice. C'è un errore in esso
 
.roman.:

Allora stiamo parlando di cose diverse. Inizialmente mi riferivo alla domanda su cosa sia l'"ambiente software" che viene descritto nella documentazione. Significa l'intero terminale?

In particolare, il mio problema era che nonostante il confronto esclusivo di OrderSymbol e Symbol nella funzione OrderSelect, c'era un problema quando i dati (tempo di apertura dell'ordine, prezzo aperto, ecc.) potevano apparire da un grafico di una coppia. Cioè, mi sto chiedendo, è possibile che durante la funzione OrderSelect dell'EA su EURUSD, per esempio, l'EA inizi a lavorare anche con la funzione OrderSelect su un'altra coppia di valute e i dati dell'ordine dall'ultima chiamata di questa funzione siano caricati nell'"ambiente del programma"?

Ogni ordine ha dei parametri unici che lo distinguono chiaramente dagli altri ordini. Questi sono il biglietto e l'ora di apertura (o di chiusura, se si cerca nella cronologia). Sono unici all'interno di un conto di trading come il modello della retina.

Non è sufficiente selezionare l'ordinecon la funzione OrderSelect, ma dobbiamo controllare se è l'ordine giusto o se dobbiamo selezionare quello successivo.

 
Vinin:
Avete bisogno di un codice. C'è un errore in esso
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

I calcoli inutili (irrilevanti per il problema) sono stati rimossi. Le stampanti sono state aggiunte al codice appositamente per mostrare il problema. Nonostante il confronto del simbolo dell'ordine con il simbolo su cui l'EA è aperto, può mostrarlo (dal grafico osi prendere i dati dell'ordine sull'euro, per esempio, come in questo caso):