MQL4 hakkında sorular - sayfa 7

 
Forumda bir yerde, geliştiriciler init / deinit'in çalışması hakkında biraz ayrıntılı yazdı. Herhangi biri link verebilir mi?
 
Herkese merhaba, soru şu:
Delphi'de bir DLL doğurdum, onu MT4'ten çağırıyorum. Referans yoluyla basit parametreleri iletmek dışında her şey çalışır. Delphi'de şöyle ilan edildi:

prosedür Test2(var i: tamsayı); standart çağrı;
başlamak
addr(i) = nil ise ShowMessage('Bu da ne?!');
son;

öyle aramak için gag

#ithalat "DLL1.dll"
geçersiz Test2(int&i);

şöyle sesleniyorum:
int() {
int x = 5;
test2(x);
dönüş(x);
}

çağrıldığında, yığın tamsayı değişkenine bir başvuru içermelidir, ancak boş içerir
peki referans olarak bir int parametresi nasıl geçirilir?
dizileri geçerken, dizinin değeri normalde referansla iletilir

kullanmak
MetaEditor 4.00 yapı 183
MetaTrader 4.00 yapı 186

hemen başka bir soru: bir dize bir bağlantı olarak iletilirse, dizenin alıcı arabelleği ne boyutta olacak?

sadece başka bir soru:
Bir işlevin sonucu olarak bir dize iletirsem, dize için bellek alanı nereye ayrılmalıdır? Bir DLL'deki global bir değişkene bir işaretçi iletmeli miyim? Aynı zamanda, DLL'nin metatrader'ın herhangi bir modunda aynı anda farklı iş parçacıklarından çağrılmayacağından emin olabilir miyim?

Şimdiden teşekkürler
 
mevcut uygulama, parametreleri yalnızca aynı kaynak kodu içinde referans olarak iletebileceğiniz şekildedir. diziler bir istisnadır. Bir diziyi bir dll'ye iletirseniz, elemanlarının değerlerini değiştirebilirsiniz ve bu değişiklikler çağıran fonksiyonda mevcut olacaktır. yani çok küçük bir diziyi aktarabilirsiniz.
 
Bunu MQL4'te nasıl uygulayabilirim?
günün başında bekleyen iki emir belirledik
Biri (herhangi biri) çalıştıktan sonra - ikincisi kaldırılır
Çubuğun kapanmasından beş dakika önce (günlük diyelim), tetikleneni kapatın (SL veya TP tarafından kapatılmamışsa)
Bekleyen emirlerin hiçbiri işe yaramadıysa, çubuk kapanmadan beş dakika önce ikisini de silin
Şimdiden teşekkürler
 
1) bir dize bağlantı olarak geçirilirse, dize alma arabelleğinin boyutu ne olur?

2) Bir fonksiyonun sonucu olarak bir string iletirsem, string için hafıza alanı nereye tahsis edilmelidir? Bir DLL'deki global bir değişkene bir işaretçi iletmeli miyim? Aynı zamanda, DLL'nin metatrader'ın herhangi bir modunda aynı anda farklı iş parçacıklarından çağrılmayacağından emin olabilir miyim?

Şimdiden teşekkürler
 
Bunu MQL4'te nasıl uygulayabilirim?
günün başında bekleyen iki emir belirledik
Biri (herhangi biri) çalıştıktan sonra - ikincisi kaldırılır
Çubuğun kapanmasından beş dakika önce (günlük diyelim), tetikleneni kapatın (SL veya TP tarafından kapatılmamışsa)
Bekleyen emirlerin hiçbiri işe yaramadıysa, çubuk kapanmadan beş dakika önce ikisini de silin
Şimdiden teşekkürler

Böylece uygularsınız, bekleyen siparişleri doğru zamanda verirsiniz (kolaydır). Ve siparişleri kontrol etmeye başlarsınız. Bir Al veya Sat emri göründüğünde, bekleyen bir emri silme alıştırması yaparsınız (bu daha da kolaydır). Ve sonra, doğru zamanda, tüm siparişlerin kapanışını hesaplarsınız (oldukça basit).
 
Как в MQL4 реализовать такое
в начале дня устанавливаем два отложенных ордера
После того как один(любой) сработал - второй удаляется
За пять минут до закрытия бара(допустим дневного) закрыть сработавший (если он не был закрыт по SL или TP)
Если ни один отложенный ордер не соработал то за пять минут до закрытия бара удаляем их обоих
Заранее спасибо

Böylece uygularsınız, bekleyen siparişleri doğru zamanda verirsiniz (kolaydır). Ve siparişleri kontrol etmeye başlarsınız. Bir Al veya Sat emri göründüğünde, bekleyen bir emri silme alıştırması yaparsınız (bu daha da kolaydır). Ve sonra, doğru zamanda, tüm siparişlerin kapanışını hesaplarsınız (oldukça basit).


Çalışan bir kod istedim (belki biri uygulamıştır)
Yaptığım her şey işe yaramadı ... Her nasılsa beceriksizce işlenmiş odrerdelete
Başka bir soru, bazen bu enstrümanın fiyatının birkaç dakika boyunca donması (kene yok), yani. siparişi kapatmanın bir yolu yok. int start() gövdesi yürütülmez, diğer parametreler için tikler alınmasına rağmen, tiklerin geldiği herhangi bir araçtan Curetime değerini bir şekilde iletmek mümkün müdür?
Basitçe söylemek gerekirse, Curetime'ın değeri pratikte donmaz
 
Yapmak istediğin şey alfabe. Ana operatörlerin nasıl çalıştığını anlamadan derinlere inemezsiniz. Ve tüm siparişleri herhangi bir grafikten kapatabilirsiniz. Öyle olabilir:
 cnt=0; 
   süre(cnt<1) 
    { 
    if(OrdersTotal()<1)break;                          
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
    cmd=SiparişTürü(); 
    for(z=0;z<3;z++) 
     { 
     Yeniler(); 
     if(cmd==2||cmd==3||cmd==4||cmd==5)result=OrderDelete(OrderTicket()); 
     if(cmd==0) sonuç=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,CLR_NONE); 
     if(cmd==1) sonuç=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,CLR_NONE); 
     if(sonuç) break;Uyku(1000); 
     } 
    Uyku (10000); 
    }
 
Yapmak istediğin şey alfabe. Ana operatörlerin nasıl çalıştığını anlamadan derine inemezsiniz. Ve tüm siparişleri herhangi bir grafikten kapatabilirsiniz. Öyle olabilir:
 cnt=0; 
   süre(cnt<1) 
    { 
    if(OrdersTotal()<1)break;                          
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
    cmd=SiparişTürü(); 
    for(z=0;z<3;z++) 
     { 
     Yeniler(); 
     if(cmd==2||cmd==3||cmd==4||cmd==5)result=OrderDelete(OrderTicket()); 
     if(cmd==0) sonuç=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,CLR_NONE); 
     if(cmd==1) sonuç=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,CLR_NONE); 
     if(sonuç) break;Uyku(1000); 
     } 
    uyku (10000); 
    }



Ve bu kod parçası ne yapıyor?
Henüz tetiklenmemiş bekleyen siparişlerin ikisini de siler
 
Barın kapanmasından beş dakika önce tüm emirleri yok etmeni istedin, bu yüzden her şeyi kaldıracak. Sadece ona doğru zamanı ver. Ve gereksiz siparişleri kapatmak için diğer kod parçalarını kullanın. Yoksa tüm programın sizin için yazılmasını mı istiyorsunuz?
Neden: