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

 

hoz:

1. Если эксперт снять с графика тоже поступит команда ТРУ от IsStopped() ?

2. cioè più spesso solo quando si tolgono i gufi o gli script dal grafico, c'è qualche altro motivo per cui questa funzione si attiva?

3. Dove posso leggere qualcosa al riguardo?

4. E nel corpo della funzione crea già una condizione, quando la condizione è soddisfatta, allora IsStopped() = true, giusto?

1. Sì.

2. So solo come togliere la carta.

3. Non so.

4. Sì, può e funzionerà.

 
4. ?
 
tara:
4. ?

?
 
tara:
4. ?

Devo aver frainteso la domanda. Se fate IsStopped()=true voi stessi, non è possibile.
 
hoz:

?

Mostratemi l'implementazione, perché non riesco nemmeno a immaginarlo come un trinomio quadratico.
 
Integer:

Devo aver frainteso la domanda. Se fate IsStopped()=true voi stessi, non è possibile.

Questo è tutto. La domanda viene rimossa.
 
Integer:

Devo aver frainteso la domanda. Se fai IsStopped()=true tu stesso, è impossibile.


Questo è comprensibile. Non volevo farlo io. Infatti, se qualcosa viene eseguito nel ciclo, viene eseguito fino a quando l'Expert Advisor o lo script viene rimosso dal grafico e, di conseguenza, a quel punto viene inviato un comando al server:

IsStoped() = true;

Ho aperto delle funzioni scritte da TarasBy (io stesso scrivo la mia, ma periodicamente la esamino, perché ha un approccio interessante). Quindi ha una tale funzione:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Запускаем в цикл получение рыночной цены.                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_TradePrice (int fi_Price,           // Цена: 0 - Bid; 1 - Ask
                        bool fb_RealTrade,      // реальная торговля или оптимизация\тестирование
                        string fs_Symbol = "")  // валютная пара
{
    double ld_Price = 0.0;
//----
    if (fs_Symbol == "")
    {
       fs_Symbol = Symbol();
    }
    //RefreshRates();
    switch (fi_Price)
    {
       case 0:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Bid;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_BID);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Bid);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_BID));
             }
          }
          break;
       case 1:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Ask;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_ASK);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Ask);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_ASK));
             }
          }
          break;
   }
//----
   return (ld_Price);
}

Mi chiedo perché c'è una condizione?

if (!IsExpertEnabled() || IsStopped())

Otteniamo subito il BID e poi vengono controllati i flag delle funzioni IsStopped( ) e IsExpertEnabled(). Dov'è la logica? Secondo me, è più facile controllare tutto in una volta, e se qualcosa non va, uscire dalla funzione.

Poi abbiamo il comando RefreshRates(). All'inizio i dati di mercato non erano aggiornati, e alla fine, quando abbiamo già ricevuto i dati delle variabili BID, vengono aggiornati. O sto pensando in modo sbagliato o l'autore ha un modo specifico di pensare che non si adatta al mio. Qual è il punto?

 
hoz:

Ho scoperto le funzioni scritte da TarasBy (io scrivo le mie, ma le controllo di tanto in tanto, perché ha un approccio interessante). Quindi ha una tale funzione lì:

Mi chiedo perché c'è una condizione?

Otteniamo subito il BID e poi vengono controllati i flag delle funzioni IsStopped( ) e IsExpertEnabled(). Dov'è la logica? Secondo me, è più facile controllare tutto in una volta, e se qualcosa non va, uscire dalla funzione.

Poi abbiamo il comando RefreshRates(). All'inizio i dati di mercato non erano aggiornati, e alla fine, quando abbiamo già ricevuto i dati delle variabili BID, vengono aggiornati. O sto pensando in modo sbagliato o l'autore ha un modo specifico di pensare che non si adatta al mio. Qual è il punto?

Forse Igor risponderà domani...

Io l'avrei fatto:

switch (fi_Price)
 {
  case 0: return(MarketInfo(fs_Symbol, MODE_BID));
  case 1: return(MarketInfo(fs_Symbol, MODE_ASK));
 }

Tutto il resto è superfluo, secondo me.
 

Saluti a tutti!

Potete dirmi se è possibile insegnare a un EA a fare riferimento all'ultimo allarme attivato?

 
Zhunko:

Forse Igor risponderà domani...

Io lo farei:

Tutto il resto è superfluo, secondo me.


Vadim, avrei fatto esattamente come hai scritto! Ecco perché ho fatto la domanda. Ho pensato che forse mi è sfuggito qualcosa. Sto ancora osservando la mia logica e quella degli altri programmatori. Perché oltre alla logica di base, vedo che devo considerare una serie di fattori.