uzman danışman - çeşitli sorular - sayfa 30

 
honest_knave :

Üstün bir inceleme, çalışması gerektiğini gösteriyor. Ancak verimliliği artırabilirsiniz.

Grafiğinize kaç farklı nesne çizdiğinizi düşünün. Bu nesnelerden *herhangi birine* tıklarsanız, her bir siparişte dolaşacak ve bir eşleşme bulmaya çalışacaksınız. Birçok nesnenin muhtemelen siparişlerle hiçbir ilgisi yoktur. Bu verimsiz.

Bu yüzden "#" için ilk sparam karakterini kontrol etmeyi önerdim. Bu, nesneyi otomatik olarak bir siparişle ilgili olarak tanımlar.

Ayrıca, siparişler arasında dolaşmaya gerek yoktur. Nesne adı ve/veya nesne metni bilet numarasını zaten içeriyor. Bu yüzden oradan bilet numarasını çıkarın ve siparişi kapatın

Misal:

Bir sipariş açarsın. 12345 numaralı bilet verilir.

" #12345 " adında bir OBJ_BUTTON oluşturun

OnChartEvent() içindeki kod şuna benzer (derlenmemiş, denenmemiş, gece geç saatlerde...):

if (id== CHARTEVENT_OBJECT_CLICK && StringSubstr (sparam, 0 , 1 )== "#" ) // this is an order button
  {
   int ticket=( int ) StringSubstr (sparam, 1 ); // extract the ticket number
   if ( OrderSelect (ticket, SELECT_BY_TICKET )) // select the order
     {
       if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 3 ,CLR_NONE)) // close the order
        {
         Print ( "# Error " , GetLastError ());
        }
     }
  }
(arıza durumunda muhtemelen OrderSelect'i de kullanmak isteyeceksiniz)

Vay! Bunu bilmiyordum.

Yani, iki kez bahsettiniz ve bunu tam olarak anlamadım.
Şimdi kendim test edeceğim ve ana EA dosyama getireceğim.

Çok daha fazla teşekkürler.

 

Diğer nesneler için OrderTicket() kullanıyorum, şimdi o nesnelere tıkladığımda görüyorum - sipariş kapat.
Yöntemini beğendim ama görünüşe göre diğer nesneleri etkiliyor.

Buradaki gibi diğer nesneler de onlardan biri.

"#" + IntegerToString ( OrderTicket ())+ " -" + "Object HLine"

Şimdiden teşekkürler.

 
Max Enrik :

Diğer nesneler için OrderTicket() kullanıyorum, şimdi o nesnelere tıkladığımda görüyorum - sipariş kapat.
Yöntemini beğendim ama görünüşe göre diğer nesneleri etkiliyor.

Buradaki gibi diğer nesneler de onlardan biri.

"#" + IntegerToString ( OrderTicket ())+ " -" + "Object HLine"

Şimdiden teşekkürler.

Daha zarif çözüm, adlandırma sisteminizi değiştirmektir

Bununla birlikte, yine de sipariş numarasını çıkarabilirsiniz. Bu sadece tam adlandırma biçimine bağlıdır.

Ama tüm bunlardan önce, düğmenin OBJPROP_TEXT'i nedir? Aynı OBJPROP_TEXT'e sahip başka nesneler var mı?

 
honest_knave :

Daha zarif çözüm, adlandırma sisteminizi değiştirmektir
Bununla birlikte, yine de sipariş numarasını çıkarabilirsiniz. Bu sadece tam adlandırma biçimine bağlıdır.
Ama tüm bunlardan önce, düğmenin OBJPROP_TEXT'i nedir? Aynı OBJPROP_TEXT'e sahip başka nesneler var mı?

Evet! Düğme adlarını değiştirirsem, Button nesne adlarının adlarını değiştirebileceğimi biliyorum (ayrıca Prefix kullanıyorum), o zaman birçok şeyi değiştirebilirim, örneğin sistemi sil ve hepsi birbirine bağlı olan diğer şeyler.

Aşağıda Buton ve Hline isimleri bulunmaktadır.

"#" + IntegerToString ( OrderTicket ())+ " -" + "Object HLine"
"#" + IntegerToString ( OrderTicket ())+ " -" + "Object Button"

(tabii ki nesne isimleri biraz daha farklı ama yöntem aynı)

Şimdiden teşekkürler.

 

Piyasa Kapalı

Belki buldum ama emin değilim.
Bu iyi değilse, lütfen bana bildirin.

if (id== CHARTEVENT_OBJECT_CLICK && StringFind (sparam, "close order button" , 0 )>= 0 )

Şimdiden teşekkürler.

//--- 2. kez düzenlendi

Hey! Adam!

Çok teşekkürler. Şimdiye kadar sorun yok. Doğru çalışıyor!

 

#Crossover Nesneleri - Aç

Bu sorunla birkaç kez karşılaştım, bazen geçtim bazen vazgeçtim, şimdi bir kez daha pes etmek istemiyorum.
2 nesnem var " HLine ve Button " kesişiyorlar, yani birine tıkladığımda ikisi de seçili bu benim için iyi bir şey değil. ( BUTON Genişliği = 20, HLINE Genişliği = bildiğiniz gibi )

S: BUTTON nesnesine tıkladığımda geçiş yaparken HLINE nesnesi seçilmiyor nasıl yapabilirim, lütfen?
(Çapraz olmadıkları yerde kolayca HLINE'ı seçebilirim)

Şimdiden teşekkürler.

(Üzerinde çalışıyorum, herhangi bir iyi yorum daha iyi olur, lütfen.)

 

#Pipte Kâr - Açık | #Pipte Kâr - Şimdilik kapalı - Ben çözdüm

Bay William - "Pip, Point..." hesaplama kodlarınızı kullanıyorum.
Şimdi aşağıdaki kodlarla Profit in pip değerini almaya çalışıyorum. 2 siparişim var, biri doğru gösteriyor ( OP_BUY ), 2'si doğru görünmüyor - 399 - gerçek 400 ( OP_SELL ).

S: Pip hesaplamasında kâr için yanlış mı yapıyorum, lütfen?

change_to_pips( OrderTakeProfit () - OrderOpenPrice () )

Şimdiden teşekkürler.

(geçen gün farklı web sitelerindeki forumlara baktım - bu benim için faydalı olmadı)

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 4 Build 574, Güncellenmiş MQL4 Dili ve Yayınlanan Uygulama Pazarı ile

whroeder1 , 2014.01.27 14:11

  1. Böyle okunmaz, anlaşılmaz kodlar yazmayın.
    if (MyOrdersTotal() == 0 && ( Hour ()​>=​StartHour ​&& Hour ()​<​EndHour && StartHour​<​EndHour) || ( Hour ()​>=​StartHour || Hour ()​<​EndHour && StartHour​>​EndHour))
    Okunabilir hale getirin ve basitleştirin ve ve/veya karıştırırken her zaman parantez içine alın.
     bool     isHourOKnorm = StartHour < EndHour
                         && StartHour <= Hour () && Hour () < EndHour,
            isHourOKwrap = StartHour > EndHour
                         && (StartHour <= Hour () || Hour () < EndHour),
         isHourOK       = isHourOKnorm || isHourOKwrap;
    if (MyOrdersTotal() == 0 && isHourOK)
  2. Peki ya StartHour == EndHour (yani 24'ün tamamı?) Benim kodumu görün ve 24 saatlik sarmadan kaçının.

Bay William'dan karmaşık bir koşulun şaşırtıcı " if " operatörü örneğinden biri.
Sadece teşekkürler!


" if " operatörü karmaşık durumumu düzeltmek için en son 2 gün uğraştım, ancak yukarıdaki harika örneği bulana kadar sorunumu çözemiyorum.

 

Lütfen biri bana yardım etsin, bu sorunu çözmek için gerçekten mücadele ediyorum.

#296

Şimdiden teşekkürler.

 

Aşağıdaki kod bazen mükemmel çalışıyor, bazen çalışmıyor. Bu sorunu çözemiyorum. Tekli sipariş kullandığımda mükemmel çalışıyor ancak birden fazla sipariş açtığımda bu işlev düzgün çalışmıyor.
Lütfen bana yardım edin ve biraz daha açıklar (aşağıdaki kodda neyin yanlış olduğunu) bu benim için daha iyi olurdu.

(Şimdi üzerinde çalışıyorum.)

if (id== CHARTEVENT_OBJECT_CLICK && ( StringFind (sparam,Button_1, 0 )>= 0 || StringFind (sparam,Button_2, 0 )>= 0 ))
  {
   ticketnumber=( int ) StringSubstr (sparam, 1 );

   if ( OrderSelect (ticketnumber, SELECT_BY_TICKET ))
     {
       if ( StringFind (sparam,Button_1, 0 )>= 0 )
        {
         // ...
        }

       if ( StringFind (sparam,Button_2, 0 )>= 0 )
        {
         //...
        }

       for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
         if ( Symbol ()!= OrderSymbol ()) continue ;

         update_1();
         update_2();
         update_3();
        }
     }
  }

Şimdiden teşekkürler.