[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 310

 

Bir soru. Şimdi nasıl optimize edilir? Danışmanın iskeleti şimdi:

init(){
         //если файл истории не существовал, формируем заголовок
}

start(){
         //ловим тики
         //смотрим, сколько прошло секунд с последнего вызова start():
                 //если 1 или больше, то---(блок свеч)---
                         //запоминаем, сколько прошло секунд
                         //---(блок выбора режима)---
                         //формируем RateInfo - столько раз, сколько прошло секунд
                 //если 0, то---(блок теней)---
                         //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
         //если текущий бид меньше предыдущего, то медвежья
         //в любом другом случае бычья

Değişkenlere açık-yakın taşındı ve gereksiz hale gelen ikinci FileSeek bloğu kaldırıldı, bir mum stili seçeneği eklendi (tümü boğa, tümü düşüş, herhangi biri), sonraki talep veya teklif önceki yüksek ve düşük değerden daha büyük veya daha düşükse gölgeler eklendi , baskı ile bir iz ekledi, başlıktaki bayrak tarafından etkinleştirildi, satır numaralarına bağlantılar içeren her şeyi tamamen yorumladı, kodu forum için okunabilir hale getirmeye çalıştı. Satır numarası ile de yazdırma.

Şimdi izle:

Üstte zaman dilimini, altta saniyeleri işaretleyin. Gölgeler (kuyruklar), bir saniyede iki kene yakalandığında ve teklif veya teklifin öncekinden farklı olduğu zamandır. Tik saat gibi çalışır. Bir saniye gecikir, bu, kenelerin işlenmesi için keneler arasındaki minimum zaman aralığından daha fazla zaman harcandığı anlamına gelir. Bu yüzden kodu nasıl optimize edeceğimi soruyorum. Kodu ekliyorum - her şeyi tamamen yorumsuz bıraktığımı tekrar ediyorum. Nasıl çalıştığını kontrol etmeniz gerekiyorsa - bir dakika için bir danışman olarak asın, ardından bağımsız olarak arayın ve 'sec'+enstrüman adını açın.

Dosyalar:
hhi.jt.mq4  29 kb
 
david2 :
Bir Expert Advisor'da böyle bir işlev nasıl uygulanır? Bay emirlerinden herhangi birinde TP veya SL tetiklendiğinde, tüm Bay emirleri kapatılmalıdır.

Programlama deneyiminiz varsa, bir ipucu:

1. Bir satın alma siparişi açtıktan sonra satın alma siparişlerinin sayısını sayın

2. Numaralarını global bir değişkende saklayın

3. Bir sonraki tikte, alış emri sayısının bir öncekinden daha az olup olmadığını kontrol edin, ardından tüm alış emirlerini kapatın.

Kod bazında açık pozisyon tipine göre emir sayısının muhasebeleştirilmesi ve seçilen tipteki (alış veya satış) pozisyonların kapatılması için fonksiyonlar vardır.

Kim'den birçok faydalı özellik

 

Değişkenlerin tip dönüşümü hakkında.
Çift K katsayısının değerini metin olarak satır açıklamasına yazdı (K=0.573).
Kodun yürütülmesi sırasında, K katsayısının değeri birkaç kez değişti.
Şimdi, ObjectDescription(dize adı) satır açıklama dizesini çıkardıktan sonra çift Z değişkenini yazılı K=0.573 değeriyle çarpmak istiyorum.
MQL'de tekrar 0,573 elde etmek için string tipindeki bir değişkeni double tipindeki bir değişkene dönüştürmek mümkün müdür? Mümkünse, lütfen bir bağlantı sağlayın.
Samimi olarak. shurkin.

 
Shurkin :

MQL'de tekrar 0,573 elde etmek için string tipindeki bir değişkeni double tipindeki bir değişkene dönüştürmek mümkün müdür? Mümkünse, lütfen bir bağlantı sağlayın.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sn.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 Sn.TF AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 Sn.TF AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 Sn.TF AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 Sn.TF AUDUSD,M1: 15

Her iki kodda da (onay ve ikinci zaman dilimleri) eğimli bir milisaniye zamanlayıcısı olan günlüğün parçası. Şimdiye kadar akla gelen tek şey, döngüleri tamamen ortadan kaldırmak, yani. son tıklamanın üzerinden kaç saniye geçmiş olursa olsun saniyede bir veya daha fazla tıklama - her zaman bir mumdur. İkinci bir tane olsaydı, vb. saniyede kene - gölgeli bir mum. Ama sonra "delikleri" olan ikinci bir TF olacak ve High[15]'e göre artık 15 saniye önce ask değerini almadığımı varsayalım...

 
hoz :

Kendimden bir fonksiyon yazmamı istedim. Sonuç olarak, N -mumlar belirli bir yönde geri döndüğünde, mum sayısını hesaplamak gerekir. ANCAK. Bunun için birkaç koşul var, daha doğrusu zamanla bunların bir listesi olacak.

Diyelim ki, örneğin, eğilim aşağı yönlü, ... bir geri dönüş başladı. 5 mum tükendiyse ve her mum yükselişteyse ve örneğin, her mumun boyutu belirtilen i_sizeOfCurrBar değerinden ve diğerlerinden daha büyükse istiyorum. koşullar, sonra sürekli yükseliş çubuklarının sayısını görüntüler ve işlevden bazı sonuçlar döndürürüz.

Bunu yazmanın en iyi yolu nedir? Şu anda yazmaya başladım ve burada bir çubuk döngüsünden geçmenin ve bir şekilde tarihin derinliğindeki görüntülemeyi sabit sayıda çubukla değil, çubuklarla sınırlamanın gerekli olduğunu anlıyorum. koşullar bizi ilgilendiriyor.

İşte sahip olduğum şey:

Şu anda, sondan bir önceki çubuktan sadece bir arama var, ardından indeks 6'ya sahip çubuk, yani. 5 bar üst üste. Ancak EA'ya yalnızca yükseliş çubuklarını hesaplamak için ihtiyacım var ve hepsi art arda değil. Bu nasıl daha iyi uygulanır?

Boyuta göre, doğru bir şekilde filtreledim.

Her şey zaten yazıldığında, sayaç zaten nht ile sürekli çubukların sayısını, aşağıdan etvsvb parametreleriyle hesaplayacak ve bu tür çubuklar yeterliyse, bir tür çubuk döndürülecektir. fonksiyon değeri.

Her zamanki gibi orijinal: çubukları "arkadan" sayın...

 for ( int i= Bars - 1 ; i>= Bars - 6 ; i--)
 
Zhunko :

Birçok farklı yol vardır:

1. Genel bir değişken aracılığıyla .

2. Bir dosya aracılığıyla .

3. iCustom() aracılığıyla .

4. Küresel grafik değişkenleri aracılığıyla.

5. Haritalama . Verileri bir terminalden başka bir terminale aktarmak mümkündür. Veya bir terminalde, MT4 global değişkenlerinin kısıtlamaları olmadan verileri bir pencereden başka bir pencereye aktarın.


Bunlardan hangisi en hızlı çalışır?
 
gyfto :

Bunlardan hangisi en hızlı çalışır?
5. Haritalama.
 
hoz :
Baskıda 1 ve 2 değeri var... Bu da ne böyle?
 Print ( "i = " , i, "; up = " , cnt, "; cnt = " , cnt);

Sadece dikkatsizlik. Genel olarak, yerel bool 4 bayttır, bu onu yalnızca 0 ve 1 değerlerini almak zorunda bırakmaz. C ++ boolearn - evet, 1 bayt. Her zaman 0 veya 1) olduğunu umarak birden fazla seçim yapmam gerekirse, bool'u switch() içindeki ikili aritmetikte kişisel olarak kullanırım)) Bunun gibi:

 bool f1, f2, f3, f4 //флаги

switch ( 8 *f4+ 4 *f3+ 2 *f2+f1){
   case 0 :
   ...
   case 15 :
} //без default
 
gyfto :

Bir soru. Şimdi nasıl optimize edilir? Danışmanın iskeleti şimdi:

Değişkenlere açık-yakın taşındı ve gereksiz hale gelen ikinci FileSeek bloğu kaldırıldı, bir mum stili seçeneği eklendi (tümü boğa, tümü düşüş, herhangi biri), sonraki talep veya teklif önceki yüksek ve düşük değerden daha büyük veya daha düşükse gölgeler eklendi , baskı ile bir iz ekledi, başlıktaki bayrak tarafından etkinleştirildi, satır numaralarına bağlantılar içeren her şeyi tamamen yorumladı, kodu forum için okunabilir hale getirmeye çalıştı. Satır numarası ile de yazdırma.

Şimdi izle:

Üstte zaman dilimini, altta saniyeleri işaretleyin. Gölgeler (kuyruklar), bir saniyede iki kene yakalandığında ve teklif veya teklifin öncekinden farklı olduğu zamandır. Tik saat gibi çalışır. Bir saniye gecikir, bu, kenelerin işlenmesi için keneler arasındaki minimum zaman aralığından daha fazla zaman harcandığı anlamına gelir. Bu yüzden kodu nasıl optimize edeceğimi soruyorum. Kodu ekliyorum - her şeyi tamamen yorumsuz bıraktığımı tekrar ediyorum. Nasıl çalıştığını kontrol etmeniz gerekiyorsa - bir dakika için bir danışman olarak asın, ardından bağımsız olarak arayın ve 'sec'+enstrüman adını açın.

Mantığı pek araştırmadım ama içimden bir ses bana fazladan hesaplamalar olduğunu söylüyor. Bir buçuk yıl önce, alıntıların toplanması ve astronomik bir dakikanın başında net bir kesimle M1 mumlarının oluşturulması ile aynı tür bir görevi çözdüm.
İlgileniyorsanız, yalnızca kodunuzu (dosyanızı) optimize etmekle ilgili birkaç noktaya bakabilirsiniz. Doğru, optimizasyon konusunda ciddiyseniz , kodun yürütme süresini ölçmeniz gerekir. ;)
Dosyalar:
hhi.jt_c_.mq4  23 kb