Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 639

 
Top2n :

Evet, çok teşekkür ederim, nasıl yardım ettiğinize dair hiçbir kelimeniz yok, her şey açık! Güzel!!!

Önemli becerileri yavaş yavaş en doğrudan ve etkili bir şekilde kendi başınıza öğrenebilirseniz harika olur.

Ve başkaları da aynı şekilde faydalanabilirse.

 

Che düşünmüyor) bir çizgi var Ve bu çizginin değişip değişmediğini nasıl kontrol edeceğim

 
ClanVi :

Che düşünmüyor) bir çizgi var Ve bu çizginin değişip değişmediğini nasıl kontrol edeceğim



CHARTEVENT_OBJECT_CHANGE

Özellikler İletişim Kutusu aracılığıyla Grafik Nesnesinin Özelliklerini Değiştirme

"sparam" parametresi değiştirilen nesnenin adını döndürür. Nesne size aitse, nesneniz için kritik olan özellikleri kontrol edin.
 
barabashkakvn :


CHARTEVENT_OBJECT_CHANGE

Özellikler İletişim Kutusu aracılığıyla Grafik Nesnenin Özelliklerini Değiştirme

"sparam" parametresi değiştirilen nesnenin adını döndürür. Nesne size aitse, nesneniz için kritik olan özellikleri kontrol edin.

Objesiz olarak fiyatı biliyoruz, çizgi bu, değişip değişmediğini kontrol etmemiz gerekiyor, bu fiyatı karşılaştırmamız gerektiği açık, nasıl bilmiyorum)

Ne gibi

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

ölçüm nereden alınır2))

 
ClanVi :

Objesiz olarak fiyatı biliyoruz, çizgi bu, değişip değişmediğini kontrol etmemiz gerekiyor, bu fiyatı karşılaştırmamız gerektiği açık, nasıl bilmiyorum)

Ne gibi

ölçüm nereden alınır2))


son çubuktaki fiyat Fiyat2 olacaktır, Teklifi, seçim yapmak için önceki çubuğun herhangi bir fiyatıyla karşılaştırın - Aç, Kapat, Merhaba, Düşük.

Ara fiyatlar istiyorsanız, tıklama geçmişini kaydetmeniz ve oradan önceki fiyatı almanız gerekir, o zaman Teklif bir önceki fiyatın fiyatı ile karşılaştırılır.

Ve fiyat normalleşmesinin amacı nedir? hesaplanan değerleri normalleştirmeniz gerekir, bu daha sonra ticaret emirlerine gider ve fiyat zaten normalleştirilmiştir.

 
evillive :

son çubuktaki fiyat Fiyat2 olacaktır

Ara fiyatlar istiyorsanız, tick geçmişini kaydetmeniz ve oradan önceki fiyatı almanız gerekir.

Hepsi anlaşıldı :)

Hayır, orada barlarla çalışmazdım

 
sinyallerde, maksimum riski yalnızca yazarın kullandığı riski ayarlayabilir miyim, artık değil mi?
 
simpleton :

Aşağıdaki arama yöntemi biraz farklıdır:

 #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 ( "Чёрт!" );   } }

Bunu küstahlık olarak algılamayın, zaten nasıl başvuracağımı bile bilmiyorum ama hiçbir şey yapamıyorum. Bir dizi derlemek mümkün olsaydı, yapacak bir şey olmadığı için sinyali filtrelemek için koşulları puanlayın diye düşündüm.

 
Top2n :

Bunu küstahlık olarak algılamayın, zaten nasıl başvuracağımı bile bilmiyorum ama hiçbir şey yapamıyorum. Bir dizi derlemek mümkün olsaydı, yapacak bir şey olmadığı için, sinyal filtrelemeden itibaren koşulları puanlamayı düşündüm.

TimeCurrent() işlevi aşırı yüklenmiş. Datetime türünün ne olduğuna dair açıklamayı okursanız, işlevin ilk sürümünün oldukça uygun olduğu ortaya çıkıyor:

 #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));
}

Koşmak şunları sağlar:

 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

Öte yandan, zaman noktalarındaki farkı almak için değil, bu anları karşılaştırmak için gidebilirsiniz (aynı zamanda koşullu ifadeyi tekrar uygulayacağız):

 #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);
}

Koşmak şunları sağlar:

 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

Uygulanan fikirlerin özünü anladıktan ve ayrıca, tarih saat türünün ne olduğunu hatırladıktan sonra, gerekli doğruluk saniye birimlerini geçmiyorsa, zaman noktalarıyla çalışmak artık zorluklara neden olmamalıdır.

 
simpleton :

TimeCurrent() işlevi aşırı yüklenmiş. Datetime türünün ne olduğuna dair açıklamayı okursanız, işlevin ilk sürümünün oldukça uygun olduğu ortaya çıkıyor:

Koşmak şunları sağlar:

Öte yandan, zaman noktalarındaki farkı almak için değil, bu anları karşılaştırmak için gidebilirsiniz (aynı zamanda koşullu ifadeyi tekrar uygulayacağız):

Koşmak şunları sağlar:

Uygulanan fikirlerin özünü anladıktan ve ayrıca, tarih saat türünün ne olduğunu hatırladıktan sonra, gerekli doğruluk saniye birimlerini geçmiyorsa, zaman noktalarıyla çalışmak artık zorluklara neden olmamalıdır.


Dürüst olmak gerekirse, nasıl başvuracağımı anlamadım. Milimetrenin sonuna kadar kalıyor, neredeyse her şey bittiğinde durmak ayıp.

Görev, nesnenin zamanı (2. parametre+3600sn>akım)||(1. parametrenin zamanı - 2. parametrenin zamanı)<3600sn ise fiyatı diziye yazmak değildir.

 /******************************************************************************/
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;
}
Neden: