Bir siparişin seçili olup olmadığı nasıl kontrol edilir - sayfa 10

 
artmedia70 :
Herhangi bir sorun görmüyorum. Ve yaygara boşandı ... Bir ana işlev A()'da bir sıra seçmeniz ve ana işlev A()'dan çağrılan başka bir işlev B()'de, işlev A()'da seçilen sırayı işlemeniz gerekir. Ve B() işlevinde, siparişin hala seçili olup olmadığından emin olmanız gerekir... Peki, A() işlevinde seçilen siparişin biletini B() işlevine iletin. B() işlevinde, siparişin hangi listeden seçildiğini kontrol edebilir ve ardından nereye gideceğinize ve A() işlevine neyin geri döneceğine karar verebilirsiniz...

Beni yanlış anladın. Nedense insanların yarısı gibi. A() işlevinde seçilen B() işlevindeki sırayı işlemem gerekmiyor. B() işlevi diğer emirlerle çalışır, ne olursa olsun A() işleviyle ilgisi yoktur, B() işlevinin kendi mantığı vardır. Siparişlerin sayısını, toplam kârını sayabilir, sihirli yorumlarını, TP SL'yi vb. izleyebilir. Görev, B() işlevinden A() işlevine geri döndükten sonra, B() işlevi siparişlerle ne yaparsa yapsın, ondan B() işlevini çağırma noktasında A() işlevinin mantığının olmasını sağlamaktır. A() işlevi tarafından B() işlevi çağrılmadan önce seçilen sıranın artık seçilmemesi ve seçilen sıranın B() işlevinin birlikte çalıştığı başka bir rastgele rastgele sıra olması nedeniyle ihlal edilmez. bir döngüdeki siparişler arasında yineleme.

artmedia70 :
Şimdi terminali yeniden başlattıktan sonra last_select değişkenine ne olduğunu hayal edelim (kötü adamlar ışığı kapattı)

Yeniden başlatmanın ardından, last_select değişkeni gerektiği gibi 0 olarak başlatılacaktır.

 

10 sayfa falan filan başladı. İşlevin başka bir (seçilmemiş) siparişle çalışmasını sağlayan kod:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails ( int fi_Ticket)               // OrderTicket()
{
     int lia_cmd[] = { 1 ,- 1 ,- 1 , 1 , 1 ,- 1 };
//----
     //---- На текущий момент может быть выделенным другой ордер
     int li_LastTicket = OrderTicket();
     if (li_LastTicket != fi_Ticket)
    {   
         if (! OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100 , "fGet_OrderDetails()" , True, GetLastError ()); return ( false );}
    }
     if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
     //---- Выделяем первоначальный ордер
     if (li_LastTicket != fi_Ticket) { if (li_LastTicket > 0 ) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
     return ( true );
}
bu sadece örneğin. Özü anlayan yakalayacaktır.
 
TarasBY :

10 sayfa falan filan başladı. İşlevin başka bir (seçilmemiş) siparişle çalışmasını sağlayan kod:

bu sadece örneğin. Özü anlayan yakalayacaktır.

Bu durumda değil. EA'da yerel veya global değişkenler vardır ve terminal değişkenler vardır. Programın bakış açısından, bu değişkenler etkileşimlidir, çünkü değerleri danışman için herhangi bir zamanda tamamen açıklanamaz bir şekilde değişebilir. Sıra seçiminin işareti tam da böyle bir değişkendir. Meta alıntılar, bir grafik nesnenin "seçim" niteliğine erişime izin veriyorsa, o zaman aynı şey onda da olur. Bu nedenle kaçınılmaz sonuç: seçilen sıranın numarasını bilmeniz gerektiğinde bir sıra seçmelisiniz veya seçilen sırayı ancak ve ancak danışmanın mantığı gerektiriyorsa hatırlamanız gerekir. Bunun gibi bir şey...
 
tara :
Bu durumda değil. EA'da yerel veya global değişkenler vardır ve terminal değişkenler vardır. Programın bakış açısından, bu değişkenler etkileşimlidir, çünkü değerleri danışman için herhangi bir zamanda tamamen açıklanamaz bir şekilde değişebilir. Sıra seçiminin işareti tam da böyle bir değişkendir. Meta alıntılar, bir grafik nesnenin "seçim" niteliğine erişime izin veriyorsa, o zaman aynı şey onda da olur. Bu nedenle kaçınılmaz sonuç: seçilen sıranın numarasını bilmeniz gerektiğinde bir sıra seçmelisiniz veya seçilen sırayı ancak ve ancak danışmanın mantığı gerektiriyorsa hatırlamanız gerekir. Bunun gibi bir şey...

Sana tamamen katılıyorum:

  • Her şeyden önce, bundan başlamanız gerekir. sahip olduklarımız (MQL4 özellikleri);
  • ikinci olarak, TÜM alım satım emirlerini tek bir yerde açık emirlerle işleme yapısını kullanıyorum: Emir listesini sıralarım ve her emirle (sırayla) gerekli tüm işlemleri gerçekleştiririm.

PS Ve "her ihtimale karşı" kodunda belirtilen kontrolü yapıyorum ... :)

 

:)

Mutlu tatiller! Benim için - 20 yıl, hayatımın en kötüsü değil.

 
TarasBY :

10 sayfa falan filan başladı. İşlevin başka bir (seçilmemiş) siparişle çalışmasını sağlayan kod:

bu sadece örneğin. Özü anlayan yakalayacaktır.

Evet. İşte bu yerde:

int li_LastTicket = OrderTicket();

Çağrılmadan önce OrderSelect'e çağrı yapılmadıysa, kodunuz 4105 çalışma zamanı hatası üretecektir. Her onay işaretinin sonuna bir GetLastError kontrolü koyun ve bu hatayı yakalayın.

 
tara :

:)

Mutlu tatiller! Benim için - 20 yıl, hayatımın en kötüsü değil.

Tebrikler! Ve ne, 20 yıl "İnanç ve Gerçeğe" hizmet etti mi?
 
borilunad :
Tebrikler! Ve ne, 20 yıl "İnanç ve Gerçeğe" hizmet etti mi?
Merhaba hayatım.
 
tara :
Merhaba hayatım.
Yani, bir asker, ben oradayken bana dedikleri gibi ve belki şimdi, bir parça!? :)
 
borilunad :
Yani, bir asker, ben oradayken bana dedikleri gibi ve belki şimdi, bir parça!? :)
Evet desem daha kolay olur mu? :)