MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1145

 
Artyom Trishkin :

Sana zaten cevap verdim:

Listedeki son siparişi alırsınız:

Ve önce devletin siparişler listesinde ne kadar değiştiğini bulmanız gerekiyor. 12 oldu, 8 oldu - 4 siparişe dönüştü. Buna göre, dört siparişi de yazdırmanız gerekir. Ve her zaman listedeki yalnızca sonuncuyu yazdırırsınız.

Ne kadar değiştiğini nereden biliyorsun? Danışmanı başlatırken bir değişkene emir sayısını yazmak gerekir, örneğin int last_total. Ardından, her onayda OrdersTotal() ile last_total'ı karşılaştırın. Eşit DEĞİLSE, bir değişiklik meydana gelmiştir. OrdersTotal() ve last_total arasındaki farkı num_changes gibi bir değişkene yazın ve OrdersTotal() öğesinin yeni durumunu last_total içinde saklayın.
Burada, örneğin bekleyen siparişler tetiklendiğinde nüanslar olabilir. Ama şimdilik, başlamak için gerekeni yapacaksın.
Eksik siparişlerin sayısını bilerek, bunları geçmişte görebilirsiniz. Ancak, kendinizi yalnızca geçmiş listedeki siparişleri kontrol etmekle sınırlayabilirsiniz - yukarıda açıklanan her şeyi piyasa listesi için değil, geçmiş siparişler listesi için yapın. Olan ve ne olduğu arasındaki fark, analiz edilmesi gereken siparişlerin sayısıdır. Her zaman listedeki yalnızca sonuncuyu analiz edersiniz.

Aynı zamanda, hiç kimse tarihsel listedeki son siparişin kapatılan son sipariş olacağını garanti etmez. Bunlar ayrıca dikkate alınması gereken nüanslardır. Ama sonra.

Çok teşekkürler. Çok daha net. Anahtar Sözcükler - aynı anda bir değil 4 sipariş yazdırmanız gerekir . Bunları bana ilk mesajda söyleseydin, sana "eziyet" vermezdim.

 
ANDREY :

Çok teşekkürler. Çok daha net. Anahtar Sözcükler - aynı anda bir değil 4 sipariş yazdırmanız gerekir . Bunları bana ilk yazıda söyleseydin, sana "eziyet" vermezdim.

Benim için zevkti. Bu veya bu eylemin mantığını kendiniz için nasıl çizeceğinizi öğrenene kadar, asla yerden kalkmayacaksınız - forumda soracaksınız. Ve mantığı oluşturmak hiçbir yerde daha kolay değildir - basit kelimelerle derlenmiştir. Bu durumda siparişlere/listelere/biletlere vs. bağlı kalmanıza gerek yoktur.

Elmalarda sayılarını takip etmek için kolayca bir algoritma yapabileceğinizi düşünüyorum - her şey hayattaki gibidir: masada kaç elma olduğunu hatırlayın, sigara içmeye gidin, gelin - daha az elma var ...
Bunu nasıl bildin? Kolay - 5'ti, şimdi 3'tü. İki kişi gitti. Kedi muhtemelen... Ya da 5'ti, 6 oldu. Biri çıktı. Nemden, muhtemelen... Her durumda, farkı zihninizde hesapladınız.

Peki aynı eylemler sayım emirlerinden nasıl farklıdır? Aynı elmalar ... "Akılda" yerine "fonksiyonda" yazın

 

200'den fazla kod satırı olduğu ortaya çıktıysa ve tüm bunları çevirmek elverişsizse, lütfen işlevi koddan nasıl çıkaracağımı ( ayrışma ) söyleyin. "Mekanik" ile ilgileniyor: işlevin nasıl "gerçekleştirildiği", nerede yazıldığı, böylece daha sonra ana kodda çağrılabilmesi.

Açıklamalı bir örnek varsa - bağlantı için minnettar olacağım
 
Alexey Kolybelnikov :

200 satırdan fazla kod olduğu ortaya çıktıysa ve tüm bunları çevirmek elverişsizse, lütfen işlevi koddan nasıl çıkaracağımı ( ayrışma ) söyleyin. "Mekanik" ile ilgileniyor: işlevin nasıl "gerçekleştirildiği", nerede yazıldığı, böylece daha sonra ana kodda çağrılabilmesi.

Açıklamalı bir örnek varsa - bağlantı için minnettar olacağım

Öyleydi:

 double a = (b + c) / (d - e);


Dönüştü:

 double a = Add(b,c) / Sub(d,e);

//---------

Add( const double v1, const double v2) { return v1 + v2; }

Sub( const double v1, const double v2) { return v1 - v2; }
 
Artyom Trishkin :

Benim için zevkti. Bu veya bu eylemin mantığını kendiniz için nasıl çizeceğinizi öğrenene kadar, asla yerden kalkmayacaksınız - forumda soracaksınız. Ve mantığı oluşturmak hiçbir yerde daha kolay değildir - basit kelimelerle derlenmiştir. Bu durumda siparişlere/listelere/biletlere vs. bağlı kalmanıza gerek yoktur.

Elmalarda sayılarını takip etmek için kolayca bir algoritma yapabileceğinizi düşünüyorum - her şey hayattaki gibidir: masada kaç elma olduğunu hatırlayın, sigara içmeye gidin, gelin - daha az elma var ...
Bunu nasıl bildin? Kolay - 5'ti, şimdi 3'tü. İki kişi gitti. Kedi muhtemelen... Ya da 5'ti, 6 oldu. Biri çıktı. Nemden, muhtemelen... Her durumda, farkı zihninizde hesapladınız.

Peki aynı eylemler sayım emirlerinden nasıl farklıdır? Aynı elmalar ... "Akılda" yerine "fonksiyonda" yazın

Anladım.Açıklama için teşekkürler. Bu soru uzun zamandır kafamda dönüyor... Kodumda , Print() fonksiyonunun genellikle logda yazdırılacağı varsayılıyor. Otomatik olarak, her bir açık sipariş ve her bir siparişin her kapanışı yevmiye defterine yazdırılır. Birçok siparişim var. Buna göre, birçok sipariş kaydı olacaktır. Bu kayıtlar, çoğu zaman, aynı zamanda çok sayıda olabilen Print () işlevlerinden veri kabul etmemi engelliyor.

SORU

İhtiyacım olduğunda açık ve kapalı siparişler hakkındaki bilgilerin günlükte görüntülenmemesi, ancak yalnızca Print() işlevinin görüntülenmesi için nasıl yapılır?

Bu, MQL4 dilinin bazı işlevleri kullanılarak yapılabilir mi, yoksa bunun için MT4 terminal kodunda değişiklik yapmam gerekir mi?

Teşekkür ederim.
 
ANDREY :

Anladım.Açıklama için teşekkürler. Bu soru uzun zamandır kafamda dönüyor... Kodumda , Print() fonksiyonunun genellikle logda yazdırılacağı varsayılıyor. Otomatik olarak, her bir açık sipariş ve her bir siparişin her kapanışı yevmiye defterine yazdırılır. Birçok siparişim var. Buna göre, birçok sipariş kaydı olacaktır. Bu kayıtlar, çoğu zaman, aynı zamanda çok sayıda olabilen Print () işlevlerinden veri kabul etmemi engelliyor.

SORU

İhtiyacım olduğunda açık ve kapalı siparişler hakkındaki bilgilerin günlükte görüntülenmemesi, ancak yalnızca Print() işlevinin görüntülenmesi için nasıl yapılır?

Bu, MQL4 dilinin bazı işlevleri kullanılarak yapılabilir mi, yoksa bunun için MT4 terminal kodunda değişiklik yapmam gerekir mi?

Teşekkür ederim.

Araştırma yapıyorsanız, bir dosyaya yazmak daha iyidir. Günlükteki siparişlerle eylemlerin görüntülenmesini nasıl devre dışı bırakacağımı bilmiyorum ve bunun olmadığını düşünüyorum, bu, danışmanın çalışmasının başlangıcı ve bitişinin kayıt seviyesidir. Bunlar günlük dosyası girişleridir. Dosya sadece istediğinizi içerecektir, girişlerinize ek olarak logda terminal girişleri olacaktır. Terminalde değişiklik yapabilirsin, hatta kendin bile yazabilirsin))) ama ne kadara mal olacak???

 
Alexey Kolybelnikov :

200 satırdan fazla kod olduğu ortaya çıktıysa ve tüm bunları çevirmek elverişsizse, lütfen işlevi koddan nasıl çıkaracağımı ( ayrışma ) söyleyin. "Mekanik" ile ilgileniyor: işlevin nasıl "gerçekleştirildiği", nerede yazıldığı, böylece daha sonra ana kodda çağrılabilmesi.

Açıklamalı bir örnek varsa - bağlantı için minnettar olacağım

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

ve ardından bağlantıları izleyin... genel olarak: *.mqh kitaplığına yapılan tüm "ekstralar", onu ana kodun başına ekleyin. derleyici "yapıştırır"

ancak genel olarak 200 satır çok fazla değil - düğmeleri kullanmak binden fazla satırda bile kendinizi rahat hissedebilirsiniz.

 
Valeriy Yastremskiy :

Araştırma yapıyorsanız , bir . Günlükteki siparişlerle eylemlerin görüntülenmesini nasıl devre dışı bırakacağımı bilmiyorum ve bunun olmadığını düşünüyorum, bu, danışmanın çalışmasının başlangıcı ve bitişinin kayıt seviyesidir. Bunlar günlük dosyası girişleridir. Dosya sadece istediğinizi içerecektir, girişlerinize ek olarak logda terminal girişleri olacaktır. Terminalde değişiklik yapabilirsin, hatta kendin bile yazabilirsin))) ama ne kadara mal olacak???

Bahşiş için teşekkürler. Ama bana öyle geliyor ki, hiçbir zaman bir dosyaya danışman yazmadım. MetaEditor 4 editöründe her zaman bir Expert Advisor yazdım.Yazdır() fonksiyonunun tüm test süresi boyunca ne verdiğini görmek için Log - Open sekmesini seçiyorum. Ve not defterinde, Günlük sekmesindekiyle aynı içeriğe sahip bir dosya açılır. Sanırım bu bir günlük dosyası.
Ama bana öyle geliyor ki, tüm açık emirleri ve onların kapanışlarını bu not defteri dosyasından kaldırmanın hiçbir yolu yok. Daha doğrusu var. Ama bu çok sıkıcı ve zahmetli bir iş.
Sipariş kodumu nasıl açıp kapatacağımın sırrını söylerseniz çok minnettar kalırım ama dosyada tüm siparişlerin açılıp kapanması ile ilgili bir bilgi yoktu, sadece Print() fonksiyonunun kayıtları vardı.
Yardım için teşekkürler.

 
ANDREY :


En son MQL4 güncellemeleri hakkında daha fazla bilgiyi nerede bulabileceğinizi biliyor musunuz?Aksi takdirde, her yerde çok fazla bilgi vardır ve doğru olanı bulmak çok zordur.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY :

Bahşiş için teşekkürler. Ama bana öyle geliyor ki, hiçbir zaman bir dosyaya danışman yazmadım. MetaEditor 4 editöründe her zaman bir Expert Advisor yazdım.Yazdır() fonksiyonunun tüm test süresi boyunca ne verdiğini görmek için Log - Open sekmesini seçiyorum. Ve not defterinde, Günlük sekmesindekiyle aynı içeriğe sahip bir dosya açılır. Sanırım bu bir günlük dosyası.
Ama bana öyle geliyor ki, tüm açık emirleri ve onların kapanışlarını bu not defteri dosyasından kaldırmanın hiçbir yolu yok. Daha doğrusu var. Ama bu çok sıkıcı ve zahmetli bir iş.
Sipariş kodumu nasıl açıp kapatacağımın sırrını söylerseniz çok minnettar olurum ama dosyada tüm siparişlerin açılıp kapanmasıyla ilgili bir bilgi yoktu, sadece Print() fonksiyonunun kayıtları vardı.
Yardım için teşekkürler.

 int OnInit ()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1 / Point ; // чтобы не делить на пойнт
   tx= TimeCurrent (); // задание времени начала работы советника
//--- create timer
   EventSetTimer ( 60 );

//---
   return ( INIT_SUCCEEDED );
  }

void OnDeinit ( const int reason)
  {

   FileClose ( Handle );                 // Закрываем файл
   Alert ( "Файл " ,File_Name, " закрыт." ); // Сообщение
     
//--- destroy timer
   EventKillTimer ();

  }

void OnTick ()     // Функция start() раньше называлась
  {
.................
 Qnt_Symb= FileWrite (Handle, Symbol (), " ТФ " , Period (), "Открыт ордер Buy по цене " ,Ask,
             "Ticket = " ,Ticket, " ProfB=" ,ProfB, " MxProfB=" ,MxProfB, " ProfS=" ,ProfS, " MxProfS=" ,MxProfS); //Запись в файл
             if (Qnt_Symb<= 0 ) // Если не получилось
              {
               Alert ( "Ошибка записи в файл " , GetLastError ()); // Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle= FileOpen (File_Name, FILE_CSV | FILE_WRITE , ";" ); //Открытие файла
   if (Handle==- 1 ) // Неудача при открытии файла
     {
       Alert ( "Ошибка при открытии файла. " , // Сообщение об ошибке
             "Возможно, файл занят другим приложением" );

     }

   return (Handle);
  }
//+------------------------------------------------------------------+

Bunu yapıyorum, test cihazında dosya \tester\files klasöründe olacak, pencereye atarsanız \MQL4\Files klasöründe olacak. Ve Kovalev'de ayrıntılı olarak var.

Neden: