İşlem işleme OnTradeTransaction - sayfa 5

 
fxsaber :

kretin.

Kendinden bahsettiğini anlıyorum.

Peki ya "Yapmak istiyor - anlayacaktır. "?

 
fxsaber :

Onlarca "tavsiye" yazmaktansa bir gönderiyle cevap vermek benim için daha kolay.

Anlamak istiyor.

Bir kez istedim ... Ama kodunuz bir şeye sahip.
 
Alexey Viktorov :
Bir kez istedim ... Ama kodunuz bir şeye sahip.

Bu durumda, sadece MT4/5 hakkında biraz bilgi sahibi olmanız gerekir.

 
fxsaber :

Bu durumda, sadece MT4/5 hakkında biraz bilgi sahibi olmanız gerekir.

Ne yazık ki, birazdan biraz daha fazlasını biliyorum.

Sana bir keresinde söyledim, kodunu her namluya bir fiş gibi sokup çıkarıyorsun. Kimin ihtiyacı var, uzun süredir kullanıyor ve hatta bazıları reklamını yapıyor. Ama onu gerçekten gerekli olmayan bir yerde empoze etmek sadece uygunsuzdur. Özellikle bir kişinin programlamayı hilelerle değil mql5'te anlamak ve anlamak istediği durumlarda.

 
Alexey Viktorov :

Ne yazık ki, birazdan biraz daha fazlasını biliyorum.

Sana bir keresinde söyledim, kodunu her namluya bir fiş gibi sokup çıkarıyorsun. Kimin ihtiyacı var, uzun süredir kullanıyor ve hatta bazıları reklamını yapıyor. Ama onu gerçekten gerekli olmayan bir yerde empoze etmek sadece uygunsuzdur. Özellikle bir kişinin programlamayı hilelerle değil mql5'te anlamak ve anlamak istediği durumlarda.

Görüyorsunuz, belirli açıklamalar yaptığınızda, bunları en azından pratikte bir şekilde doğrulamak güzel olurdu. Birkaç sayfa için OnTradeTransaction çözümü görünmedi. Ve ortaya çıkarsa, sağlanan çözümün neden tam olarak bu olduğu ve başka türlü olmadığı çabucak anlaşılacaktır. Karar, ne cehennem değil, görünür mantık olmalıdır. Dahil etmeyi kaldırdığım gerçeğinden, mantığındaki kaynak kod bir damla kaybetmeyecek. Ve sadece mantığın (fikrin) anlaşılması gerekiyor, artık değil.

Bu açıklamaya katılıyorum. Mantık açık olur olmaz, tüm kapanımlar atılır ve tamamen kendine ait bir tane oluşturulur. Önerilen yol budur: dahil etmede ustalaşmak değil, kodu göstermek ve çözümü gereken görevin nasıl çalışabileceğini korkutmamak.

 

İşte sorunun kaynağına dönüyorum. Ve sorular ortaya çıkıyor:

OnTradeTransaction prosedüründe işlemin işlemlerini yakalarım ve buna bağlı olarak bekleyen stop emirleri veririm.

İşlem işlem kodu aşağıdadır

 case TRADE_TRANSACTION_DEAL_ADD :
        {
         drop_info2( "TRADE_TRANSACTION_DEAL_ADD\r\n" +TransactionDescription(trans));
         if ((trans.deal_type== DEAL_TYPE_BUY || trans.deal_type== DEAL_TYPE_SELL ) && trans.order!= 0 )
           {
             if (getIsDealOfExpert(trans.deal)) //функция проверки принадлежности сделки к роботу
              {
               drop_info2( "Сделка наша" );
               analyzeFilledOrder(trans.order,trans.volume); //процедура по выставлению отложенных стоп ордеров
              }
           }
        }
       break ;

Bir anlaşmanın bir robota ait olup olmadığını kontrol etmek için fonksiyon kodu

 bool getIsDealOfExpert( ulong dealTicket)
     {
       if ( HistoryDealSelect (dealTicket) && HistoryDealGetInteger (dealTicket, DEAL_MAGIC )==magic_number && HistoryDealGetString (dealTicket, DEAL_SYMBOL )==symbol)
         return true ;
       else
         return false ;
     }

Bekleyen durdurma emirleri vermek için prosedür kodu

 void analyzeFilledOrder( ulong orderTicket, double volume)
  {
   bool isFindOrder= false ;
   string fullComment;
   ENUM_ORDER_TYPE orderType;
   if (getIsOrderOfExpert(orderTicket, true )) //Если ордер из сделки уже в истории
     {
      fullComment= HistoryOrderGetString (orderTicket, ORDER_COMMENT );
      orderType= ENUM_ORDER_TYPE ( HistoryOrderGetInteger (orderTicket, ORDER_TYPE ));
      isFindOrder= true ; //локальная переменная, если нашли в истории
     }
   if (!isFindOrder && getIsOrderOfExpert(orderTicket, false )) //Если не нашли ордер в истории и ордер есть не в истории
     {
      fullComment= OrderGetString ( ORDER_COMMENT ); 
      orderType= ENUM_ORDER_TYPE ( OrderGetInteger ( ORDER_TYPE ));
      isFindOrder= true ; //локальная переменная, если нашли не в истории
     }
   if (isFindOrder) //если хоть где-то нашли, то выставляем отложенные стоп ордера
     {
     //выставляем стоп ордера

Tarihte değil, geçmişte sipariş arama fonksiyonunun kodu

 bool getIsOrderOfExpert( ulong OrderTicket , bool isHistory)
     {
       bool is_expert= false ;
       //если ордер находится в истории
       if (isHistory)
        {
         if ( HistoryOrderSelect ( OrderTicket ) && HistoryOrderGetInteger ( OrderTicket , ORDER_MAGIC )==magic_number && HistoryOrderGetString ( OrderTicket , ORDER_SYMBOL )==symbol)
            is_expert= true ;
        }
       else
        {
         if ( OrderSelect ( OrderTicket ) && OrderGetInteger ( ORDER_MAGIC )==magic_number && OrderGetString ( ORDER_SYMBOL )==symbol)
            is_expert= true ;
        }
       return is_expert;
     }

İşlemlerin gelişiyle ilgili bilgileri, terminalde alındıkları sıraya göre günlükte gösteririm. Şimdi bir demo hesapta işlem yaparken karşılaştığım sorun:

Periyodik olarak, işlemler şu sırayla gelir: TRADE_TRANSACTION_ORDER_DELETE, ardından TRADE_TRANSACTION_DEAL_ADD, ardından TRADE_TRANSACTION_HISTORY_ADD. Genellikle bu durumda, işlem tamamlandıktan sonra stop emirleri verilmez. Bence bu, siparişin zaten silinmiş olması, ancak henüz tarihe girmemiş olmasından kaynaklanmaktadır. Yani ne tarihte ne de terminalde anlaşmadan bir emir bulamıyoruz. Bu şüpheli olsa da, robot tüm boyutlarda bir sipariş aradıktan sonra ( isFindOrder= false ) bulamadığı için durdurma emirlerinin verilmediği gerçeği devam etmektedir. İşlemlerin sırası doğru olabilir, ancak sipariş hala hiçbir yerde bulunamadı. Her durumda, robot anlaşmayı doğru bir şekilde belirler, ancak siparişlerin verilmesine ulaşmaz. Aynı zamanda her şey zaman zaman düzgün çalışıyor ve siparişler veriliyor.

Farklı yaklaşımlar denedim, hiçbir şey yardımcı olmuyor. Şimdi bekleyen siparişler için prosedürün başlangıcına 1 saniyelik bir uyku eklemeyi düşünüyorum, belki yeterli zaman yoktur. Genel olarak, başka nerede kazacağımı bile bilmiyorum.

Lütfen deneyimlerinizi ve fikirlerinizi paylaşın.

Vurgulananı aşağıdaki ifadeyle nasıl birleştirebilirsiniz:

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

İşlem işleme OnTradeTransaction

İlya Çocuk , 2019.02.07 20:20

Netleştirme modunu eklemeyi unuttum. Konum tüm robotlar için aynıdır. Yani bir robot pozisyonu satın aldı , ikincisi aldı , TRADE_TRANSACTION_DEAL_ADD olayları ters sırada geldi ve sonuç olarak ilk robot görmedi.

Evet ve mantığa göre işlemden emir yorumu almam gerekiyor pozisyonun burada pek bir faydası olmayacaktır.

Bir yazım hatası yapmayalım, biri aldı, diğeri aldı... Asıl mesele şu ki, netleştirme hesabı türüyle iki danışman aynı enstrüman üzerinde çalışıyor... Yoksa ben bir şeyi tam olarak mı anlamadım?

 
Alexey Viktorov :

Bir yazım hatası yapmayalım, biri aldı, diğeri aldı... Asıl mesele şu ki, netleştirme hesabı türüyle iki danışman aynı enstrüman üzerinde çalışıyor... Yoksa ben bir şeyi tam olarak mı anlamadım?

Tek bir ağ sembolündeki birkaç Uzman Danışman normdur. Örneğin, ızgaralar. Bu nedenle, netleştirme pozisyonunun sıfır olması oldukça mümkündür, ancak iki SL ve iki TP vardır. Sorun yukarıda açıkça belirtilmiştir.

 
fxsaber :

Tek bir ağ sembolündeki birkaç Uzman Danışman normdur. Örneğin, ızgaralar. Bu nedenle, netleştirme pozisyonunun sıfır olması oldukça mümkündür, ancak iki SL ve iki TP vardır. Sorun yukarıda açıkça belirtilmiştir.

Her şeyi düşünebiliriz. "Ulaştırma departmanı başkanı" nı duymak istiyorum. Sonuçta onun yazılarından alıntı yaptım.

 
Alexey Viktorov :

Her şeyi düşünebiliriz. "Ulaştırma departmanı başkanı" nı duymak istiyorum. Sonuçta onun yazılarından alıntı yaptım.

Görünüşe göre patron o kadar "korkutmuş" ki bir daha görünmeyecek :)

 
Илья Ребенок :

ben seni pek anlamadım İşte işlem işlemem

Anlaşmadaki siparişin durumu ile ilgili. Bunu kendim icat etmediğimi anlıyorsunuz. Bu, tüm Deal_add işlemlerindeki sipariş durumudur. Lütfen dikkat, bir pazar haline geldi, ancak bir gecikme oldu.

Şimdi yanlış anlaşılmanın başka bir kısmı geldi. Deal_add işlemi geldi, ancak pozisyon görünmedi ve mevcut olmayan pozisyon için gecikmeler yerleştirildi.

Katma.

Deal_add işlemi geldi, ancak pozisyon görünmedi ve mevcut olmayan pozisyon için gecikmeler yerleştirildi. Anlaşma türü satış, sipariş türü satın almadır. Başlangıçta limit Sell_limit olmasına rağmen

Görünüşe göre, ya eski infa bir yerde temizlenmemiş ya da başlatılmamış olanı alınmış.

Deal_add geldiğinde, sipariş genellikle geçmiştedir veya zaten silinmiştir, ancak henüz geçmişte görünmemiştir.

Her ne kadar hala bir sipariş olsa da, o zaman yerleştirilmiş durumda.

Ancak şu anda pek başlatılamaz.

Bir siparişin veya geçmişin nerede seçildiğini _gerçekten_ seçildiğini kontrol edin.