MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 674

 

Sevgili Bilenler!

Umarım doğru soruyu soruyorumdur!

Soru şudur: Aşağıdaki koda genişleyecek bir yapı tanımlamak için #define kullanmak mümkün müdür:

if(a) printf("%s(%04d)", __FUNCTION__, __LINE__) +printf("%s", _Symbol);

Bu anlamak içindir... Doğru yapı farklı olabilir. İdeal olarak, eğer koşul eşleşirse, çıktı satırının başlangıcındaki herhangi bir printf() öğesinin "Fonksiyon (işlevdeki satır)" yapısının öneki dizesiyle yazdırılması için bir çözüm bulmak istiyorum. Bunların hepsi yazılı talimatları kısaltmak için

Ancak kırmızı ile vurgulanan yapının bununla değiştirilmesini istiyorum (benzer):

#define P(a) if(variable>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)

İnternette biraz benzer bir şey buldum ama sınıflarla çalışmadım, bu yüzden henüz çalışma kodları üzerinde çalışamıyorum. Alt yapıyı formda uygulamaya çalıştım

P(3)+printf("%s(%s) Doğruluk=%d", Sembol, (Komut==0?"Satın Al":"Sat"), Doğruluk);

ancak koda bu tür herhangi bir giriş 'Yazdır' hatasıyla sonuçlanır - 'void' türünün ifadesi yasa dışıdır ...

 

Merhaba!

Lütfen aradaki farkı açıklayın

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect hatası %d", GetLastError() );return;}

ve

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect hatası %d",GetLastError());return;}

teşekkür etmek!

 
ski1973 :

Merhaba!

Lütfen aradaki farkı açıklayın

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect hatası %d",GetLastError());return;}

ve

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect hatası %d",GetLastError());return;}

teşekkür etmek!

Mantıksal bir fark yoktur. Tek fark, bu mantıksal karşılaştırmayı yazmaktır.

İşaret "!" değil". Yani, if(!Select()), if(Select()==false) ile aynıdır. Rusça'da şöyle görünür: if(NOT Selected()).

Bir boole değişkeninin değerini hızlı bir şekilde "tersine çevirebilirsiniz":

 bool var = true ;
Print( "1. var=" ,( string ) var );
var =! var ;
Print( "2. var=" ,( string ) var );
 

Başka bir sorum daha var. Aşağıdaki örnek bir programdır.

çift Lot=0.01;

int kayma=30;

int Subr1()

{

int sonuç=-1;

int_result=OrderSend(_symbol,OP_BUY,Lots,slippage,0,0);

if(int_res<0){PrintFormat("OrderSend error = ",GetError());}

int_result döndür;

}

geçersiz OnTick()

{

int sayı=-10;
if(OrdersTotal()==0)numer=Subr1();

if(OrdersTotal()>0)Subr2(sayı);

dönüş;

}

geçersiz Subr2(int sıra)

{

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect hatası %d",GetLastError());return;} else PrintFormat("Tamam, OrderTicket = ",OrderTicket());

}

Cevap: OrderSelect hatası 4051. Onu SELECT_BY_POS ile değiştirirsem, OrderSelect hatası 1 olur. Tepki, strateji test cihazı için aynıdır ve "gerçek verilerde çalıştır". SELECT_BY_TICKET ile durum için MODE_TRADES'i kaldırmaya çalıştım: fark yok. Sorun nedir ve nasıl düzeltilir. Teşekkür ederim!

 
ski1973 :

Cevap: OrderSelect hatası 4051. Onu SELECT_BY_POS ile değiştirirsem, OrderSelect hatası 1 olur. Tepki, strateji test cihazı için aynıdır ve "gerçek verilerde çalıştır". SELECT_BY_TICKET ile durum için MODE_TRADES'i kaldırmaya çalıştım: fark yok. Sorun nedir ve nasıl düzeltilir. Teşekkür ederim!

SELECT_BY_POS, siparişler listesinde ve yapınızda "siparişe göre" bir sipariş seçmektir:

 void Subr2( int order)
{
if (! OrderSelect (order, SELECT_BY_TICKET , MODE_TRADES )){ PrintFormat (" OrderSelect error %d", GetLastError ()); return ;} else PrintFormat ("Ok, OrderTicket = ", OrderTicket ());
}

Sırasıyla sipariş sayısı olan bir sipariş seçmeye çalışıyorsunuz ... ve buradaki bilet numarasını kullanıyorsunuz ve sadece 1 siparişiniz var ve bilet 10023444 numaralı ... ne olmuş? burada 1'den 2.3'e kadar bir sayıya ihtiyacınız var.. peki, piyasada kaç emriniz var,.. 0,1,2'den sayı düzeltildi... - bir dizideki gibi numaralandırma 0'dan başlar ve OrdersTotal'a kadar ()-1

SELECT_BY_TICKET çalışmalıdır, ancak bir bilet numaranız olana kadar, yani. bir piyasa emriniz var ve bir emir göndermek için daha yüksek bir çekiniz var ve eğer emir gönderilmezse, o zaman bilet = -1 olur !!! -1

genel olarak, siparişlerle çalışma tasarımınız doğru değil, MQL okumaya karar verirseniz, işte siparişlerle çalışmak için hazır örnekler https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko :

Sen diziler hakkında ve sen forex hakkında. Yine de paradoks!

Ve aptal, MT4/MT4'teki tüm temel dizilerin arabelleğe alındığını anlar.

MT4/MT5'teki programcılar, kullanıcıların temeldeki dizilerle çalışmasına izin verecek düzeyde değildir.

Ayrıca, MT4/MT5'teki temel dizilerin kendi uzantıları bile vardır (.hts veya .hss - tam olarak hatırlamıyorum ama buna benzer bir şey).

Yani terminale metin formatında (.txt uzantılı) değil, kendi formatlarında ulaşırlar.

Ve zaten MT4/MT5'te, temel dizilerin kodu çözülür ve seçilen zaman çerçevelerinin dizilerine (dakika, beş dakika, 15 dakika, vb.) yeniden hesaplanır ve ancak bundan sonra çoğaltılır ve arabelleğe alınır.

Neden tamponlanırlar?

Karşılaştırma için. Veri kaybını önlemek için. Bu dizilerden biri sürekli olarak yeniden hesaplanır (zaman zaman) ve ikincisi (ilkinden kopyalanır) kullanıcı verilerimize kopyalarken kullanırız.

Yani, kullanıcılara veri sağlama prosedürü oldukça karmaşıktır.

Eğer ilgileniyorsanız, bu sizin için diziler hakkında.

Bu arada, hem Android'de hem de Windows'ta, temel MT4/MT5 dizileri aynı uzantıya sahiptir.

-------------------------------------------------- -------------------------------------------------- ----------------------------

DYNAMIC verilerinin üçüncü taraf kaynaklardan MT4/MT5'e içe aktarılmasına gelince, anladığım kadarıyla bu tür bir içe aktarma sağlanmamaktadır.

Yani, C++Builder'da bulunan İstemci/Sunucu prosedürü MT4/MT5'te gözlemlenmez.

-------------------------------------------------- -------------------------------------------------- ----------------------------

Bu prosedürün kütüphanede olup olmayacağını merak ediyorum

http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html

Büyük olasılıkla, elbette, o da olmayacak.

Yani, dinamik dizileri MT4/MT5'e yalnızca standart veri işlemeden otomatik olarak geçecekleri temel biçimde içe aktarmayı deneyebilirsiniz.

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness :

Ve aptal, MT4/MT4'teki tüm temel dizilerin arabelleğe alındığını anlar.

MT4/MT5'teki programcılar, kullanıcıların temeldeki dizilerle çalışmasına izin verecek düzeyde değildir.

Ayrıca, MT4/MT5'teki temel dizilerin kendi uzantıları bile vardır (.hts veya .hss - tam olarak hatırlamıyorum ama buna benzer bir şey).

Yani terminale metin formatında (.txt uzantılı) değil, kendi formatlarında ulaşırlar.

Ve zaten MT4/MT5'te, temel dizilerin kodu çözülür ve seçilen zaman çerçevelerinin dizilerine (dakika, beş dakika, 15 dakika, vb.) yeniden hesaplanır ve ancak bundan sonra çoğaltılır ve arabelleğe alınır.

Neden tamponlanırlar?

Karşılaştırma için. Veri kaybını önlemek için. Bu dizilerden biri sürekli olarak yeniden hesaplanır (zaman zaman) ve ikincisi (ilkinden kopyalanır) kullanıcı verilerimize kopyalarken kullanırız.

Yani, kullanıcılara veri sağlama prosedürü oldukça karmaşıktır.

Eğer ilgileniyorsanız, bu sizin için diziler hakkında.

Bu arada, hem Android'de hem de Windows'ta, temel MT4/MT5 dizileri aynı uzantıya sahiptir.

kafanda öyle bir karmaşa var ki yanından bile geçemiyorsun

MQL'de bir araya yığdığınız şey diziler, dosyalar, zaman serileriyle çalışma ve gösterge arabellekleridir.

Hala tek satırda verdiğim bilgileri sindirmeyi başarırsanız, o zaman yine de düşünce için yiyecek atabilirim: MT4 ve MT5'te tarihsel verilerin depolanması farklı şekillerde düzenlenir, aynı MT4'te kullanıcının erişebileceği .hst dosyaları https://docs .mql4.com/ru/files/fileopenhistory

MT5'te geçmiş dosyalarına doğrudan erişim yoktur, ancak özel sembollerle çalışma vardır https://www.mql5.com/en/docs/customsymbols

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu :

kafanda öyle bir karmaşa var ki yanından bile geçemiyorsun

MQL'de bir araya yığdığınız şey diziler, dosyalar ve gösterge arabellekleridir.

Hala tek satırda verdiğim bilgileri sindirmeyi başarırsanız, o zaman yine de düşünce için yiyecek atabilirim: MT4 ve MT5'te tarihsel verilerin depolanması farklı şekillerde düzenlenir, aynı MT4'te kullanıcının erişebileceği .hst dosyaları https://docs .mql4.com/ru/files/fileopenhistory

MT5'te geçmiş dosyalarına doğrudan erişim yoktur, ancak özel sembollerle çalışma vardır https://www.mql5.com/ru/docs/customsymbols

Yazımda geçmiş dosyaları hakkında tek kelime etmedim.

Yine bir şeyi karıştırdın ve yine KONULARI GEÇTİN.

DİNAMİK veri dizilerinden bahsediyordum. Bu tamamen farklı bir konu. Farkı Hisset.

 
neverness :

Yazımda geçmiş dosyaları hakkında tek kelime etmedim.

Yine bir şeyi karıştırdın ve yine KONULARI GEÇTİN.

Dinamik veri dizilerinden bahsediyordum. Bu tamamen farklı bir konu.

Ayrıca, MT4/MT5'teki temel dizilerin kendi uzantıları bile vardır (.hts veya .hss - tam olarak hatırlamıyorum ama buna benzer bir şey).

tamam yap yap bu forumda kalma amacın belli değil

hiçlik :

DİNAMİK veri dizilerinden bahsediyordum. Bu tamamen farklı bir konu. Farkı Hisset.

hissettim, ayrıca tüm programlama dillerinde dinamik dizilerin sadece dinamik diziler olduğunu ve zaman serilerinin zaman serileri olduğunu ve zaman serileriyle çalışmanın (erişim) bir parçasının dizilerle çalışma olarak düzenlendiğini anlamanız ve anlamanız gerekir...
 
Igor Makanu :

tamam yap yap bu forumda kalma amacın belli değil

Tüm programlama dillerinde dinamik dizilerin sadece dinamik diziler olduğunu ve zaman serilerinin zaman serileri olduğunu ve zaman serileriyle yapılan işin (erişim) bir kısmının dizilerle çalışma olarak düzenlendiğini de anlamanız ve anlamanız gerektiğini hissettim...

Burada terminalde veri üretimi konusu yeterince ayrıntılı olarak ele alınmaktadır:

http://profitraders.com/Python/hstRead.html

Okuyucuların dikkatini bu makalenin tarihsel verilerle ilgili OLMADIĞINA çekmek istiyorum, şurada yer almaktadır: MT4->Servis->Alıntılar Arşivi,

ancak doğrudan, piyasa fiyat tekliflerini alma ve işleme sürecine doğrudan dahil olan, .hst formatındaki terminalin DİNAMİK verileriyle ilgilidir.

-------------------------------------------------- -------------------------------------------

Belki yeterince açıklayamadım. Diğer yazarları okuyun. Umarım daha net hale gelir.

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...