Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1482

 
MrBrooklin #:

Merhaba Alexey, pos_total=PositionsTotal() değişkeni sadece global seviyede ayarlanmıştı. Şimdi onu fonksiyonun içine taşıdım ve sorunun bu olduğu ortaya çıktı. Her şey çalıştı. Sorun nedir? Şakayı hiç anlamıyorum!!!

Şimdi, deneme amacıyla pos_total'ı tekrar global seviyeye taşıdım ve tekrar çalışmayı durdurdu, ancak fonksiyonun içine koyduğumda olması gerektiği gibi çalışıyor! Sadece bazı mucizeler, en azından benim için!!!! )))

Global seviyedeki bir değişkenin bir fonksiyon tarafından başlatılamayacağı ortaya çıkıyor? Bu doğru mu?

Saygılarımla, Vladimir.

Bazen yapabilirsiniz, ancak her değişkeni değil. Bu durumda, EA'yı çalıştırdığınızda, henüz açık pozisyonları görmez ve değişken sıfıra eşittir....

Aslında, dün pozisyon örnekleme ile deney yaptım ve PositionsTotal () 'ın sadece pozisyon sayısını belirlemek için gerekli olduğu sonucuna vardım. Ve bu sayı sadece döngüyü sınırlamak için gereklidir.

İşte böyle bir döngü

  int i = 0;
  while(bool(posTicket = PositionGetTicket(i)) && !IsStopped())
   {
    string posSymbol = PositionGetString(POSITION_SYMBOL);
    double posPrice = PositionGetDouble(POSITION_PRICE_OPEN),
           pos_tp = PositionGetDouble(POSITION_TP),
           pos_sl = PositionGetDouble(POSITION_SL);
    printf("%s Ticket %d цена = %g тейк-профит = %g стоп-лосс = %g", posSymbol, posTicket, posPrice, pos_tp, pos_sl);
    i++;
   }


ondan önceki geçmişten bir sipariş veya anlaşma listesi alsanız bile çalışır. Bugünlerde bekleyen emirlerin seçiminin buna engel olup olmayacağını kontrol edeceğim.


Ve sizin durumunuzda döngü olmadan yazmak daha kolay

      PositionGetTicket(PositionsTotal()-1); // получим тикет позиции

eğer son pozisyona ihtiyacınız varsa...

 
Alexey Viktorov #:
Bu durumda, EA'yı başlattığınızda, henüz açık pozisyonları görmez ve değişken sıfıra eşittir ...

Size katılıyorum, ancak sorun şu - pos_total değişkenini global seviyeye koyduğumda, EA tüm test süresi boyunca açık pozisyonları görmedi, ancak bu süre zarfında 50'den fazla pozisyon açıldı. Anlamıyorum! Görünüşe göre bu seçenek çalışmıyor mu?

Saygılarımla, Vladimir.

 
Alexey Viktorov #:

Sizin durumunuzda döngü olmadan yazmak daha kolaydır

eğer son pozisyona ihtiyacınız varsa...

Katılıyorum, eğer farklı bir sembolde ve farklı yönlerde açık birkaç pozisyonum olmasaydı. Yani al ve sat. Ama yine de ipucu için teşekkürler!

Saygılarımla, Vladimir.

 
MrBrooklin #:

Farklı bir sembolde ve farklı yönlerde açık birden fazla pozisyon olmasaydı, katılıyorum. Yani al ve sat. Ama yine de ipucu için teşekkürler!

Saygılarımla, Vladimir.

Kaç pozisyonun açık olduğu ve bunların kuzeye ya da kuzeye ya da sikişe ya da aynı anda tüm yönlere gidip gitmediği fark etmez... Sonuncusu PositionsTotal()-1 olacaktır.

 
Alexey Viktorov #:

Kaç pozisyonun açık olduğu ve bunların kuzeye doğru mu, kuzeye doğru mu yoksa aynı anda tüm yönlere doğru mu açık olduğu fark etmez... Sonuncusu PositionsTotal()-1 olacaktır.

Merhaba Alexei, biraz kafam karışmıştı. Her zamanki gibi haklısın!!! )))

Saygılarımla, Vladimir.

 
Alexey Viktorov #:

Aslında, dün pozisyon örnekleme ile denemeler yaptım ve PositionsTotal() fonksiyonunun sadece pozisyon sayısını belirlemek için gerekli olduğu sonucuna vardım. Ve bu sayı sadece döngüyü sınırlamak için gereklidir.

İşte böyle bir döngü


ondan önceki geçmişten bir sipariş veya anlaşma listesi alsanız bile çalışır. Ertesi gün bekleyen emirlerin seçiminin karışıp karışmayacağını kontrol edeceğim.

Burada da bir incelik vardır.

Liste gerçekten büyükse ve bazı kriterlere göre sıralanmışsa, gerekli elemanı döngüdeki tüm elemanları arayarak değil, yarıya bölerek aramak daha karlı olabilir ve burada listedeki toplam eleman sayısının bilinmesi çok yararlı olabilir.

 
JRandomTrader #:

Burada da bir incelik var.

Liste gerçekten büyükse ve bazı kriterlere göre sıralanmışsa, gerekli elemanı tüm elemanlar arasında döngü yaparak değil, yarıya bölerek aramak daha karlı olabilir ve burada listedeki toplam eleman sayısının bilinmesi çok yararlı olabilir.

İşlevin tamamen yararsız olduğunu söylemedim. Ancak bazı durumlarda onsuz da yapabilirsiniz ve yapmalısınız. Sonuçta, her işlev zaman demektir. Fren yapana kadar her seferinde biraz yazabilirsiniz....

 
MrBrooklin #:

Merhaba, Alexei! Aptallık ettim. Her zamanki gibi haklısın!!! )))

Saygılarımla, Vladimir.

Haklıyım, ancak yazdığınız gibi işlevin farklı sembollerde birkaç işlem açılırsa doğru çalışmayacağını belirtmedim.

Yalnızca sonuncuyu kontrol ettiğiniz için ve o (sonuncusu) başka bir sembolde açılabilir.

 
Aleksandr Slavskii #:

Doğru, ancak yazdığınız gibi işlevin farklı sembollerde birkaç işlem açılırsa düzgün çalışmayacağını belirtmedim.

Sadece sonuncusunu kontrol ettiğiniz için ve o (sonuncusu) başka bir sembol üzerinde açılabilir.

Merhaba Alexander, bu konuyu zaten düşünmüştüm, ancak soruyu henüz burada sormaya başlamadım, çünkü kodda farklı sembol konumlarının olacağı yere ulaşamadım. İpucu için teşekkürler! )) Şimdi bir noktada tıkandım, ancak kendi çabalarımla "bitirmek" için amansız bir istek duyduğumdan, bunu herkesin incelemesi için buraya getirmek istemiyorum.

Bu arada, tüm sözde "tökezlemelerimin" göremediğim küçük şeylerde yattığını fark ettim. Artem Trishkin'in bana bahsettiği belirteci ele alalım. Bu çok küçük bir şey ve ben burada betiğin neden çalışmadığı konusunda kafamı kırdım. Ya da aynı bağlantı &. Çok fazla zaman kaybettim. Genel olarak, hala öğrenmek, öğrenmek ve öğrenmek ve Rusça'da - okumak, okumak ve Belgeleri okumak.

Saygılarımla, Vladimir.

 
İyi günler!


Bir netleştirme hesabım var.

Uzman Danışmanımda yapılan anlaşmaları kontrol etmek için kodu kullanıyorum:

HistorySelect(0,TimeCurrent());
ulong ticket = OrderGetTicket(0);
N_deals = HistoryDealsTotal();

Ancak kapanan işlemlerin sayısını da tahmin etmem gerekiyor.
Sanırım DEAL_ENTRY_OUT değiştiricisini kullanmam gerekiyor.
Ama nasıl kullanacağımı anlayamıyorum.

Lütfen bana yardım edin.

Saygılarımla, Alexander