[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 181

 
Activict:

Buon pomeriggio. Ho una domanda del genere.

Ho ridisegnato questo indicatore per le mie esigenze con grande difficoltà da pezzi di codice di altri Expert Advisors e Induttori. Non è un grande codice e funziona come voglio io.

La questione è che esegue alcuni calcoli internamente e mostra delle frecce in alto o in basso sul grafico.

Si prega di consigliare come fare un Expert Advisor per aprire un ordine nella giusta direzione quando appare la freccia sul grafico

Più precisamente, ho solo bisogno di sapere quale freccia è attiva ora, penso di poter fare il resto

Ecco un pezzo di codice per renderlo più chiaro, è un'inizializzazione nell'indicatore

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

Grazie in anticipo a tutti

Usa la funzione iCustom integrata per ricevere i valori dell'indicatore personalizzato di cui hai bisogno nell'Expert Advisor.



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Per esempio, devi sapere se c'è una freccia verso l'alto o verso il basso sull'ultima barra completamente formata:


double Up=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 1, 1); // стрелка вверх
double Dw=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 2, 1); // стрелка вниз
 

Grazie per la risposta! Sì, le frecce a volte mancano. Questo metodo leggerà "0" se la freccia scompare?

E la freccia è disegnata solo sulla barra emergente, le barre precedenti non si ridisegna, al momento dell'occorrenza è necessario aprire un affare e rispettivamente se la freccia scompare poi chiudere

 
C'è un modo per far sì che l'EA invii richieste al server più spesso del solito usando il codice del programma? In modo che invece di una richiesta ce ne siano due, o per questo si può semplicemente ripetere il programma shell ... Se tre richieste invece di una, allora ripetere due volte...? ?
 
Activict:

Sì, le frecce a volte mancano. Questo metodo attraverso la personalizzazione leggerà '0' se la freccia manca?

Sì, lo farà.

Attivare:

E la freccia è disegnata solo sulla barra che si forma, le barre precedenti non si ridisegna, al momento dell'occorrenza è necessario aprire la posizione e rispettivamente se la freccia scompare allora chiudere

Di conseguenza, se la freccia si trova su una delle barre completamente formate, non scomparirà più. La freccia può apparire e scomparire diverse volte sulla barra corrente.
 
Attivare:

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

Il valore che è specificato come "vuoto" nel codice dell'indicatore è considerato con iCustom. Di regola, può essere 0 o EMPTY_VALUE.

EMPTY_VALUE è predefinito negli indicatori, ma se mettete SetIndexEmptyValue in init(), sarà diverso.

 
yellownight:
C'è un modo per far sì che l'EA invii richieste al server più spesso del solito usando il codice del programma? In modo che invece di una richiesta ce ne siano due, o per questo si può semplicemente ripetere il programma shell ... Se tre richieste invece di una, allora ripetere due volte...? ?
Questo non vi farà bene. Bombardate il server di richieste e il vostro account potrebbe essere disabilitato del tutto. So che questo succede alle persone che "esagerano con le richieste" e "bombardano" il server con troppe richieste.
 

Ho scritto un semplice indicatore. Ecco il codice:

//+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки";
extern int     maTF = 0;
extern int     maPeriod = 50;
extern int     maShiftByPrice = 0;
extern int     maMethod = 0;
extern int     maPrice = 0;
extern int     shiftBarsBack1 = 2;                       // Первое значение shift
extern int     shiftBarsBack2 = 7;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Другие переменные";
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[1000];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400) limit = 400;
        
    for(i = limit;i > 1;i--)
    {
      pointOfMaFirst = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print("varsAngle[i] = ", varsAngle[i]);
    }

    return(0);
  }
C'è solo un buffer in esso. I valori degli indicatori sono di tipo doppio.

In Expert Advisor, ho deciso di ottenere il valore dell'indicatore e applicarlo al trade come filtro.

Qui ho scritto una semplice chiamata di funzione di questo indicatore buffer sull'ultima barra formata:

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
Il valore della pendenza non è corretto nel tester:
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

Perché? Il tipo è corretto. Anche la chiamata è corretta. L'indicatore funziona correttamente a tutti. Ecco il log del tester, ma da un vero mercato attuale:

2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

Perché viene restituito sempre un numero 2147483647 invece del numero richiesto?

 
hoz:

Ho scritto un semplice indicatore. Ecco il codice:

Ha solo un buffer. I valori degli indicatori sono di tipo doppio.

In Expert Advisor, ho deciso di ottenere il valore dell'indicatore e applicarlo al trade come filtro.

Qui ho scritto una semplice chiamata di funzione di questo indicatore buffer sull'ultima barra formata:

Il valore di pendenza restituito nel tester non è corretto:

Perché? Il tipo è corretto. Anche la chiamata è corretta. L'indicatore funziona correttamente a tutti. Ecco il log sul tester, e dal mercato attuale reale:

Perché viene restituitosempre un numero2147483647 invece del numero richiesto?

Nel tester all'inizio del lavoro non ci sono abbastanza barre nella storia per il calcolo corretto dell'indicatore.

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF)<maPeriod) { Print("Недостаточно баров в истории для корректного расчёта значений индикатора!"); return(-1.0); }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF) < maPeriod)
   {
      Print("Недостаточно баров в истории для корректного расчёта значений индикатора!");
      return(0);
   }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   Print ("iBars(NULL, i_TF) = ", iBars(NULL, i_TF));
   
   return(slope);
}

Ho scaricato una storia da Dukascopy dal 2007... è impossibile che non ci siano abbastanza barre. Il periodo MA è solo 50.

Ho incollato la tua linea, ma ho corretto return(0) ... e aggiunto l'output del numero di barre sul grafico:

Qui nel registro:

2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz:

Ho scaricato una storia da Dukascopy dal 2007... è impossibile che non ci siano abbastanza barre. Il periodo MA è solo 50.

Ecco la tua linea, ma ho corretto return(0) ...

Eccolo nel registro:


Il problema sembra essere nell'indicatore

 if (limit > 400) limit = 400;