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

 
Prensip olarak - evet, ancak "işaretçi" kendinizinkini başlatmak zorunda kalacak. önerimi bir işlevle düşünün, bunun evrensel bir çözüm olduğunu düşünüyorum. Tabii ki, böyle bir kodun hızı ile ilgili soru ortaya çıkıyor, ancak görünüşe göre bu üçüncü soru.
 
FAQ :
Prensip olarak - evet, ancak "işaretçi" kendinizinkini başlatmak zorunda kalacak. önerimi bir işlevle düşünün, bunun evrensel bir çözüm olduğunu düşünüyorum. Tabii ki, böyle bir kodun hızı ile ilgili soru ortaya çıkıyor, ancak görünüşe göre bu üçüncü soru.

Teşekkürler, yapıcı bir konuşma yapmaktan her zaman memnun olurum.

 
Ant_TL :

Bu, programdaki fonksiyon A bir döngüde bir sıra seçer ve ardından kütüphaneden yardımcı fonksiyon B'yi çağırırsa, o zaman B, çalışması sırasında başka bir sıra seçse bile, fonksiyon A'daki sıranın seçimi yapılmamalıdır. dönüşte ihlal edilebilir.

Fonksiyonun değerini bir değişkene sürdüyseniz, evet. Değilse, bu işlev geneldir ve ilk çağrıldığında değişebilir.
 
Ant_TL :

Teşekkürler, yapıcı bir konuşma yapmaktan her zaman memnun olurum.


Sağlık için. sadece sonuçlara atlamayın.
 
Roger :
Fonksiyonun değerini bir değişkene sürdüyseniz, evet. Değilse, bu işlev geneldir ve ilk çağrıldığında değişebilir.

Pek anlayamadım. Aklımda şu durum vardı: ana program modülündeki A() işlevinden kitaplık işlevi B()'yi çağırıyoruz; bu, örneğin, listedeki ilk sırayı seçiyor (önceden bir sıra olduğunu varsayalım) :

geçersiz B(){

OrderSelect(0,SELECT_BY_POS);

}

Bu işlevi çağırdıktan sonra, kontrol kütüphaneden ana modüle döndüğünde, içindeki OrderTicket() işlevini veya siparişin önceden seçildiğini varsayan başka bir işlevi çağırırsanız, tam olarak aynı hatayı 4105 alırız. Ancak ana modüldeki B çağrı fonksiyonundan önce, başka bir sıra seçilmişse, o zaman kitaplıktaki yeni Select'ten bağımsız olarak seçili kalacaktır, çünkü anladığım kadarıyla mevcut seçili sıra sadece içinde benzersizdir. modül.

Ancak, ana modülün A fonksiyonundan aynı B fonksiyonunu çağırırsak, o zaman A fonksiyonunda B çağrılmadan önce seçilen sıra 0 sırasına değişecektir (yani, B fonksiyonundan döndükten sonra mevcut seçilen sıra, ne olursa olsun 0 olacaktır). olup olmadığını, B'yi çağırmadan önce seçilen mevcut siparişin ne olduğunu)

Bu nedenle, kendisi OrderSelect'i kullanan bir işlevi çağırırsak, bu işlevden geri döndüğümüzde, seçilen sıranın, onunla daha fazla çalışmaya güvenerek, bu işlevi çağırmadan önce seçtiğimiz sıra olacağından özellikle emin olmalıyız. Bundan emin değilseniz, bu kodda bulunması zor mantıksal hatalara yol açabilir.

 
Ant_TL :

Spesifik olarak, "işaretçi" - mevcut sipariş seçiminin durumu - modül içinde globaldir, yani. bir kitaplık için bu işaretçi birdir ve bir program modülü için farklıdır. Bunun anlamı, programdaki fonksiyon A bir döngüde bir sıra seçer ve ardından kütüphaneden yardımcı fonksiyon B'yi çağırırsa, o zaman B, çalışması sırasında başka bir sıra seçse bile, fonksiyon A'daki sıra seçimi yapılmamalıdır. dönüşte ihlal edilebilir. Ancak her iki işlev de modül içindeyse, o zaman B işlevinden dönerken - ya A işlevinin kendisinde B'yi çağırmadan önce ve sonra ya da B işlevinde işin başında ve tamamlandıktan sonra - hatırlamak ve geri yüklemek gerekir. mevcut sipariş seçimi, böylece bu yerdeki iş fonksiyonu A'nın mantığı ihlal edilmedi.


fikriniz açık.

ve bilet numaraları değişkenlere girildiğinde ve daha sonra kullanıldığında yaygın olarak karşılaşılan EA tasarımlarıyla bir analoji var gibi görünüyor (bir sonraki tiklerde, bir bayt bileti açıldı, vb.).

Bir ara bunu da bırakmıştım, tk. tüm bu iyilikler sürekli hatalara yol açtı .. bu nedenle, danışmanın hesaplaması gereken her şey, özellikle çok az zaman aldığı için .. son açık siparişin biletini almanız gerekiyor - anlayın, özellikleri kullanmanız gerekiyor alınan siparişin, lütfen OrderSelect() ve her şey yolundadır, bu nedenle, elbette, danışmanın işlem algoritmasının karmaşıklığı aşağıdaki gibidir, yani. danışman herhangi bir zamanda ticaret taktiklerinin hangi durumda olduğunu "anlamalı" ve terminaldeki elektriğe ve diğer çalışan danışmanlara ne olduğuna bakılmaksızın bu duruma göre hareket etmelidir.

Ant_TL :

Bu işlevi çağırdıktan sonra, kontrol kütüphaneden ana modüle döndüğünde, içindeki OrderTicket() işlevini veya siparişin önceden seçildiğini varsayan başka bir işlevi çağırırsanız, tam olarak aynı hatayı 4105 alırız. Ancak ana modüldeki B çağrı fonksiyonundan önce, başka bir sıra seçilmişse, o zaman kitaplıktaki yeni Select'ten bağımsız olarak seçili kalacaktır, çünkü anladığım kadarıyla mevcut seçili sıra sadece içinde benzersizdir. modül.

Çalıştığı için test edildi mi yoksa böyle çalıştığını mı düşünüyorsunuz?


benim için modüllere ve kitaplıklara bölünme yok.. Derlemeden sonra kod tek bir yapı olarak çalışıyor..


OrderSelect() 'in çağrıldığı her yerde, son seçilen siparişin aynı OrderTicket()'i her yerde döndürülecektir.

Bence bu şekilde çalışmalı..

 
keekkenen :

Çalıştığı için test edildi mi yoksa işe yaradığını mı düşünüyorsun?

benim için modüllere ve kitaplıklara bölünme yok.. Derlemeden sonra kod tek bir yapı olarak çalışıyor..

OrderSelect()'in çağrıldığı her yerde, son seçilen siparişin aynı OrderTicket()'i her yerde döndürülecektir.

Bence bu şekilde çalışmalı..

Ana modüle dönerken kütüphanede seçilen sıranın seçilen sıra olmadığı kontrol edildi. Buna dayanarak, mantıksal olarak, henüz özel olarak kontrol etmemiş olmama rağmen, dönüşte seçilen sipariş ana modülde en son seçilen sipariş olmalıdır.

Bu sorunu, dahil edilen mqh kitaplık dosyasında kitaplık işlevleri için şu şekilde sarmalayıcılar oluşturarak kendim çözdüm:

bool GetOrder(int a=0){
dönüş(OrderSelect(_GetOrder(a),SELECT_BY_TICKET));
}

Bu arada, varsayılan parametreler de bu örnekte yansıtılan kitaplık işlevlerine aktarılamaz.

Burada _GetOrder(int a), bir sıra bulan ve döndüren kitaplık işlevinin kendisidir. Kitaplıktan işlev çağrısı , "a" parametresinin açık bir göstergesiyle gerçekleşir, sarmalayıcı işlevinde varsayılan olarak 0'a eşittir, ayrıca sarmalayıcıdaki döndürülen bilet, ana program modülünde yeniden seçilir, çünkü kütüphane işlevindeki seçimi "alıcıya" ulaşmaz.

 

Ben de öyle düşünüyorum, bu fonksiyon nereden çağrılırsa çağrılsın, belirli bir düzende seçilmiş bir dizi parametre verecek ve bu çağrı nereden gelirse gelsin program bu fonksiyona bir sonraki çağrıya kadar onları değiştirmeyecek.

PySy. Başka neden bu işlevi ek, tamamen gereksiz bir işleve sarıyorsunuz?

PyPySY. İpucu - statik bir tamsayı değişkeni oluşturun, siparişin değerini açtıktan sonra ona iletin, siz istediğinize kadar değişmeyecek ve tam olarak istediğinizi yapacaktır.

 
Ant_TL :

Ana modüle dönerken kütüphanede seçilen sıranın seçilen sıra olmadığı kontrol edildi. Buna dayanarak, mantıksal olarak, henüz özel olarak kontrol etmemiş olmama rağmen, dönüşte seçilen sipariş ana modülde en son seçilen sipariş olmalıdır.

Ve bu ifadenin açıklığa kavuşturulması gerekir: SADECE derlenen modülden (kütüphane) (kütüphaneler klasöründen *.mg4-libraries) bahsediyorsak, ifade doğrudur. Ana derlenmiş dosyanın (*.mgh kitaplığı) parçası olan modüller için bu ifade YANLIŞTIR!
 
TarasBY :
Ve bu ifadenin açıklığa kavuşturulması gerekir: SADECE derlenen modülden (kütüphane) (kütüphaneler klasöründen *.mg4-libraries) bahsediyorsak, ifade doğrudur. Ana derlenmiş dosyanın (*.mgh kitaplığı) parçası olan modüller için bu ifade YANLIŞTIR!

MQH ayrı bir modül değil, başka bir dosyada bulunan ana modüle bir ektir. Yani elbette ayrı bir .ex4 kitaplığından bahsediyoruz