[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 705

 
Infinity :

Çok açık, kitaba bakıyorum ve göremiyorum, işe yarıyor, teşekkürler! Sorulara devam ediyorum. Hepsi aynı global değişkenler hakkında. Bu yüzden göstergeye aşağıdaki koşulu ekledim:

Göstergenin hangi para biriminde olduğuna bağlı olarak, hangi global değişkene değer atanacağını belirlemek istiyorum.

Anladığım kadarıyla GlobalVariableSet (valuta, param) global değişkeninde (valuta) adı kendisine yukarıda atanan değeri içermelidir

EA kodunda global değişkeni tekrar çağırırım

stringvaluta="değer";

int i=GlobalVariableGet(valuta); // ama değeri alamadım,.... yani 0 alıyorum. Belki global bir değişkenin adını bu şekilde değiştirmek mümkün değildir?

net değil.. EA gösterge tarafından kaydedilen değeri kontrol ederse, EA'daki valuta parametresinin değerinin cihazın adına karşılık gelmesi gerektiğini varsaymak mantıklı olacaktır, yani. EURUSD veya GBPUSD..

buna göre, eğer EA mevcut enstrümanın değerini kontrol ederse, o zaman

dizi değeri = Sembol();

int i= GlobalVariableGet (değer);
 
zhuki :

Yardımdan başlamak için

doubleGlobalVariableGet ( dize adı)

Varolan bir global değişkenin değerini veya hata durumunda 0 değerini döndürür. Bir hata hakkında bilgi almak için GetLastError() işlevini çağırmanız gerekir.


GV içeriğini görüyor ancak alamıyor musunuz?


Pekala, hem isim hem de değer global değişkenlerde gösteriliyor, .... Sadece kodumda global bir değişkenin değerini global bir değişkenin (parametre-adı) aracılığıyla alamıyorum, bir tane belirtmem gerekiyor. dize adı, o zaman sorun yok.
 
Infinity :

Pekala, hem isim hem de değer global değişkenlerde gösteriliyor, .... Sadece kodumda global bir değişkenin değerini global bir değişkenin (parametre-adı) aracılığıyla alamıyorum, bir tane belirtmem gerekiyor. dize adı, o zaman sorun yok.


Yer değiştirmek

if (symb==EUR) {valuta=EUR;}

üzerinde

if (symb=="EURUSD") {valuta="EUR";}

 
keekkenen :

net değil.. EA gösterge tarafından kaydedilen değeri kontrol ederse, EA'daki valuta parametresinin değerinin cihazın adına karşılık gelmesi gerektiğini varsaymak mantıklı olacaktır, yani. EURUSD veya GBPUSD..

buna göre, eğer EA mevcut enstrümanın değerini kontrol ederse, o zaman

dizi değeri = Sembol();

int i=GlobalVariableGet(valuta);


Evet, işe yarıyor)) Her şey göründüğünden daha basit)

Buraya gelen ve yardım eden herkese çok TEŞEKKÜRLER!

 

Arkadaşlar, bana nerede batırdığımı söyleyin ... Anlayamıyorum. Veriler göstergeden okunur, ancak daha sonra çalışmaz. bulamıyorum. Biri bana neyi anlamadığımı söyleyebilir mi:

 //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void    SaveDataIND( double &TempIND[], int nBars)
{
   ArrayResize (TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for ( int j= 0 ; j<=nBars- 1 ; j++)
      {
         TempIND[j]= iAD ( NULL , PERIOD_M5 ,j);         // Запишем данные инд. в цикле в массив
         Print ( "TempIND[" ,j, "] = " ,TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double    PeakUP[], PeakDN[];                     // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars- 1 ]<TempIND[ 1 ])                 // Если последний бар массива ниже первого - тенденция вверх
      {
         k= 0 ;                                       // Инициализируем индекс массива донышков
         for (i= 3 ; i<=nBars- 1 ; i++)                 // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i- 1 ] && 
                   TempIND[i- 1 ]<TempIND[i- 2 ])       // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i- 1 ];       // Заносим его значение в массив донышек 
                     k++;                           // Увеличиваем индекс массива донышков
                  }
            }
         asize= ArraySize (PeakDN);
         for (l= 0 ; l<=asize; l++)
            {
               Print ( "PeakDN[" ,l, "] = " ,PeakDN[l]);
            }
      }
   if (TempIND[nBars- 1 ]>TempIND[ 1 ])                 // Если последний бар массива выше первого - тенденция вниз
      {
         k= 0 ;                                       // Инициализируем индекс массива пичков
         for (i= 3 ; i<=nBars- 1 ; i++)                 // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i- 1 ] && 
                   TempIND[i- 1 ]>TempIND[i- 2 ])       // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i- 1 ];       // Заносим его значение в массив пичков 
                     k++;                           // Увеличиваем индекс массива пичков
                  }
            }
         asize= ArraySize (PeakUP);
         for (l= 0 ; l<=asize; l++)
            {
               Print ( "PeakUP[" ,l, "] = " ,PeakUP[l]);
            }
      }            
         

}   

Günlükte, her zaman gösterge değerleri dizisinin verilerini görüntüler, ancak sonra - dur ...
... sadece bir sıfır hücre... ve sadece sıfır... Lütfen yardım edin...


 
odiseif :
kusura bakmayın hata çıktı ..... işte orjinali

Odysseus, eğer orada değillerse, eklemeniz gerekir :))

Dosyalar:
 
artmedia70 :

Arkadaşlar, bana nerede batırdığımı söyleyin ... Anlayamıyorum. Veriler göstergeden okunur, ancak daha sonra çalışmaz. bulamıyorum. Biri bana neyi anlamadığımı söyleyebilir mi:

Günlükte, her zaman gösterge değerleri dizisinin verilerini görüntüler, ancak sonra - dur ...
... sadece bir sıfır hücre... ve sadece sıfır... Lütfen yardım edin...

Artyom, şimdiye kadar ilk hatayı buldum:

PeakUP[] ve PeakDN[] dizileri belirli sayıda eleman olmadan bildirilir, yani onları hiç hücresiz yarattınız ve sonra kodda onlara bir şeyler yazmaya çalışıyorsunuz, ancak eleman içermedikleri için, doğal olarak içlerinde hiçbir şey kaydedilmez ve baskı her zaman sıfırdır. Tam olarak kaç tepe ve vadi olacağını bilmediğiniz için bunu yapmanızı, yeni veriler geldiğinde bu dizilerdeki eleman sayısını dinamik olarak artırmanızı öneririm, düzeltilen alanlar kırmızı ile vurgulanır.

 if (TempIND[nBars- 1 ]<TempIND[ 1 ])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k= 0 ;                                      // Инициализируем индекс массива донышков
         for (i= 3 ; i<=nBars- 1 ; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i- 1 ] && 
                   TempIND[i- 1 ]<TempIND[i- 2 ])      // Нашли донышко
                  {
                     ArrayResize (PeakDN, k + 1 );
                     PeakDN[k]=TempIND[i- 1 ];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize= ArraySize (PeakDN);
         for (l= 0 ; l< asize; l++)
            {
               Print ( "PeakDN[" ,l, "] = " ,PeakDN[l]);
            }
      }
   if (TempIND[nBars- 1 ]>TempIND[ 1 ])                // Если последний бар массива выше первого - тенденция вниз
      {
         k= 0 ;                                      // Инициализируем индекс массива пичков
         for (i= 3 ; i<=nBars- 1 ; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i- 1 ] && 
                   TempIND[i- 1 ]>TempIND[i- 2 ])      // Нашли пичёк
                  {
                     ArrayResize (PeakUP, k + 1 );
                     PeakUP[k]=TempIND[i- 1 ];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize= ArraySize (PeakUP);
         for (l= 0 ; l< asize; l++)
            {
               Print ( "PeakUP[" ,l, "] = " ,PeakUP[l]);
            }
      }    

ArraySize() işlevi , dizi öğelerinin toplam sayısını döndürür, ancak dizin oluşturma sıfırdan başladığından, gerçek öğe sayısı ArraySize() - 1'dir.

 
Ve yine sorularla, ben buradayım) Soru şimdi aşağıdaki niteliktedir. (Daha önce yardımcı olan herkese teşekkürler), şimdi Uzman Danışmanım, verilerin hangi sembolden alındığını belirleyerek göstergelerden global değişkenlerden veri alıyor. Bu verilere dayanarak, Uzman Danışmanda - global değişkenin verilerini aldığım para biriminde bir sipariş açmayı belirtiyorum. Bir çizelgeye bir Expert Advisor, diğerlerine ise göstergeler ekliyorum,... veri alıyor, ancak yalnızca üzerinde durduğu para birimi (Uzman'ın kendisi) için bir emir açıyor... anladığım kadarıyla, bu olmalı bir multi-uzman,... nasıl yapılacağı veya en azından diğer çiftlerde emir açabilmesi için belirtilmesi gerektiği. Birkaç Uzman Danışman çalıştırmak istemiyorum ((
 
Infinity :
...diğer çiftlerde emir açabilmesi için nasıl yapılacağı veya en azından içinde ne belirtilmesi gerektiği. Birkaç Uzman Danışman çalıştırmak istemiyorum ((
OrderSend (Döviz çiftinin sembolik adı .... kuyu ve diğer parametreler ...)
 
ToLik_SRGV :

Artyom, şimdiye kadar ilk hatayı buldum:

PeakUP[] ve PeakDN[] dizileri belirli sayıda eleman olmadan bildirilir, yani onları hiç hücresiz yarattınız ve sonra kodda onlara bir şeyler yazmaya çalışıyorsunuz, ancak eleman içermedikleri için, doğal olarak içlerinde hiçbir şey kaydedilmez ve baskı her zaman sıfırdır. Tam olarak kaç tepe ve vadi olacağını bilmediğiniz için bunu yapmanızı, yeni veriler geldiğinde bu dizilerdeki eleman sayısını dinamik olarak artırmanızı öneririm, düzeltilen alanlar kırmızı ile vurgulanır.

ArraySize() işlevi, dizi öğelerinin toplam sayısını döndürür, ancak dizin oluşturma sıfırdan başladığından, gerçek öğe sayısı ArraySize() - 1'dir.

Anadolu! Bir anıt dikmeniz gerekiyor - anavatanınızda bir büstü! En ilginci TempIND dizisi için yaptım ama unuttuğum ve gecenin yarısını üzerlerine büyü yaparak geçirdiğim kişiler için... :))