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

 

Bunu öneririm.

Tüm bu sorunları çözdüğünüzde kendinizi profesyoneller arasında sayabilirsiniz.

İşleri olabildiğince zorlaştırın, o zaman en çok öğreneceksiniz.

Aksi takdirde, her zaman basit şeylerle uğraşmaya devam edersiniz.

 

Öncelikle yorumlarınız için gerçekten teşekkürler.

Yorumlarınızdan sonra kesin ve test için bir kez daha Sipariş Değiştirme kod blokları oluşturmam gerektiğine karar verdim.

 

Bay @Marco vd Heijden

En güzel yorumlarınızdan/örneklerinizden sonra - Kâr Al Fiyatları için zaten sürüklemeler için bir kod yazıyorum.
Ama aslında sürekli güncellemelere karşıyım. Niye ya? Take Profit sürüklemeleri için kod blokları yazdığımdan, grafiğimin yavaşladığını görüyorum. Belki de kodun bu bölümünde hatalar yaptım. Bu sorunu çözdükten sonra kontrol edeceğim.

(sorunu kendi başıma çözmeye çalışırken, birkaç kez denedikten sonra, "for" döngü operatörünü kullanırsam hesaplamayı durdurma şansım olmadığını düşündüm)

        Aşağıdaki koddan " Switch " operatörünü kaldırmama neden olan Kar Al ve Zarar Durdur boyutları için zaten hesaplamam olduğunu belirtmek isterim.
Kar Al fiyatının " Satır " Fiyatına eşit olacağı zamanı deniyorum - sonra bir dahaki sefere Kar Al fiyatı " ! = " Satır fiyatına kadar hesaplamaları / güncellemeleri durdurun.
S:
Endişem için aşağıdaki kodu düzeltmekte zorlanıyorum. Peki bunun için ne yapabilirim lütfen?
S: Bu sorunum için "Switch" operatörünü kullanmıyorum.

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   for ( int order= OrdersTotal (); order>= 0 ; order--)
     {
       bool selected= OrderSelect (order, SELECT_BY_POS );
        {
         if (selected== 1 )
           {
             if ( Symbol ()== OrderSymbol ()) // only for current chart symbol
              {
               /* I just try for - if price not equal != "Line OBJPROP_PRICE "
                  stop updates */


               // if objects not found - create them
               // ...
               // if objects exist
               // ...
               while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ))
                 {
                   PlaySound ( "ok.wav" );
                  price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
                   Comment (price);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

OrderModify() için belgeler ve kitap okurken örnekle tam olarak endişem için örnek görmedim.

Senin için her şeyin en iyisini dilerim!

 

Konuyu güncel tutamadım, bu yüzden ne yaptığınızı kaçırmış olabilirim.

Her şeyden önce, basitleştirin:

for ( int order= OrdersTotal (); order>= 0 ; order--)
     {
       bool selected= OrderSelect (order, SELECT_BY_POS );
        {
         if (selected== 1 )
Olmalıdır:
for ( int order= OrdersTotal ()- 1 ; order>= 0 ; order--)
     {
       if ( OrderSelect (order, SELECT_BY_POS )

Ayrıca, çizgiyi ne sıklıkta hareket ettirdiğinizi düşünün. Saniyede bir mi? Muhtemelen değil.

Kodunuzu OnChartEvent() içine koyun:

void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   if (id== CHARTEVENT_OBJECT_DRAG && sparam== "line" ) // the chart event of dragging the line

Sahip olduğunuz her açık siparişte aynı işlevi birden çok kez çağırıyorsunuz:

while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ) )
  {
   PlaySound ( "ok.wav" );
   price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ) ;
   Comment (price);
  }

Sipariş döngüsüne girmeden önce bir kez arayın:

double lineprice= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
for ( int order= OrdersTotal ()-1; order>= 0 ; order--)
  {  
 

while döngülerinin ilkesini anladığınızdan emin olun.

Bu tehlikelidir çünkü herhangi bir nedenle başka bir EA satır fiyat değerini değiştirmeye çalışırsa, bunun sonucunda bu kod parçası sonsuz bir döngüde takılıp kalacak ve terminaliniz büyük olasılıkla donacaktır.

Bu genellikle Anormal sonlandırma ile sonuçlanır.

"line" nesnesini kullandığınız için tehlike, OrderModify() tarafından sunucuya gönderilen tp ve sl seviyeleri hakkında konuştuğunuz zamanki kadar büyük değildir, bu nedenle "line" müdahale eden başka bir EA yazmayı planlamıyorsanız. sorun olmamalı.

 
honest_knave :

Konuyu güncel tutamadım, bu yüzden ne yaptığınızı kaçırmış olabilirim.


Sipariş döngüsüne girmeden önce bir kez arayın:

double lineprice= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
for ( int order= OrdersTotal (); order>= 0 ; order--)
  {  

Lütfen ne yapmaya çalıştığını anlayın.

Hattın taşınıp taşınmadığını görmek için iki kez aramalı ve değerleri karşılaştırmalıdır.

Değeri iki kez okumadan bunu yapmak imkansızdır.

while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 )) // if price differs from "line" value do:
  {
   PlaySound ( "ok.wav" );
   price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ); // now overwrite old line value with new line value.
   Comment (price);
  }
 
Marco vd Heijden :

Lütfen ne yapmaya çalıştığını anlayın.

Hattın taşınıp taşınmadığını görmek için iki kez aramalı ve değerleri karşılaştırmalıdır.

Değeri iki kez okumadan bunu yapmak imkansızdır.

Bunu bana tekrar açıklaman gerekecek.

Bir CHARTEVENT_OBJECT_DRAG'ınız varsa ve sparam "line" ise, o zaman satır taşınmıştır.

Nadir durumlarda, aynı fiyat boyunca zaman yönünde hareket eder, ceza fazla değildir.

 

Aynı şeyi yapmanın birçok yolu vardır.

CHARTEVENT'i kullanmaya karar verirseniz, test cihazında çalışmadığını unutmayın.

 
Tamam, size bırakıyorum çocuklar. İyi şanlar.
 

Faydalı yorumlarınızı zaten okudum, Bay Marco, Bay Knave, Bay William, tüm bu yorumlar için çok teşekkürler!

Şimdi zaten birkaç şeyi kontrol ettim ve ayrıca adım adım OrderModify() yazabileceğime ( / ve kontrol edebileceğime) karar verdim. Çünkü bu OrderModify() benim için gerçekten çok tehlikeli.
Birkaç kez zaten yanlış değişikliklerle karşılaştım. Ama aynı sorunlarla/sorunlarla karşılaşmaya çalıştığımda, bu sorunların nereden geldiğini kesin olarak biliyorum, hatta çizelgede aynı şeyleri denediğimde sorunlar/sorunlar bir daha olmadı. Birkaç saat sonra yine aynı problemle karşılaştım.
Hala bu sorunlara neyin sebep olduğunu tam olarak bilmiyorum. Sorun nedir ne demek istiyorum. Bir tanesini daha önceki yorumlarımda sizlerle paylaşmıştım. Ayrıca Ticaret Panelim EA tarafından bir pozisyon açıyorum, sorun değil! sonra manuel ticaret yöntemiyle Satış Limiti açmaya çalışıyorum. (Bu benim Ticaret Panelim henüz Satış Limiti veya Satış Durdurma Bekleyen emirlerine sahip değil)

O yüzden bu blok kodlarını sizinle paylaşmam gerektiğini düşünüyorum ama üzerinde çalıştığım için şimdilik paylaşamıyorum. Bu blok kodlarını OnChartEvent()'e taşımak istiyorum - çünkü buna bazı düğmeler de ekleyeceğim.

Sorun: Emir kapalıysa bir kod yazamıyorum, sonra bunun nesnelerini kaldırın, bunun gibi, Zararı Durdur, Kâr Al, Aç, Kapat okları bunun gibi bir şey, lütfen bana yardım edin.
Soru: Ayrıca Zararı Durdur, Ticaret Paneli Nesnelerinin Önündeki Kar Hatlarını Alın. Geçen seferden kaynaklanan nesneyi yarattığını biliyorum. Ama beni anlıyorsanız, lütfen bana bildirin, Trade Panel nesnesi "Zararı Durdur ve Kar Al" satırları olmadan diğer tüm nesnelerin önünde olmalıdır.

Şimdiden teşekkürler.