[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 289
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Bunu yazdım, eğer script sadece uzmanlarla birlikte klasöre aktarılırsa ne olur. Çalışıyor ama olması gerektiği gibi değil. Komut dosyası bekleyen 8 sipariş oluşturur ve bunu uzmanlarla birlikte bir klasöre kaydederseniz, her onaydan sonra 8 bekleyen sipariş oluşturur. Ve yeni 8 siparişi ancak eskileri kapandıktan sonra ertelemem gerekiyor.
Senaryonuza sadece "erteleme" mi yazdınız? O zaman sadece erteleyecek: kaç kene gelecek - bu yüzden vergilendirecek ... oh ... erteleyecek.
Oraya başka bir dama pankartı sokman gerekiyor ...
Bunu yazdım, eğer script sadece uzmanlarla birlikte klasöre aktarılırsa ne olur. Çalışıyor ama olması gerektiği gibi değil. Komut dosyası bekleyen 8 sipariş oluşturur ve bunu uzmanlarla birlikte bir klasöre kaydederseniz, her onaydan sonra 8 bekleyen sipariş oluşturur. Ve yeni 8 siparişi ancak eskileri kapandıktan sonra ertelemem gerekiyor.
Bir hata bulundu. Bu işlev için kitaplıkta satırda
13, 14 ve 15. sayılarda sıfır ile çıkarılmalıdır.şimdi doğru
Merhaba kütüphane fonksiyonları.
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.
Теперь правильно
Merhaba kütüphane fonksiyonları.
Senaryonuza sadece "erteleme" mi yazdınız? O zaman sadece erteleyecek: kaç kene gelecek - bu yüzden vergilendirecek ... oh ... erteleyecek.
Oraya başka bir dama afişi sokman gerekiyor ...
))))) Dayanamadım)))))
Tamam, şimdi konuya. İkinci TF'nin kodunu optimize etmeye çalışıyorum, RateInfo yapısını tek bir blokta yazmak için double'ı int[2]'ye dönüştürmek için yola çıktım. Düşündüm ve düşündüm, mümkün olan her şeyi boyamaya karar verdim, dahil. birinin hata yapmasını önlemenin gerçekleştirilemez yolları.
1. WinAPI (msdn). Genel olarak, kedi orada dönüştürme işlevlerine ağladı. Bunun nedeni, dönüştürme sırasında C tipi çevirinin yaygın olarak kullanılmasıdır.
sondan bir önceki satırda, int i1 char'a dönüştürülür ve son satırda char s2, int'ye dönüştürülür. Sonuç olarak, tüm bu ekonomi sözde birlikte kullanılır. Aslında herhangi bir WinAPI dll'sinde olmayan "dönüştürme işlevleri" ve bunlar yalnızca üstbilgi .h dosyalarında aşağıdaki gibi makrolar tarafından bildirilir:
bunlar derleme sırasında önişlemci tarafından ilk kod gibi bir dizgeye genişletilir. Ve başlık .h dosyaları dll değildir ve yalnızca geliştirme ortamında (Studio, Borland, gcc, vb.) kullanılır. MQL4 için neden hava ne soğuk ne de sıcak. Ancak, işlevin gerçekten yalnızca başlık .h dosyasında mı yoksa dışa aktarılan işlevlerde bir yerde, System32'deki bazı dll'lerde meraklı gözlerden gizlenmiş mi olduğunu her zaman iki kez kontrol edebilirsiniz, şimdi nasıl olduğunu açıklayacağım.
2. WinAPI (dll CRT). Bu dll'ler msvcp*, msvcr*, msvcrt*, msvci*, msvcirt olarak adlandırılır. Burada seçim daha geniştir: _atodbl, _atoi64, _atoldbl, _ftol, _i64toa, _itoa, _ltoa, _strtoi64, _strtoui64 _ui64toa, _ultoa, atof, atoi, atol, strtod, strtol. İsimdeki semboller şu anlama gelir:
Ancak beklenen _dtoi64 / _dtoui64 mevcut değildi ve mevcut değil. msvcrt*, msvci*, msvcirt.dll içinde tanımlananları kullanın
atlatmak için bile, yalnızca dosya işlemleri olarak mümkündür (bunlar konsoldur).
Bu sitede msdn dışında arama yapabilirsiniz , işte sitedeki arama çubuğu. Benzer bir "uygun" msdn arama dizesi burada . Fark ne? msdn'de işlevlerin iyi bir açıklaması vardır, ancak bazıları hiç değildir (örneğin, NativeAPI). Alternatif olarak, sistem dll'lerini dışa aktarmak için herhangi bir tablo var, ancak açıklama yok. Prensip olarak, sitedeki bir dizi dışa aktarma tablosu, bir dll'den dışa aktarma tablolarını kendiniz çıkarmaktan daha kolaydır (IDA, PE Explorer, vb.).
3. Birleştirici ekler (daha doğrusu, makine koduna ekler). Şimdi açıklayacağım çünkü. Bu konudaki resmi belgeler çok belirsizdir. MQL4 C++ üzerinde
gerçekleştirilemez, çünkü asm/_asm bir işlev değil, bir önişlemci yönergesidir ve system32/*.dll'de herhangi bir yerde tanımlanmamıştır (o sitede aramaya bakın). Başka bir deyişle, böyle bir şey yok
Saf yerel kodda, MQL4'te yazabilirsiniz, ancak yalnızca bir durumda: msdn'deki bir WinAPI işlevinin tanımına göre, lpTimerFunc türünde bir işlev/prosedür için bir işaretçi kendisine iletilmesi gerektiğinde (tam bir örnek burada forumda), msdn'de şu şekilde bildirilir:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc //<- );
veya lpfnWndProc (burada forumda bitmemiş bir örnek , msdn bildirimi ve mql4 yapı bildirimi girişimi). Aksi takdirde hiçbir yolu yoktur: MQL4 bir yorumlayıcıdır, işlevin adresi yoktur, aktarılacak bir şey yoktur, ancak makine kodlarında yazılırsa. Daha sonra bir int dizisine paketlenirler ve dizi, işleve başvurularak iletilir.
Bu nedenle derlenmiş derleyici ekleri (yani makine kodu) bu görev için geçerli değildir - tamamen farklı bir kapsamları vardır. Bundan çıkarılabilecek maksimum değer, böyle bir int dizisini, cmd'de Shell32.dll aracılığıyla hata ayıklama yoluyla çalıştırmaktır. Oradaki komut satırını transfer etmek imkansız görünüyor ama keybd_event üzerinden sanal tuşlar ile yazabilirsiniz.
4. Ekler olmadan saf MQL4'te double'ı int[2]'ye dönüştürmek için kendi işlevinizi yazma. Ama kod miktarını ve performansının hızını anladım, sadece reddettim. Modülün kendisini bile yazmadım, ancak anladığım kadarıyla algoritma şöyle:
tamamlanması çok uzun zaman alacak. Böylece en bariz ve en basit çözüme ulaştım.
5. C++'da kendi kendine yazılmış bir dll kullanmak. Kod şu şekilde çıktı:
komut dosyasında
int'de üst[0 ], referans olarak ilettiğimiz için geri değişir. Alırız:
... işe yaradı, çöplükteki satırlar aynı. Bir klasör ekliyorum, kütüphanelerde double.dll var, örneklerde - dll kaynakları, komut dosyalarında - bir komut dosyası var.
Akşam: Arşivi yeniden yükledim ve script kodunu ve biraz dll'yi taklit ettim.
Neyi yanlış yaptığımı anlamıyorum. Nedense bir pozisyonu kapatmak planladığım gibi olmuyor?
İşte pozisyon açma kriteri
İşte bir pozisyonu kapatmanın kriteri
ve işte elde ettiğimiz şey:
Değil! Standart kitaplıktan işlevlere dokunamazsınız! Dima yasaklandı :-))
Ne yapıyorsun burada palyaçoluk yapıyorsun? Bir hata varsa, bunu servis masasına bildirmeli veya dosyanın kendi kopyasını oluşturmalısınız.
Neyi yanlış yaptığımı anlamıyorum. Nedense bir pozisyonu kapatmak planladığım gibi olmuyor?
İşte pozisyon açma kriteri
İşte bir pozisyonu kapatmanın kriteri
ve işte elde ettiğimiz şey:
Ve kapanış kriteri ne sıklıkla kontrol ediliyor? Barlarda olmama ihtimali var mı?
Ve kapanış kriteri ne sıklıkla kontrol ediliyor? Barlarda olmama ihtimali var mı?
Sorunun özünü tam anlayamadım. Modeli açık fiyatlarla test etme (şekillendirilmiş çubuklarda hızlı yöntem)