[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 1084

 
khorosh:

Sarebbe più accurato metterla in questo modo:



Questo è ancora più vero e ora funziona:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
E a proposito, perché quando scrivo un commento il codice viene evidenziato come codice ed è dello stesso colore? O devo evidenziarlo come cosa, in modo che sembri un vero codice a colori?
 
kolyango:

Ho provato su M1 e il messaggio non appare dopo la formazione della prossima barra. Significa che non funziona?


E non funzionerà - non hai scritto il programma correttamente. Questo perché non avete idea di come funzionerà il vostro codice. Scomponiamo il tutto. Corpo dell'Expert Advisor:

int start(){ // Спец. функция start
  if(Fun_New_Bar()){ //проверка наличия нового бара
    Alert("Сформировался новый бар"); // Вывод на экран
  }
  return(0); // Выход из start()
}

Arriva un nuovo tick e viene chiamata la funzione Fun_New_Bar(). Se restituisce true al programma principale, apparirà un Alert. Altrimenti, l'EA termina il suo lavoro con un ritorno e aspetta un nuovo tick. Tutto si ripete su un nuovo tick.

Dite che il codice non funziona? Ora guardate cosa avete nel vostro sottoprogramma.

bool Fun_New_Bar(){ // Ф-ия обнаружения нового бара
  static datetime New_Time=0; // Время текущего бара
  bool New_Bar=false; // Нового бара нет
  if(New_Time!=Time[0]){ // Сравниваем время
    New_Time=Time[0]; // Теперь время такое
    New_Bar=true; // Поймался новый бар
  }
}

Viene dichiarata una funzione booleana. Poiché è una funzione e non una procedura, dovrebbe restituire qualcosa al programma principale da cui è chiamata. Poiché la funzione è booleana, dovrebbe restituire un valore booleano. Dove avete una stringa che restituisce qualcosa al programma principale? Questo significa che all'inizio del programma, dato che non viene restituito nulla dalla funzione, le parentesi dell'espressione if(Fun_New_Bar()) saranno sempre false e l'avviso non apparirà mai.

Andiamo oltre. Perché avete dichiarato datetime New_Time=0; come statico? Qual è il suo ragionamento? Avete dichiarato una variabile e l'avete immediatamente inizializzata con zero. Al prossimo tick, accadrà la stessa cosa - la variabile sarà dichiarata e inizializzata di nuovo da zero. If(New_Time!=Time[0]){ Questa linea controlla se il valore della variabile non è uguale all'ora corrente. Beh, sì, la variabile ha zero, ma il tempo corrente non è zero. La condizione è soddisfatta, il valore attuale del tempo viene scritto nella variabile, il parametro New_Bar diventa vero. Al prossimo tick , New_Time non sarà più uguale a Time[0], controllerà di nuovo con successo la disuguaglianza e le due operazioni successive saranno eseguite. In altre parole, quando si verifica la condizione if(New_Time!=Time[0]), l'espressione tra parentesi sarà vera ad ogni tick. SEMPRE. Il che porta alla domanda: se è sempre vero, perché diavolo dovrebbe esserci questo assegno? Forse dovremmo semplicemente rimuoverlo? Perché dovremmo assegnare New_Time=Time[0] e New_Bar=true, se queste due variabili non sono usate da nessuna parte? Perché diavolo abbiamo bisogno di questi due incarichi? Vuoi giocare? O sei troppo pigro per pensare?

 

Come faccio a rendere una variabile globale disponibile a un EA in esecuzione su un secondo terminale MT4 in funzione?

 
DhP:

Come faccio a rendere una variabile globale disponibile a un EA in esecuzione su un secondo terminale MT4 in funzione?


Attraverso un'api, o attraverso un documento di testo.
 
drknn:

Attraverso un'api, o attraverso un documento di testo.

Come?
 
DhP:

Come?

Attraverso l'api non so come - ho letto che è possibile. Attraverso un documento di testo - è necessario scrivere una DLL in un linguaggio diverso da MQL4. Per esempio in Delphi o C++. La dll deve essere in grado di accedere al file situato all'esterno del terminale. È abbastanza fattibile. Più avanti, tutto è chiaro - l'Expert Advisor inserisce un nuovo valore della variabile globale in un documento di testo, e l'altro Expert Advisor lo legge da lì. La DLL dà accesso al documento di testo a entrambi gli Expert Advisors. Domande del genere sono già state poste qui. La gente ha chiesto qualcosa come far lavorare insieme gli EA in due canali diversi...
 
kolyango:

Questo è ancora più vero e funziona ora:

No, non lo fa - il tuo Alert ti avviserà ad ogni tick, non una volta al primo tick di una nuova candela.
 
kolyango:



Questo è ancora più corretto e ora funziona:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------


La funzione non è mia - l'ho presa online ma non l'ho usata. Guardato ora con attenzione - manca un operatore.

Questo è il modo giusto per farlo:

int start() // Спец. функция start
{
 if(Fun_New_Bar())//проверка наличия нового бара
   {
    Alert("Сформировался новый бар"); // Вывод на экран
   }
return(0); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{                  // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
 
drknn:

Attraverso un'api non so come - ho letto che è possibile. Attraverso un documento di testo - è necessario scrivere una DLL in un linguaggio diverso da MQL4. Per esempio in Delphi o C++. La dll deve essere in grado di accedere al file situato all'esterno del terminale. È abbastanza fattibile. Più avanti, tutto è chiaro - l'Expert Advisor inserisce un nuovo valore della variabile globale in un documento di testo, e l'altro Expert Advisor lo legge da lì. La DLL dà accesso al documento di testo a entrambi gli Expert Advisors. Domande del genere sono già state poste qui. La gente chiedeva qualcosa tipo come far lavorare insieme gli EA in due canali diversi...

Grazie, lo cercherò...
Motivazione: