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

 
khorosh :

Daha doğrusu şöyle olacak:



Bu şekilde daha da doğru olacak ve şimdi çalışıyor:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
Ve bu arada, yorum yazarken neden kodu kod olarak vurguluyorum ama aynı renk? Veya bu şekilde tahsis etmek gerekir. renge göre gerçek bir kod gibi görünmesini sağlamak için?
 
kolyango :

M1'i deniyorum ve bir sonraki çubuğun oluşumundan sonra mesaj görünmüyor. Peki ne işe yaramaz?


Ama işe yaramayacak - programı yanlış yazdınız. Ve hepsi, kendi kodunuzun nasıl çalışacağı hakkında hiçbir fikriniz olmadığı için. Anlayalım. Danışman kuruluş:

 int start(){ // Спец. функция start
   if (Fun_New_Bar()){ //проверка наличия нового бара
     Alert ( "Сформировался новый бар" ); // Вывод на экран
  }
   return ( 0 ); // Выход из start()
}

Yeni bir onay işareti gelir ve Fun_New_Bar() işlevi çağrılır. Ana programa dönerse, Uyarı açılır. Aksi takdirde EA bir iade ile işini bitirir ve yeni bir tick bekler. Yeni bir kene üzerinde her şey tekrar eder.

Kodun çalışmadığını mı söylüyorsun? Şimdi alt programda neler olduğuna bakalım.

 bool Fun_New_Bar(){ // Ф-ия обнаружения нового бара
   static datetime New_Time= 0 ; // Время текущего бара
   bool New_Bar= false ; // Нового бара нет
   if (New_Time!=Time[ 0 ]){ // Сравниваем время
    New_Time=Time[ 0 ]; // Теперь время такое
    New_Bar= true ; // Поймался новый бар
  }
}

Boole işlevi bildirildi. Bir prosedür değil, bir işlev olduğu için, çağrıldığı ana programa bir şey döndürmesi gerekir. İşlev boolean olduğundan, bir boole değeri döndürmesi gerekir. Ana programa en azından bir şey döndüren satırınız nerede? Yok! Bu, programın başlangıcında, işlevden hiçbir şey döndürülmediğinden, if (Fun_New_Bar ()) ifadesinin parantez içinde her zaman yanlış olacağı ve uyarının hiçbir zaman açılmayacağı anlamına gelir.

Daha ileri gidelim. Neden datetime New_Time= 0 ; tam olarak statik mi? Hangi nedenlerle? Bir değişken tanımladınız ve onu hemen sıfıra başlattınız. Bir sonraki tikte aynı şey olacak - değişken tekrar bildirilecek ve tekrar sıfıra sıfırlanacak. Aşağıya bakın if (New_Time!=Time[ 0 ]){ Bu satır, değişkenin değerini geçerli zamana eşitsizlik açısından kontrol eder. Evet, değişken sıfır ve şimdiki zaman sıfır değil. Koşul sağlanır, değişkene o anki zamanın değeri girilir, New_Bar parametresi true olur. İşte bu, fonksiyon ana programa hiçbir şey döndürmeden işini tamamladı. Bir sonraki tikte, yine New_Time, Time[ 0 ]'a eşit olmayacak, yine eşitsizlik kontrolü başarıyla gerçekleştirilecek ve yine sonraki iki işlem gerçekleştirilecek. Kısacası, if (New_Time!=Time[ 0 ]) koşulu test edildiğinde, parantez içindeki ifade her tikte doğru olacaktır. HER ZAMAN. Soru şu ki, eğer her zaman doğruysa, o zaman bu kontrole neden burada ihtiyaç duyuluyor? Sadece kaldırabilir misin? Bu değişkenlerin her ikisi de herhangi bir yerde kullanılmıyorsa neden New_Time=Time[ 0 ] ve New_Bar= true atansın. Bu iki görev ne işe yarıyor? Oynamak ister misin? Yoksa düşünemeyecek kadar tembel mi?

 

Başlatılan ikinci MT4 terminalinde çalışan bir Uzman Danışman için global bir değişken nasıl kullanılabilir hale getirilir?

 
DhP :

Başlatılan ikinci MT4 terminalinde çalışan bir Uzman Danışman için global bir değişken nasıl kullanılabilir hale getirilir?


API aracılığıyla veya bir metin belgesi aracılığıyla.
 
drknn :

API aracılığıyla veya bir metin belgesi aracılığıyla.

Nasıl?
 
DhP :

Nasıl?

API aracılığıyla nasıl olduğunu bilmiyorum - bunun mümkün olduğunu okudum. Bir metin belgesi aracılığıyla - MQL4 dışında bir dilde bir dll-ku yazmanız gerekir. Örneğin, Delphi'de, C++. Bir dll, terminalin dışında bulunan bir dosyaya erişebilmelidir. Uygulanması oldukça gerçekçidir. O zaman her şey şeffaftır - EA , global değişkenin yeni bir değerini bir metin belgesine girer ve başka bir EA onu oradan okur. DLL, her iki danışmana da bu metin belgesine erişim sağlar. Bu tür sorular zaten burada sorulmuştu. İnsanlar iki farklı terminalde danışmanların karşılıklı çalışmasının nasıl kurulacağını sordular...
 
kolyango :

Bu şekilde daha da doğru olacak ve şimdi çalışıyor:

Hayır, çalışmıyor - Uyarınız, yeni bir mumun ilk tıklamasında 1 kez değil, her tıklamada size mesajlar gönderir.
 
kolyango :



Bu şekilde daha da doğru olacak ve şimdi çalışıyor:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------


İşlev benim değil - İnternetten aldım ama kullanmadım. Şimdi dikkatlice baktım - orada bir operatör kaçırıldı.

Şu şekilde doğru olacaktır:

 int start() // Спец. функция start
{
 if (Fun_New_Bar()) //проверка наличия нового бара
   {
    Alert( "Сформировался новый бар" ); // Вывод на экран
   }
return ( 0 ); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{                   // .. нового бара
static datetime New_Time= 0 ; // Время текущего бара
bool New_Bar= false ; // Нового бара нет
if (New_Time!=Time[ 0 ]) // Сравниваем время
{
New_Time=Time[ 0 ]; // Теперь время такое
New_Bar= true ; // Поймался новый бар
}
return (New_Bar);
}
 
drknn :

API aracılığıyla nasıl olduğunu bilmiyorum - bunun mümkün olduğunu okudum. Bir metin belgesi aracılığıyla - MQL4 dışında bir dilde bir dll-ku yazmanız gerekir. Örneğin, Delphi'de, C++. Bir dll, terminalin dışında bulunan bir dosyaya erişebilmelidir. Uygulanması oldukça gerçekçidir. O zaman her şey şeffaftır - EA, global değişkenin yeni bir değerini bir metin belgesine girer ve başka bir EA onu oradan okur. DLL, her iki danışmana da bu metin belgesine erişim sağlar. Bu tür sorular zaten burada sorulmuştu. İnsanlar iki farklı terminalde danışmanların karşılıklı çalışmasının nasıl kurulacağını sordular...

Teşekkürler, bakacağım...
Neden: