Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 639

 
Top2n:

Oui, merci beaucoup, vous êtes au-delà des mots, tellement utile, tellement clair ! Awesomeooo !!!

Ce serait cool si vous pouviez vous enseigner progressivement des compétences importantes de la manière la plus directe et efficace possible.

Et si d'autres peuvent en bénéficier de la même manière.

 

Je ne peux pas penser à quoi que ce soit) il y a une ligne Et comment puis-je vérifier si la ligne a changé

 
ClanVi:

Je ne peux pas penser) il y a une ligne Et comment puis-je vérifier si cette ligne a changé



CHARTEVENT_OBJECT_CHANGE

Modification des propriétés d'un objet graphique via la boîte de dialogue des propriétés

Le paramètre "sparam" renvoie le nom de l'objet modifié. Si l'objet est le vôtre, vérifiez les propriétés qui sont critiques pour votre objet.
 
barabashkakvn:


CHARTEVENT_OBJECT_CHANGE

Modification des propriétés d'un objet graphique via le dialogue des propriétés

Le paramètre "sparam" renvoie le nom de l'objet modifié. Si l'objet est le vôtre, vérifiez les propriétés qui sont critiques pour votre objet.

Comment sans objet, si nous savons que le prix est une ligne, nous devons vérifier s'il a changé, il est clair que nous devons comparer le prix).

quel genre de

if(NormalizeDouble(Price,Digits)-NormalizeDouble(Price2,Digits)!=0)
Price2 = Price;

où obtenir une mesure du prix2))

 
ClanVi:

Comment sans objet, nous connaissons le prix et c'est la ligne, il faut vérifier si elle a changé ou non, il est clair qu'il faut comparer ce prix je ne sais pas comment).

quel genre de

où obtenir une mesure du prix2))


le prix de la dernière barre et sera Price2, comparez Bid avec n'importe quel prix de la dernière barre de votre choix - Open, Close, High, Low.

Si vous voulez des prix intermédiaires, vous devez sauvegarder l'historique des ticks et prendre le prix précédent à partir de là, puis l'offre sera comparée au prix du tick précédent.

Et quel est le sens de la normalisation du prix ? Vous devez normaliser des valeurs calculées qui seront utilisées ultérieurement dans les ordres de négociation, et le prix est déjà normalisé.

 
evillive:

le prix de la dernière barre sera Price2

Si vous voulez des prix intermédiaires, vous devez sauvegarder l'historique des ticks et prendre le prix précédent à partir de là.

J'ai tout compris :)

Non, ça ne marcherait pas avec mes barres.

 
dans les signaux, je ne peux définir que le risque maximum que l'auteur utilise, pas plus ?
 
simpleton:

La méthode de recherche dans celle qui suit est légèrement différente :

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставил
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(string name) {

const  string   dt_123 = TimeToStr(TimeCurrent(),TIME_SECONDS); //
const  datetime   vremnin= StrToTime(dt_123); // Присваиваем время в секундах 
  
    
const  datetime     vrem2kor= ObjectGet(name,OBJPROP_TIME2);// время второй координаты
    MqlDateTime str1;
    TimeToStruct(vrem2kor,str2);
const  int     PjatPon=str1.sec;

    if(PjatPon+3600>=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массив
   Print("  PjatPon  ", PjatPon,"  vremnin ",vremnin,"  vrem2kor ",vrem2kor);
        return false;
    }  
   return true;
}
/******************************************************************************/ void FillAndPrint(double &array[], const bool buy) {   if (MassTrendNumber(array, buy)) {     const int limit = ArraySize(array);     Print("Найдено объектов: ", limit);     for (int i = 0; i < limit; i++) {       Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));     }   } else {     Print("Чёрт!");   } }

N'y voyez pas d'insolence, je nesais même plus comment l'aborder, mais c'est plus fort que moi.J'ai pensé que si je pouvais constituer un réseau, alors les conditions seraient martelées, filtrant le signal comme rien d'autre.

 
Top2n:

Ne faites pas attention à moi, jene sais même plus comment l'aborder, mais je ne peux rien y faire. J'ai pensé que si je pouvais faire un tableau, alors les conditions seraient un casse-tête pour filtrer le signal.

Lafonction TimeCurrent() est surchargée. Si vous lisez la description du type datetime, vous verrez que la première variante de la première fonction fera l'affaire :

#property strict

/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}

/******************************************************************************/
void OnStart() {
  const datetime dt = TimeCurrent();

  Sleep(5555);
  Print("Diff in secs = ", DiffInSecs(TimeCurrent(), dt));
}

C'est le cas :

01:10:43 Script 2 EURUSDm,H1: loaded successfully
01:10:43 2 EURUSDm,H1: initialized
01:10:49 2 EURUSDm,H1: Diff in secs = 6
01:10:49 2 EURUSDm,H1: uninit reason 0
01:10:49 Script 2 EURUSDm,H1: removed

Nous pouvons aller dans une autre direction, non pas pour obtenir la différence des moments dans le temps, mais pour comparer ces moments (en même temps, nous pouvons utiliser à nouveau une expression conditionnelle) :

#property strict

/******************************************************************************/
void test(const datetime dt) {
  Sleep(2000);
  Print("Момент времени dt ", TimeCurrent() < dt ? "НЕ " : "", "достигнут");
}

/******************************************************************************/
void OnStart() {
  const datetime dt1 = TimeCurrent();
  const datetime dt2 = dt1 + 5;

  test(dt2);
  test(dt2);
  test(dt2);
  test(dt2);
}

Le démarrage donne :

01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:29 2 EURUSDm,H1: initialized
01:30:31 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:33 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:35 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: uninit reason 0
01:30:38 Script 2 EURUSDm,H1: removed

Après avoir compris l'essence des idées appliquées, et s'être rappelé ce qu'est le type de date, travailler avec des moments de temps, si la précision requise ne dépasse pas les unités de secondes, ne devrait pas poser de difficultés.

 
simpleton:

Lafonction TimeCurrent() est surchargée. Si vous lisez la description de ce qu'est le type datetime, vous constaterez que la première version de la fonction est parfaite :

C'est le cas :

Nous pouvons également aller dans l'autre sens, non pas pour obtenir la différence des moments, mais pour comparer ces moments (en même temps, nous pouvons à nouveau utiliser une expression conditionnelle) :

Donne en cours d'exécution :

Une fois que vous avez compris les idées, et que vous vous souvenez du type datetime, travailler avec des points dans le temps ne devrait pas poser de problème, tant que la précision requise ne dépasse pas les unités de secondes.


Pour être honnête, je n'ai pas encore trouvé comment l'appliquer. Il reste un millimètre à faire, c'est dommage de s'arrêter quand c'est presque fini.

Task, ne pas écrire le prix dans le tableau si l'objet time(2nd parameter+3600sec>current)||(1st parameter time - 2nd parameter time)<3600sec )

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюда
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }
 
  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(string name) {

 const  datetime    dt = TimeCurrent();
 const  datetime   dt1 = ObjectGet(name,OBJPROP_TIME1);
 const  datetime   dt2 = ObjectGet(name,OBJPROP_TIME2);
  Print("  DiffInSecs(dt,dt2)  ", DiffInSecs(dt,dt2),"  DiffInSecs(dt2,dt1))  ",DiffInSecs(dt2,dt1),"  dt1  ",dt1);
  
     if(DiffInSecs(dt,dt2)<3600||DiffInSecs(dt2,dt1)<3600)// Если время объекта второго параметра + 3600 сек > текущего времени,
 или если разница первого и второго   параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
     {   return false;
     }  
   return true;
} 
/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}
Raison: