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

 

Acemi soru:

Kısa bir süre önce MetaEditor'un terminalde açılmadığını, "düzenle" komutunun Uzman Danışmanlarda çalışmadığını ve göstergeler ............ bunu çözmeme yardımcı olduğunu keşfettim. Teşekkür ederim.

 
gnawingmarket :

Acemi soru:

Kısa bir süre önce MetaEditor'un terminalde açılmadığını, "düzenle" komutunun Uzman Danışmanlarda çalışmadığını ve göstergeler ............ bunu çözmeme yardımcı olduğunu keşfettim. Teşekkür ederim.


cevaplamaya çalışacağım.

Eski kodları düzeltme seçeneklerinin hiçbiri artık çalışmıyor.

 
Ama taç giymiş bir prensin var.
 
tara :
Ama taç giymiş bir prensin var.


Her şeyi biliyorsun! Bugün bana Yöneticiyi kimin koyduğunu yakalayamadım ama şifreyi vermedim ve soracağımı da bilmiyordum! Yarın kement yapacağım! Neden uyumuyorsun?

Katıldığı için Tara'ya teşekkürler! Mahalledeki komşum tarafından her şey bana geri verildi! Bilgisayar Bilimleri Uzmanı!

 
Top2n :

Evet, birçok sorunun aptalca olduğunu anlıyorum. Dürüstçe deniyorum, bütün günü geçirdim ama sonuç alamadım.

Diziye, mevcut çubuktaki birkaç trend çizgisinin fiyatlarının değerini yazıyorum.

Nesne yoksa diziden bir değer nasıl kaldırılır?

artmedia70 :

Her tıklamada trend fiyatlarının değerlerini gözden geçirirseniz, diziyi başlatırsanız ve istenen trend çizgisinin bir sonraki istenen fiyatını bulduğunuzda boyutunu artırırsanız, önceden çalışılmış değerleri kaldırmanıza gerek kalmaz. diziden kaldırılan trend çizgileri. Dizi dinamik olacak ve her seferinde yalnızca mevcut nesnelerin değerlerini içerecektir.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
 double MassTrendNumber( double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem= ObjectName (i); 
  string DW= "downtrendline" + IntegerToString (i); // существует два названия трендовых линий, первое
  string DW2= "uptrendline" + IntegerToString (i); // второе 
if(tip="Sell")   //первый массив цен на селл
   if (DWnem=DW) //если имя равно "downtrendline"
   if (ObjectGet(DWnem, OBJPROP_COLOR )==Goldenrod || ObjectGet(DWnem, OBJPROP_COLOR )==Gainsboro || ObjectGet(DWnem, OBJPROP_COLOR )==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem, 1 ); //записываем 
if(tip="Buy")   //второй массивцен на бай
 if (DWnem=DW2)
 if (ObjectGet(DWnem, OBJPROP_COLOR )==Goldenrod || ObjectGet(DWnem, OBJPROP_COLOR )==Gainsboro || ObjectGet(DWnem, OBJPROP_COLOR )==White)
  array[i]=ObjectGetValueByShift(DWnem, 1 );

  }   return ;
   }

	          
 

Ayrı bir pencerede kapanış fiyatından 0 civarında osilatör yapmaya çalışıyorum ama olmuyor, daha önce biri yaptıysa lütfen formülü söyleyin.

Yani, Kapat[i] fiyatımız var, bu fiyatın MACD/CCI'da olduğu gibi ayrı bir pencerede sıfırın üstünde veya altında dönmesine ihtiyacımız var ama ne kadar uğraşırsam uğraşayım ek değerler olmadan çalışmıyor MA gibi: şimdi iClose -iMA'yı çıkarırsanız benzer bir şey olur, ancak belki de kenar yumuşatma olmayan seçenekler var mı?

Peki, ya da 0.0 ... 1.0 aralığında, eğer sıfıra yakın bir yol yoksa ...

 
Top2n :

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

/******************************************************************************/
void OnStart () {
   double masS[];
   double masB[];

   Print ( "Sell:" );
  FillAndPrint(masS, false );

   Print ( "Buy:" );
  FillAndPrint(masB, true );
}

Grafiğe karşılık gelen adlara sahip iki beyaz trend çizgisi ekledim ve şunları elde ettim:

 04 : 14 : 34 Script 2 EURUSDm,H1: loaded successfully
04 : 14 : 34 2 EURUSDm,H1: initialized
04 : 14 : 34 2 EURUSDm,H1: Sell:
04 : 14 : 34 2 EURUSDm,H1: Найдено объектов: 1
04 : 14 : 34 2 EURUSDm,H1: Price[ 0 ] = 1.36268
04 : 14 : 34 2 EURUSDm,H1: Buy:
04 : 14 : 34 2 EURUSDm,H1: Найдено объектов: 1
04 : 14 : 34 2 EURUSDm,H1: Price[ 0 ] = 1.35668
04 : 14 : 34 2 EURUSDm,H1: uninit reason 0
04 : 14 : 34 Script 2 EURUSDm,H1: removed

Kilometre fonksiyonları yazmayın, programı kısa "cümlelere" - "tuğlalara" bölün. Küçük "tuğlalardan" daha büyük olanlar, büyük olanlardan - hatta daha büyük olanlardan - kalıplanır. Bak, bu mümkün.

Tüm verileri yalnızca parametreler aracılığıyla işlevlere iletin.

Çağrılan işlev başarısız olabilirse hataları ele aldığınızdan emin olun ve hata yoksayılırsa sonraki eylemlerin ciddi sonuçları olacaktır. Program çökmelerinin büyük çoğunluğu (genel olarak), hata işlemenin hiç programlanmamasından kaynaklanmaktadır.

Örneğin, bir dizinin boyutunu artırmak için çağrılan ArrayResize() bir hata döndürürse, ancak programcı bunu kontrol etmemişse ve sözde artan diziye atıfta bulunursa, o zaman bir sınır dışı hata oluşur ve bu da aşağıdakilere yol açar: MQL4 programının sonraki durağı. Örneğin bir Uzman Danışman, açık pozisyonları bırakarak ticareti durdurur. harika değil mi?

"dizi[0] = 0;" eklemeyi deneyin MassTrendNumber() işlevindeki döngüden önce ve komut dosyasının bir dizi sınır dışı hatasından sonra çıktığından emin olun.

 
evillive :

Ayrı bir pencerede kapanış fiyatından 0 civarında osilatör yapmaya çalışıyorum ama olmuyor, daha önce biri yaptıysa lütfen formülü söyleyin.

Yani Close[i] fiyatımız var, bu fiyatın MACD/CCI'da olduğu gibi sıfırın altında veya üstünde dönmesine ihtiyacımız var, ayrı bir pencerede ama ne kadar uğraşırsam uğraşayım ek değerler olmadan olmuyor MA gibi: şimdi iClose -iMA'yı çıkarırsanız benzer bir şey olur, ancak belki de kenar yumuşatma olmayan seçenekler var mı?

Peki, ya da 0.0 ... 1.0 aralığında, eğer sıfıra yakın bir yol yoksa ...


https://www.mql5.com/ru/code/9340
 

Aynen öyle. Bu dünyada hiçbir şey yeni değil
 
simpleton :

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

Grafiğe karşılık gelen adlara sahip iki beyaz trend çizgisi ekledim ve şunları elde ettim:

Kilometre fonksiyonları yazmayın, programı kısa "cümlelere" - "tuğlalara" bölün. Küçük "tuğlalardan" daha büyük olanlar, büyük olanlardan - hatta daha büyük olanlardan - kalıplanır. Bak, bu mümkün.

Tüm verileri yalnızca parametreler aracılığıyla işlevlere iletin.

Çağrılan işlev başarısız olabilirse hataları ele aldığınızdan emin olun ve hata yoksayılırsa sonraki eylemlerin ciddi sonuçları olacaktır. Program çökmelerinin büyük çoğunluğu (genel olarak), hata işlemenin hiç programlanmamasından kaynaklanmaktadır.

Örneğin, bir dizinin boyutunu artırmak için çağrılan ArrayResize(), bir hata döndürürse, ancak programcı bunu kontrol etmemişse ve sözde artan diziye atıfta bulunursa, o zaman bir dizi sınır dışı hatası oluşur ve bu da aşağıdakilere yol açar: MQL4 programının sonraki durağı. Örneğin bir Uzman Danışman, açık pozisyonları bırakarak ticareti durdurur. harika değil mi?

"dizi[0] = 0;" eklemeyi deneyin MassTrendNumber() işlevindeki döngüden önce ve komut dosyasının bir dizi sınır dışı hatasından sonra çıktığından emin olun.


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