EA'm çift giriş yapıyor - sayfa 9

 

Merhaba

Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.

Kodu görün:

 #include <Trade\Trade.mqh>

//--- global variables
CTrade trade;
bool position_opened= false ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
   bool conditions_to_open;
   ENUM_ORDER_TYPE order_type;
   double lot;
   double price,sl,tp;

//---...set variables

//--- inside OnTick()
   if (conditions_to_open && !position_opened) //-- Or position_opened==false
     {
       if (trade.PositionOpen( _Symbol ,order_type,lot,price,sl,tp, "comment" )
         && 
         (trade.ResultRetcode()== 10009 || trade.ResultRetcode()== 10008 )) //-- Or others condition according to your needs
        {
         //--- set the global variable to true to avoid duplicate orders
         position_opened= true ;
         Print ( "Success!" );
        }
       else
        {
         Print ( "Error = " , GetLastError (), "trade error = " , trade.ResultRetcode());
         //--- Sets the global variable to false
         // position_opened=false;                                         //-- Not needed as position_opened is already false
         return ;
        }

     }
//--- 
  }


Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?

İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.

Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.


Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).

Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.


EA, PositionSelect(Symbol()) işlevini doğru konum boyutuna güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.


 bool fatalError= false ; // atention: declare this as global

....

if (fatalError == false ) 
      {
       if (m_Trade.PositionOpen( Symbol (), ORDER_TYPE_BUY , LotSize, Price, 0 , 0 )) 
            {
             Print ( "Position opened in " , Symbol ());
             int maxTimeout= 0 ;
             while (! PositionSelect ( Symbol ())) 
                     {
                     Sleep ( 100 );
                     maxTimeout++;
                     if (maxTimeout > 100 ) 
                           {
                           Print ( "### PositionSelect fatal error!" );
                           fatalError = true ;
                           break ;
                           }
                     }
             Print ( "--> PositionSelect delay=" ,maxTimeout * 100 );
             break ;
            }
      }
 
snelle_moda :

Merhaba

Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.

Kodu görün:


Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?

İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.

Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.


Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).

Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.


EA PositionSelect(Symbol()) işlevini güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.


Haklısın, her iki yaklaşımın da sınırlamaları var.

Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.

 
Great & Powerful mql5 için bir OrderSendReliable () Kitaplığına ihtiyacımız var mı?
 
Ubzen :
Great & Powerful mql5 için bir OrderSendReliable () Kitaplığına ihtiyacımız var mı?
Sarkazmın bir faydası olacağını sanmıyorum. Böyle bir karmaşıklığa yol açan açıkça kötü bir tasarım olmasına rağmen.
 
angevoyageur :

Haklısın, her iki yaklaşımın da sınırlamaları var.

Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.


Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.

Hizmet masasından zaten bir yanıt var mı?

 
angevoyageur : bir faydası olacağını düşünmüyorum. Böyle bir karmaşıklığa yol açan açıkça kötü bir tasarım olmasına rağmen .

Seninle aynı fikirde olsaydım, bunun yararsız olduğunu düşünür müydün? .

Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.

Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.

Her neyse, özür dilemek mql5'i seçmek değildi.

 
snelle_moda :


Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.

Hizmet masasından zaten bir yanıt var mı?

Hayır. Ben sadece bunu düşünüyordum... İlgili tüm kişilerin bu konu hakkında ServiceDesk'e bir bilet yazması muhtemelen faydalı olacaktır. Ancak MQ'nun bu tasarımı değiştirmeye istekli olup olmadığı konusunda çok şüpheliyim. Ama deneyebiliriz.

İnsanlar ServiceDesk'e yazabilir ve bileti# burada bildirebilir. Benimki

Hatalar , MetaTrader 5 MQL , , Başlangıç: 2013.12.23 19:08 , #916435
Get in touch with developers using Service Desk!
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
Ubzen :

Seninle aynı fikirde olsaydım, yararsız olup olmadığını düşünür müydün? .

Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.

Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.

Her neyse, özür dilemek mql5'i seçmek değildi.

Acaba benzer bir sorun mql4'te de olamaz mı diye merak ediyorum, son aylarda mql4 forumunda çifte alım satımlardan şikayet eden kullanıcılardan en az 2 konu okudum. İlgili olduğundan emin değilim, ancak bu konuları kontrol etmeye değer olabilir. Bunları da okuyor musunuz?
 
angevoyageur : Acaba benzer bir sorun mql4'te de olamaz mı diye merak ediyorum, son aylarda mql4 forumunda çifte alım satımlardan şikayet eden kullanıcılardan en az 2 konu okudum. İlgili olduğundan emin değilim, ancak bu konuları kontrol etmeye değer olabilir. Bunları da okuyor musunuz?

Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.

 
Ubzen :

Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.

Ne demek istediğini anladığımdan emin değilim. Bu başlıkta bahsettiğimiz bu sorun, kötü bir kodlamadan değil, mql5'teki kötü bir tasarımdan kaynaklanıyor (bu benim görüşüm, ya da belki de sadece bir hata mı?). "Birden fazla ticaret dizisi" ile ne demek istiyorsunuz?
Get in touch with developers using Service Desk!
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.