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

 
gyfto :

Böyle. bitmiş gibi. İşte onları ikinci mumlara yerleştiren yeniden tasarlanmış bir kene seçici.

Öyleydi:

Dönüştü:

Kodla ilgili notlar.

1. Bir sanal mum seçiminde CPU zamanından tasarruf etmek için durum değiştirmedim, bunun yerine seçimin olduğu bölümleri yorumladım (çünkü derlemeden önce belirli ihtiyaçlar için seçim yapıldı).

2. Yerel saatle (çevrimdışı, yani) çalışmak aklıma gelmedi. " while (time== TimeLocal ()){ //bir saniye geçene kadar " döngüsünde, FileWriteDouble'da MarketInfo olması gerektiğinden şüpheleniyorum (bana göre bu aptallığın zirvesidir). Orada neyin daha mantıklı olacağını söylersen minnettar kalırım.

3. Yazarın tasarımı

ilk defa init()'in en sonunda ilan ettim.

4. init() dinamik dizilerinin başında

kullanılan değişkenler yerine

5. Optimizasyon için, teorik olarak WinAPI dosya fonksiyonlarını kullanabilir ve geçmişe bir kerede 44 baytlık bir blokta yazabilirsiniz (MarketInfo yapısının uzunluğu veya .hst'de ne varsa).

6. Yazarın Zaman[] hücresine yazmak için zaman modellemesini tamamen kaldırdı. Aynı nedenle, ana while döngüsünde TimeLocal() denetimi yoktur, yalnızca TimeCurrent() vardır.

7. Kodu optimize etmek için başka ne önerirsiniz?

4. paragraftan, göstergeyi yaptığınız anlaşılmalıdır, ardından aşağıdaki eylemler net değildir:

 ArrayResize (bid, 1 ); //урезаем и обнуляем использованные массивы
ArrayResize (ask, 1 );

Büyük olasılıkla ArrayInitialize() uygun mu?!

Ve büyük olasılıkla, gösterge dizilerini kullanmayı bırakmanız gerekir.

 
TarasBY :

Büyük olasılıkla ArrayInitialize() uygundur?!

ArrayInitialize(sorun, EMPTY_VALUE ); demek istiyorsun Düşünmedim. Neden kesmeye başladım, böyle bir durumdan korktum:

(a, b, c)//saniyede üç tıklamadan sonra gelen değerler (harika ama varsayalım).

ArrayInitialize(ask, 0);//olacak (0, 0, 0)

FileWriteDouble (el1e, sor[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Kapat[]

- 0, Kapat hücresine girecek, bu nedenle, bunun olmaması için boyutu yeniden beyan ediyorum. ArrayInitialize (sorun, EMPTY_VALUE); kontrolü çalıştırın.

TarasBY :

gösterge dizilerinin kullanımından vazgeçilmelidir.

Dinamikler, buna bayıldım. Daha az talimat, daha az işlemci döngüsü. Tam orada, teorik olarak mümkün olan herhangi bir kuyuda 500 milisaniyelik bir işlem gerekiyor... içeride kalmak.

 
Manüel işlem yapmak için pencereyi arayarak danışmandaki gönder emri ve kapanış emrini değiştirmenin ve bu pencereden piyasaya girmenin mümkün olup olmadığını kim bilir, bu, kullanımına izin vermeyen brokerler için gereklidir. danışmanlar
 
gyfto :

ArrayInitialize(sor, EMPTY_VALUE); demek istiyorsun Düşünmedim. Neden kesmeye başladım, böyle bir durumdan korktum:

(a, b, c)//saniyede üç tıklamadan sonra gelen değerler (harika, ama varsayalım).

ArrayInitialize(ask, 0);//olacak (0, 0, 0)

FileWriteDouble (el1e, sor[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Kapat[]

- 0, Kapat hücresine girecek, bu nedenle, bunun olmaması için boyutu yeniden beyan ediyorum. ArrayInitialize (sorun, EMPTY_VALUE); kontrolü çalıştırın.


Dinamikler, buna bayıldım. Daha az talimat, daha az işlemci döngüsü. Tam orada, teorik olarak mümkün olan herhangi bir kuyuda 500 milisaniyelik bir işlem gerekiyor... içeride kalmak.

Bundan hiç bahsetmiyorum: bir şey bana gösterge dizisini azaltamayacağınızı söylüyor. Ek olarak, böyle bir dizide boş hücreler varsa, o zaman HER ŞEY orada bir değer vardır: 0 veya EMPTY_VALUE ve sonra bu hesaplamalarda ne elde edersiniz:

bid[ ArrayMaximum (bid)];
ask[ ArrayMinimum (ask)];
Ve genel mantığa göre: Tüm kene koleksiyonunu bir döngüde çalıştırır ve zamanı ayrı olarak kontrol eder ve "yeni çubuk" için zaman geçer geçmez bir dosyaya yazar, sıfırlar ve keser. çalışan diziler
 
ex_kalibur :
Manüel işlem yapmak için pencereyi arayarak danışmandaki gönder emri ve kapanış emrini değiştirmenin ve bu pencereden piyasaya girmenin mümkün olup olmadığını kim bilir, bu, kullanımına izin vermeyen brokerler için gereklidir. danışmanlar
Expert Advisor'ın "Özellikler" penceresi -> "Genel" sekmesi -> "Otomatik ticaret" -> "Manuel onay" kutusunu işaretleyin - Başka bir yol bilmiyorum.
 
TarasBY :

Ve genel mantığa göre: Tüm kene koleksiyonunu bir döngüde çalıştırır ve zamanı ayrı olarak kontrol eder ve "yeni çubuk" için zaman geçer geçmez bir dosyaya yazar, sıfırlar ve keser. çalışan diziler


Garip... Bende... Tek şey, zamanın kene toplama döngüsünün kendisinde kontrol edilmesi ve kene kopyası olmadığı kadar çok kez çizilene kadar çalışma düzeninin kesilmemesidir. saniye eksi bir keneler. Bir saniye geçti - yeni bir onay işareti çizilir, iki - önceki onay işaretinin bir kopyası ve yeni bir onay işareti, önceki onay işaretinin üç - iki kopyası ve yeni bir onay işareti vb. Bir önceki onay işaretinin kopyaları yerine, Kapat seviyesinde bir tire çizebilirsiniz; bu seçenek kodda yorumlanmıştır.
 
gyfto :

Garip... Bende... Tek şey, zamanın kene toplama döngüsünün kendisinde kontrol edilmesi ve kene kopyası olmadığı kadar çok kez çizilene kadar çalışma düzeninin kesilmemesidir. saniye eksi bir keneler. Bir saniye geçti - yeni bir onay işareti çizilir, iki - önceki onay işaretinin bir kopyası ve yeni bir onay işareti, önceki onay işaretinin üç - iki kopyası ve yeni bir onay işareti vb. Bir önceki onay işaretinin kopyaları yerine, Kapat seviyesinde bir tire çizebilirsiniz; bu seçenek kodda yorumlanmıştır.

Farklı döngülerden bahsediyoruz. Bundan bahsediyorum:

     while (! IsStopped () && IsExpertEnabled())
    {
         //---- Сбор тиков
    }
 
Biri bana ondalık noktadan sonra sıfırları nasıl kaldıracağımı söyleyebilir mi? Nedense 4 ondalık basamağım var. İşte kod. string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
 
Demon2057 :
Biri bana ondalık noktadan sonra sıfırları nasıl kaldıracağımı söyleyebilir mi? Nedense 4 ondalık basamağım var. İşte kod. string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
https://docs.mql4.com/en/strings/StringSubstr
 

Bana neyi yanlış yaptığımı söyle...

0.20130429164459 (anlam 2013.04.29 16:44:59) biçiminde bir tarih içermesi için double türünde bir değişkene ihtiyacım var

Danışman kodunun bir kısmı:

 #include <stdlib.mqh>
bool once= false ;
int start()
  {
   if (once== false )
     {
     double DTM; // дата и время в формате 0,20130429164459
     int YY=TimeYear(   TimeCurrent ());   // Year
     int MN=TimeMonth(   TimeCurrent ());   // Month         
     int DD=TimeDay(     TimeCurrent ());   // Day
     int HH=TimeHour(   TimeCurrent ());   // Hour         
     int MM=TimeMinute( TimeCurrent ());   // Minute
     int SS=TimeSeconds( TimeCurrent ());   // Second
    DTM = YY* 0.0001 +MN* 0.000001 +DD* 0.00000001 +HH* 0.0000000001 +MM* 0.000000000001 +SS;
    
   Alert ( "Значение переменной DTM с 06 знаками равно " , DoubleToStrMorePrecision(DTM, 6 ));
   Alert ( "Значение переменной DTM с 07 знаками равно " , DoubleToStrMorePrecision(DTM, 7 ));
   Alert ( "Значение переменной DTM с 08 знаками равно " , DoubleToStrMorePrecision(DTM, 8 ));
   Alert ( "Значение переменной DTM с 09 знаками равно " , DoubleToStrMorePrecision(DTM, 9 ));
   Alert ( "Значение переменной DTM с 10 знаками равно " , DoubleToStrMorePrecision(DTM, 10 ));
   Alert ( "Значение переменной DTM с 11 знаками равно " , DoubleToStrMorePrecision(DTM, 11 ));
   Alert ( "Значение переменной DTM с 12 знаками равно " , DoubleToStrMorePrecision(DTM, 12 ));
   Alert ( "Значение переменной DTM с 13 знаками равно " , DoubleToStrMorePrecision(DTM, 13 ));
   Alert ( "Значение переменной DTM с 14 знаками равно " , DoubleToStrMorePrecision(DTM, 14 ));
   Alert ( "Значение переменной DTM с 15 знаками равно " , DoubleToStrMorePrecision(DTM, 15 ));
   once= true ;
      }
   return ( 0 );
  }

Precision 12,13 ve 14 için olay günlüğü doğru sonucu vermiyor, fotoğrafa bakın