[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 498

 
Zhunko:
Für 32 ist mehr möglich. Nur die Hauptplatine schränkt sie ein. Es scheint, dass bis zu 200 GB angeschlossen werden können. Ich habe irgendwo einen Tisch gesehen.
Vadim, ist das die Art von Freischaltung, die Sie meinen?
 
TarasBY:
Sie können "Windows Task Scheduler" googeln. Sie können es hier nachlesen.
Müssen Sie separate Programme (Tasks) erstellen, um aktivierte Terminals zu deaktivieren?
 
yosuf:
Müssen Sie separate Programme (Aufgaben) erstellen, um aktivierte Terminals zu deaktivieren?
Herr Dozent, lesen Sie das Dokument unter dem Link von TarasBY aufmerksam und denken Sie sich keinen Unsinn aus.
 

Hier ist mein Test-Roh-Eulen-Tutorial:

//+---------------------------------------------------------------------------------------+
//|                               Strategy №1 for H1.mq4                                  |
//|                                        hoz                                            |
//|                                                                                       |
//+---------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

//----- Входные параметры -----------
extern string     H1 = "___ Общие параметры индикаторов ___";
extern int        i_TF = 60;
extern string     H2 = "_____ Параметры быстрой машки _____";
extern int        i_maFastPeriod = 5,
                  i_maFastShift = 0,
                  i_maFastMethod = 1;
extern string     H3 = "____ Параметры медленной машки ____";
extern int        i_maSlowPeriod = 19,
                  i_maSlowShift = 0,
                  i_maSlowMethod = 1;
extern string     H4 = "_______ Параметры Моментума _______";
extern int        i_momPeriod = 18;
extern string     H5 = "_______ Параметры Стохастика ______";
extern int        i_stoch_D = 3,                   // Сигнальная линия
                  i_stoch_K = 13,                  // Главная линия
                  i_stoch_slowing = 3;             // Замедление
                  
int g_ticket,                                      // Тикет текущей позиции
    g_type;                                        // Тип текущей позиции

//Иднентификаторы типов сигналов
#define CROSSINGTOUP                 1             // Пересечение быстрой медленную снизу вверх
#define CROSSINGTODOWN              -1             // Пересечение быстрой медленную сверху вниз
#define CROSSINGWAIT                 0             // Отсуствие пересечения машек

#define SIGNAL_BUY                   1             // Сигнал покупки
#define SIGNAL_SELL                 -1             // Сигнал продажи
#define SIGNAL_NO                    0             // Отсуствие сигнала

//+---------------------------------------------------------------------------------------+
//| Функция инициализации эксперта                                                        |
//+---------------------------------------------------------------------------------------+
int init()
  {
   
   return(0);
  }
//+---------------------------------------------------------------------------------------+
//| Функция деинициализации эксперта                                                      |
//+---------------------------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
   for(int i=1;i<=Bars;i++)
   {
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

//+---------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                   |
//+---------------------------------------------------------------------------------------+
void FindOrders()
{
   
}
//+---------------------------------------------------------------------------------------+
//| Функция start эксперта                                                                |
//+---------------------------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) liefert das Signal der Überquerung.

intGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) Funktion empfängt Signal von Stochastic.

Die void-Funktion GetMomentumSignal() liefert den Wert des Impulses.

Die Funktion int GetSignal() ermittelt das allgemeine Signal auf der Grundlage der 3 vorherigen Funktionen und nicht nur diese. Die Frage ist folgende. Da die Funktionint GetSignal() sozusagen die Hauptfunktion ist und das Hauptsignal erhält, erhalte ich alle Werte der Klappen(i_maFast1,i_maFast2, i_maSlow1 undi_maSlow2) und der Stochastik(stochD1,stochD2,stochK1,stochK2)

War es richtig, den Code zu optimieren?

Natürlich werden alle Parameter, die mit der FunktionGetSignal() ermittelt werden,per Referenz an die entsprechenden Funktionen übergeben.

Aber hier dieses Fragment

     if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);

Bei der Kompilierung ist ein Fehler aufgetreten:

'&' - variable expected E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 31)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 50)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 69)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 88)
4 ошибок, 0 предупреждений
Und warum?

 
Ich mag es nicht, in linkem Code herumzustochern, aber es ist mir sofort aufgefallen, warum in Funktionen ein & (!) nach double steht. Das ist die Ursache von Fehlern!
 
hoz:

Hier ist mein Test-Roh-Eulen-Tutorial:

Beim Kompilieren tritt ein Fehler auf:

Und warum?

Weil:

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}
 
borilunad:
Ich mag es nicht, in benutzerdefiniertem Code zu wühlen, aber mir ist sofort aufgefallen, warum in Funktionen ein & (!) nach dem Doppelten steht. Das ist die Ursache von Fehlern!

Es macht also Sinn. Es bedeutet, dass Parameter über Links übertragen werden.

Um den Code nicht im Detail zu erklären, werde ich ihn kurz erläutern.

Es gibt 3 Funktionen:(int GetCrossingMa, int GetStochSignal und int GetSignal())

Die Funktion int GetSignal() ermittelt die Werte von Klappen und anderen Indikatoren, die per Referenzan Nicht-Kernfunktionen(int GetCrossingMa undint GetStochSignal) weitergegeben werden, um die entsprechenden Signale in diesen Funktionen zu erhalten. Ich möchte dies tun, um zu vermeiden, dass ich die gleichen Daten in verschiedenen Funktionen erhalte. Ich glaube nicht, dass es klug ist, dieselben Masken in 2 oder mehr Funktionen zu berechnen. Es ist einfacher, sie nur einmal zu berechnen, und das war's. Warum zusätzliche Ressourcen dafür verschwenden?

 
hoz:

Es macht also Sinn. Es bedeutet, dass Parameter über Links übertragen werden.

Um den Code nicht im Detail zu erklären, werde ich ihn kurz erläutern.

Es gibt 3 Funktionen:(int GetCrossingMa, int GetStochSignal und int GetSignal())

Die Funktion int GetSignal() ermittelt die Werte von Klappen und anderen Indikatoren, die per Referenzan Nicht-Kernfunktionen(int GetCrossingMa undint GetStochSignal) weitergegeben werden, um die entsprechenden Signale in diesen Funktionen zu erhalten. Ich möchte dies tun, um zu vermeiden, dass ich die gleichen Daten in verschiedenen Funktionen erhalte. Ich glaube nicht, dass es klug ist, dieselben Masken in 2 oder mehr Funktionen zu berechnen. Es ist einfacher, sie nur einmal zu berechnen, und das war's. Warum zusätzliche Ressourcen dafür verschwenden?

Haben Sie in einer anderen Sprache als µl4 programmiert?

 
hoz:

Hier ist mein Test-Roh-Eulen-Tutorial:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) liefert das Signal der Überquerung.

intGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) Funktion empfängt Signal von Stochastic.

Die void-Funktion GetMomentumSignal() liefert den Wert des Impulses.

Die Funktion int GetSignal() ermittelt das allgemeine Signal auf der Grundlage der 3 vorherigen Funktionen und nicht nur diese. Die Frage ist folgende. Da die Funktionint GetSignal() sozusagen die Hauptfunktion ist und das Hauptsignal erhält, erhalte ich alle Werte der Klappen(i_maFast1,i_maFast2, i_maSlow1 undi_maSlow2) und der Stochastik(stochD1,stochD2,stochK1,stochK2)

War es richtig, den Code zu optimieren?

Natürlich werden alle Parameter, die mit der FunktionGetSignal() ermittelt werden,per Referenz an die entsprechenden Funktionen übergeben.

Aber hier dieses Fragment

bei der Kompilierung ein Fehler aufgetreten ist:

Und warum?

Dies kann eine Variante der Signalsuche auf der Leiste sein, die wir brauchen:

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa (int fi_Bar = 1)
{
    double i_maFast1 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar),      // Вычисляем быстрые скользящие..
           i_maFast2 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar + 1),    //..средние
           i_maSlow1 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar),      // Вычисляем медленные скользящие..
           i_maSlow2 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar + 1);    //..средние
//----
    if (i_maFast2 < i_maSlow2) if (i_maFast1 > i_maSlow1)             // Если быстрая скользящая пересекла медленную снизу вверх..
    return (CROSSINGTOUP);                                           //.. значит, - пересечение вверх
    if (i_maFast2 > i_maSlow2) if (i_maFast1 < i_maSlow1)             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
    return (CROSSINGTODOWN);                                         //..значит, - пересечение вниз
//----
    return (CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal (int fi_Bar = 1)
{
    double stochD1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar),     // Вычисляем значения сигнальной линии..
           stochD2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar + 1),   //..стохастика
           stochK1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar),     // Вычисляем значения главной линии..
           stochK2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar + 1);   //..стохастика
//----
      if (stochD2 < stochK2) if (stochD1 > stochK1)                     // Если сигнальная линия пересекла главную снизу вверх..
      return (CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if (stochD2 > stochK2) if (stochD1 < stochK1)                     // Если сигнальная линия пересекла главную сверху вниз..
      return (CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
//----
   return (CROSSINGWAIT);                                             // Ожидаем пересечения
}
//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
double GetMomentumSignal (int fi_Bar = 0)
{return (iMomentum (Symbol(), i_TF, i_momPeriod, 0, fi_Bar));}
//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal (int fi_Bar = 1)
{
    int li_Signal;
//----
      double ld_SignalMomentum = GetMomentumSignal (fi_Bar);
      int    li_SignalStoch = GetStochSignal (fi_Bar),
             li_CrossingMA = GetCrossingMa (fi_Bar);
//----
    return (li_Signal);
}

Und in der letzten Funktion GetSignal() wird eine "Addition" aller Signale (von Ihnen selbst) vorgenommen.

P.S. Es gibt einen "heiklen" Moment, wenn man das Signal vom Indikator erhält. Sie können zum Beispiel festlegen, dass maSlow über/unter maFast liegt, oder Sie können den Moment, in dem sie sich schneiden, "einfangen". Der Ansatz und der Code sind unterschiedlich.

 
Roman.:

Haben Sie in einer anderen Sprache als µl4 programmiert?


Ein bisschen in Perl und ein bisschen in Pxp. Aber ich habe mich nicht ernsthaft mit anderen Sprachen befasst, weil ich es nicht nötig hatte. Ist das wichtig?