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

 
Chiripaha :

: )))))))) Evet doğru. Tüm suçlamaları kabul ediyorum! - Bunun için tekrar özür dilerim. - Tüm bunlar oldukça gelişmiş (özel egzersizler) maliyetleridir.

yaratıcı, figüratif, şiirsel vb. taraflar - sonuçta, bir kişinin iki yarım küresi vardır: yaratıcı ve rasyonel. Benim hatam, bunu gördüm ve düzeltmedim.

Dolayısıyla tüm iddialarınız adreste ve ben suçluyum.

ama sorun çözülmedi...

Sonunda nasıl çözülür?

Bir şeyi kaçırdığımı düşünüyorsanız, lütfen açıklayın. Geri bildirim tekniğini ("duyabilme" yeteneği için) anlıyorum, ancak henüz bir çözüm görmedim.

İstenen sayı, Double biçiminde, örneğin Ask = 1.20667 değerinde 3. ondalık basamağa yuvarlamadan nasıl elde edilir? - "StrToDouble(DoubleToStr(Ask,3)) = 1.2100 // 1.2100, elde edilen sonuçtur (yani yuvarlar)" gibi bir çözüm işe yaramadı.

Hoşgörü ve anlayışınız için şimdiden teşekkür ederiz.

DoubleToStr(Sor,3) != DoubleToStr(Sor, Rakamlar ) !!! - görülmeliydi.

Ve çözüm dosyadadır (bu bir test betiğidir).

Dosyalar:
test_ind.mq4  2 kb
 
alsu :

Koduna baktım .... kafan çok karışık)))

Neden kene biriktirmemiz gerektiğini tam olarak anlamıyorum, çünkü bellekte saklamamız yeterli (veya mevcut çubuğun HST'de yazılması gerektiğinden saklamamız bile - aksi takdirde grafik güncellenmeyecektir) geçerli çubuk altı TOHLCV numarasıdır ve işaretler geldiğinde bunları gerektiği gibi güncelleyin ve belirtilen koşula göre (TimeCurrent()-O>1) kesme çubukları.

Kodu bu şekilde yeniden işlemeye çalışın, 8 kat azalacaktır, garanti ederim (test edildi :)


Bunun gibi? Algoritmayı yeniden tasarladım, akümülatörü kaldırdım, bir uzmana çevirdim, yükseliş-düşüş eğilimine kene derecelendirmesi ekledim, farklı bir algoritma kullanarak mum kuyrukları ekledim ve her şeyi yorumladım. Henüz kontrol edilecek bir şey yok, hafta sonu kene yok. Hacme gelince - bana öyle geliyor ki FileFlush , aynı zamanda bir arabellekle de çalışıyor. Gelecek için FileSeek ve FileFlush arasına bir şey koymaya yemin ettim ...
Dosyalar:
elz.jp.mq4  23 kb
 
IgRU4ek :

DoubleToStr(Sor,3) != DoubleToStr(Sor, Rakamlar ) !!! - görülmeliydi.

Ve çözüm dosyadadır (bu bir test betiğidir).


Çok teşekkürler.

Mekanizmayı hala anlamıyorum - neden benim sürümümde çalışmadı ve neden "DoubleToStr(Ask,3) != DoubleToStr(Ask, Digits )" - Görünüşe göre, işlevlerin tüm özellikleri referansta açıklanmadı kitap.

İşlevinizi ortadan kaldırdım - çözüm yolunu anladım. Ancak daha "basit" bir çözüm olması gerektiğinden emindim, çünkü bir programlama dilindeki işlevler kümesi, tipik görevleri onlarla çözmeye hizmet eder ve her kullanıcı için bu tipik işlevleri kendi başına yaratmaz. DoubleToStr() işlevinin bu sorunu çözdüğünü saf bir şekilde varsaydım. - O zaman uygulamasının anlamını anlamıyorum (nüansları nelerdir). Bu tür ayrıntılara "ulaşmak" için programcı değil, sıradan bir kullanıcıyım. Bu durumda kreasyon ürünleri ne zaman kullanılır, eğer tüm zaman programlama detaylarına harcanacaktır.

Tekrar teşekkürler. Şimdi hepsini koda koymaya çalışacağım. Umarım her şey çalışır.

 
Chiripaha :

Çok teşekkürler.

Mekanizmayı hala anlamıyorum - neden benim sürümümde çalışmadı ve neden "DoubleToStr(Ask,3) != DoubleToStr(Ask, Digits )" - Görünüşe göre, işlevlerin tüm özellikleri referansta açıklanmadı kitap.

İşlevinizi ortadan kaldırdım - çözüm yolunu anladım. Ancak daha "basit" bir çözüm olması gerektiğinden emindim, çünkü bir programlama dilindeki işlevler kümesi, tipik görevleri onlarla çözmeye hizmet eder ve her kullanıcı için bu tipik işlevleri kendi başına yaratmaz. DoubleToStr() işlevinin bu sorunu çözdüğünü saf bir şekilde varsaydım. - O zaman uygulamasının anlamını anlamıyorum (nüansları nelerdir). Bu tür ayrıntılara "ulaşmak" için programcı değil, sıradan bir kullanıcıyım. Bu durumda kreasyon ürünleri ne zaman kullanılır, eğer tüm zaman programlama detaylarına harcanacaktır.

Tekrar teşekkürler. Şimdi hepsini koda koymaya çalışacağım. Umarım her şey çalışır.

DoubleToStr() bir sayıyı iki aşamada dönüştürür: önce sayıyı (matematik kurallarına göre) istenen işarete yuvarlar ve sonra onu bir dizgeye dönüştürür.
 

Davanız için deneyin

çift x = MathFloor (y*1000)/1000;

 
IgRU4ek :
DoubleToStr() bir sayıyı iki aşamada dönüştürür: önce sayıyı (matematik kurallarına göre) istenen işarete yuvarlar ve sonra onu bir dizgeye dönüştürür.


Açıklamalar için teşekkürler. Tabii ki, bunu bilmiyordum ve bu durumda StrToDouble() üzerinde günah işledim. Ama açıklamanızdan sonra, şimdi ikisinin de yuvarlak olduğunu varsayıyorum :(

Neden yuvarlanmalı - net değil. Çünkü yuvarlama gerekliyse, bu durumda önce k-thread yuvarlama işlevini (gerektiği gibi) kullanmak daha iyidir - aynı Normalleştirme. O zaman yuvarlamalı ve yuvarlamasız her iki olasılık da olacaktır. Ve böylece ekstra yığınlar ortaya çıkıyor. Üstelik, zaten var olan numarayı sadece farklı bir tür haline getirmem gerektiğinde neden toplandığı açık değil. Zaten aldım (sayı), neden ayrıca boyayalım.

 
Roger :

Davanız için deneyin

double x = MathFloor(y*1000)/1000;


Aynen öyle! Güzel karar. Onunla daha önce tanıştım, ama benim durumumda bir şeyi kaçırdım. Çok teşekkür ederim İskender! - Şimdi 2 çözümüm var! : )) ("Prostokvashino" adlı karikatür için)
 

Böyle teorik bir soru. Bir kene açısından kapanış fiyatı , mumdaki son tik için bir teklif mi yoksa bir talep mi? Teklif Kapat[0] olarak yazılırsa, kaydırıcıdaki teklifin dakikalardakiyle aynı olduğunu fark ettim.

Düşünce ve düşünce... Teoride teklif verin...

 
Zhunko :
Birçok hata. Bir örneğe bakıp benzetme ile yapabilir misiniz?


Temelde aynı şey. Anladığım kadarıyla, ders kitabında bununla ilgili hiçbir şey olmamasına rağmen, garip bir şekilde, içerme sadece uzman ve kütüphane arasında bir bağlantı olarak gerekli.

Dahil etme, bir işlevi içe aktarır ve içe aktarılacak işlevleri bildirir. Bildirimler arasına bir işaret konur ;

Burada bir içerme ve bir kitaplık yazdım (bir işlevle, gerçekten, ama bu sadece test amaçlı).

Buraya dahil etme:

 //+------------------------------------------------------------------+
//|                                       HozIncludeToScalper_M1.mqh |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link       ""

#import "Scalper_M1_lbr.ex4"

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA( int typeOfMA);

// Очередная функция

// Очередная функция

// Очередная функция

#import

Tüm gerekli (belirli bir baykuş tarafından kullanılan) işlevler bildirildiğinde, sonuna #import koyarız

İşte kütüphanenin kendisi:

 //+-------------------------------------------------------------------------------------+
//|                                                                  Scalper_M1_lbr.mq4 |
//|                                                                                 hoz |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link       ""
#property library

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA( int typeOfMA)
{
   switch (typeOfMA)
   {
       case 1 :       return ( iMA ( NULL , i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
       case 2 :       return ( iMA ( NULL , i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
       case 3 :       return ( iMA ( NULL , i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}

Derleme bile yapmıyor.

'i_fastMATF' - variable not defined     E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 38)
'i_fastMAPeriod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 50)
'i_fastMAShift' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 66)
'i_fastMAMethod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 81)
'i_fastMAApplied' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 97)
'i_fastMAIndex' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 114)
'i_slowMATF' - variable not defined     E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 38)
'i_slowMAPeriod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 50)
'i_slowMAShift' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 66)
'i_slowMAMethod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 81)
'i_slowMAApplied' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 97)
'i_slowMAIndex' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 114)
'i_filtrMATF' - variable not defined    E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 38)
'i_filtrMAPeriod' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 51)
'i_filtrMAShift' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 68)
'i_filtrMAMethod' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 84)
'i_filtrMAApplied' - variable not defined       E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 101)
'i_filtrMAIndex' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 119)
18 ошибок, 0 предупреждений     

Kitaplığınızda hiçbir şey bildirilmedi ve hata yok, ancak nedense bende var. Fark bulamadım..

 

Viktor, işlevinde çok sayıda değişken var ve hiçbiri bildirilmedi.

Derleyici dedi ki:

değişken tanımlanmadı

Değişken bildirilmedi. Bunlardan 18 tane var.

==============

İşlevin tasarımına bakılırsa, son derece uzmanlaşmıştır. Neden kütüphaneye götürüyorsun? Ayrıca, büyük olasılıkla her çubukta bir döngü içinde çağrılacaktır.

Hız ve optimizasyon hakkında bir şeyler söylediniz. Çok yavaş kod oluşturuyorsunuz. MQL4'te fonksiyonları bir döngüye yerleştirmeye gerek yoktur. Döngüde ne kadar az işlev çağrısı olursa, kod o kadar hızlı çalışır.

==============

Uzun zaman önce, MQL4'te yazmaya başladığımda, ilk para birimi endeks göstergemi yazdım. Dizelerle çalışan fonksiyonlar da var... Tekme, ne oldu... TF'yi değiştirme süresi 5 dakika sürdü.

Sonra oturdu, düşündü, tüm işlevleri ortadan kaldırdı, onları tam döngü bloğunda açtı. Dizelerle çalışma ortadan kaldırıldı, tanımlayıcılarla değiştirildi. Önceden hesaplanabilen ve değişmeyen her şey hesaplandı (optimizasyon). Kodu bir uzmana taşıdım. Sonuç olarak, TF'yi değiştirirken en zor yeniden hesaplama 15 saniyeydi. Sonra hesaplamaları DLL'ye aktardım. Şimdi yaklaşık 5 saniye.

Neden: