"MQL5 Programlama Temelleri: Terminalin Global Değişkenleri" makalesi için tartışma

 

Yeni makale MQL5 Programlama Temelleri: Terminalin Global Değişkenleri yayınlandı:

Bu makale, terminal global değişkenleriyle çalışmayı kolaylaştıran nesneler oluşturmak için MQL5 dilinin nesne yönelimli imkanlarını vurgulamaktadır. Pratik bir örnek olarak, genel değişkenlerin program aşamalarının uygulanması için kontrol noktaları olarak kullanıldığı bir durumu ele alıyorum.

Tam global değişkenler için olan benzer bir test sonucu Şekil 3'te sunulmuştur. Oluşturulmaları çok uzun sürmez.

Bunun nedeni, bu değişkenlerin Profiles klasöründeki diskte bulunan gvariables.dat dosyasına kaydedilmesidir.

Şek.3. Tam global değişkenler oluşturmak için harcanan zaman

Şek.3. Tam global değişkenler oluşturmak için harcanan zaman

Bu kadar çok global değişken yaratmaya gerek olduğunu düşünmüyorum. Bu değerlendirmeyi sırf meraktan yaptım.

Bir sonraki pasajda bir dizi global değişkenle çalışacağız.

Yazar: Denis Kirichenko

 

işlevlerini daha iyi anlamak amacıyla bu makaleyi okudum. Global bir değişken oluşturmak veya değiştirmek ticaret ortamını nasıl etkileyecek?

Global değişkenlerin sayısal değerinin neyi temsil ettiğini açıklayabilir misiniz?

Bir süredir terminalin global değişkenlerini araştırıyor ve anlamaya çalışıyorum, ancak henüz kullanımlarını ve etkilerini anlamadım. Mümkünse bana global bir değişken oluşturmanın yatırım hesabımın bakiyesi üzerinde nasıl olumlu bir sonuç doğurabileceğine dair basit bir örnek verebilir misiniz?

Teşekkür ederim.

Saygılarımla,

Dale.

 
### Varsayım - Uygulamak istediğiniz şey

Lütfen öncelikle kullanılacak kütüphane dosyası 2'yi aşağıdaki linkten kontrol ediniz.



① Ödev:

MetaQuotes tarafından sağlanan bir döviz ticaret aracı olan MT4 / MT5'te harici txt dosyaları için global değişkenler (genellikle global değişkenler olarak adlandırılır) yazmak ve okumak istiyorum.


Durum:

Bunu aşağıdaki referans sayfasında açıklanan CGlobalVar.mqh ve CGlobalVarList.mqh sınıflarını kullanarak uygulamak istiyorum.

(Özellikle, CGLobalVarList sınıfının Save () / Load () yöntemini kullanarak küresel bir değişkenin yazılmasını / okunmasını gerçekleştirir)

Temel olarak Windows API'sini kullanmayın (HANDLE CeateFile W (), vb.). Д.).


③ İşlem dosyası depolama konumu:

Hedef dosyanın varsayılan konumu bu sınıfın belirtimini izler

/ Dosyalar

veya

FileOpen () işlevine argüman olarak FILE_COMMON belirtildiğinde saklanır

C: \ { User \ User-Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \ File

Ve bir tanesi.


④ Oluşturulan dosyalar:

Deneysel örnekler olarak iki basit komut dosyası

WriteGlobalParameters.mq4

и

ReadGlobalParameters.mq4.

Tarafından oluşturulmuştur.


açıklamalar

① Eğer amaç sadece global bir değişkeni başka bir terminal ile paylaşmaksa, paylaşımlı bellek kullanma yöntemini vb. düşünebilirsiniz. Ancak, bu sefer sadece harici txt dosyasını kullanan yöntemi düşünün.


② Dışa aktarma tarafında dosya (WriteGlobalParamaeters.mq 4) için, yerleşik MQL fonksiyonları GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime () kullanılarak, Save (HANDLE) kullanılmadan WriteFile () fonksiyonu kullanılarak yazılır (↓)

For (int i = GlobalVariablesTotal () - 1; i> = 0; i -) {

string gName = GlobalVariableName (i);

if (this.CheckGlobalVar (gName)) continue;

double gValue = GlobalVariableGet (gName);

datetime gTime = GlobalVariableTime (gName);

WriteFile (hFile, gName, gValue, gTime);

}, Değişkenlerin listesini belirtilen dizindeki bir txt dosyasına yazmak mümkündü.

Ancak, yukarıdaki GlobalVariable fonksiyon grubu durumunda, yazılabilse bile, global okuma ve terminal değişkenleri listesine eklenemez, bu nedenle dışarıda bırakılır.


#### Karşılaşılan sorunlar - Hata mesajı

WriteGlobalParameters.mq 4 Taraf:

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit reason 0

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: Dosya kaydetme hatası

2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: İşaretçi oluşturulurken hata oluştu


ReadGlobalParameters.mq 4 Taraf:

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: belirsiz neden 0

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: Pointer oluşturma hatası


* Yukarıdaki hata mesajından

İşaretçi spesifikasyonundaki kusurlar ve yetersiz dosya işlemi nedeniyle amaçlanan işlemin başarısız olduğu açıktır,

Aşağıdaki kodda sorunun nerede olduğu bilinmediğinden, bu noktadan bahsetmek istiyorum (belirsiz neden 0'ın yanı sıra)


```MQL4/MQL5.

WriteGlobalParameters.mq4>

//+------------------------------------------------------------------+

//| WriteGlobalParameters.mq4 |

//| Telif Hakkı 2018, MetaQuotes Software Corp. | |

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Telif Hakkı 2018, MetaQuotes Software Corp."

#property link"https://www.mql5.com"

#property version "1.00"

#include <Arrays\List.mqh>

#include <CGlobalVar.mqh>

#include <CGlobalVarList.mqh>

//+------------------------------------------------------------------+

//| Senaryo programı başlatma işlevi |

//+------------------------------------------------------------------+

void OnStart(){

//Dosya Adınız

string FileName="Write";

string FileType="txt";

string file=FileName+". "+FileType;


//İşaretçi

CGlobalVarList *list = new CGlobalVarList;

if(liste!=NULL){

Print("Pointer Oluşturma Hatası");

}


//Handle

int hDosya;

hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!list.Save(hFile)){

Print("Dosya Kaydetme Hatası");

listeyi sil;

FileClose(hFile);

}

//Kapat

FileClose(hFile);

}

//İşaretçiyi Serbest Bırak

listeyi sil;

}

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

ReadGlobalParameters.mq4>

//+------------------------------------------------------------------+

//| ReadGlobalParameters.mq4 |

//| Telif Hakkı 2018, MetaQuotes Software Corp. | |

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Telif Hakkı 2018, MetaQuotes Software Corp."

#property link"https://www.mql5.com"

#property version "1.00"

#include <Arrays\List.mqh>

#include <CGlobalVar.mqh>

#include <CGlobalVarList.mqh>

//+------------------------------------------------------------------+

//| Senaryo programı başlatma işlevi |

//+------------------------------------------------------------------+

void OnStart(){

//Dosya Adınız

string FileName="Read";

string FileType="txt";

string file=FileName+". "+FileType;


//İşaretçi

CGlobalVarList *list = new CGlobalVarList;

if(liste!=NULL){

Print("Pointer Oluşturma Hatası");

}


//Handle

int hDosya;

hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!liste.Load(hFile)){

Print("Dosya Yükleme Hatası");

listeyi sil;

FileClose(hFile);

}

//Kapat

FileClose(hFile);

}

//İşaretçiyi Serbest Bırak

listeyi sil;

}


### Denedim

起動 MT 4'ü etkinleştirin ve terminaldeki global değişken listesine rastgele isimler ve sayısal değerler (Coco'da kolayca 0.0 veya 1.0) kaydedin.

(Kayıt sırasında otomatik olarak ayarlandığı için saat ayarlanmamıştır)


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

İlk olarak Write GlobalParameters.mq4 tarafından ---


① WriteGlobalParameters.mq4 ayarı ⓪ ile grafiğe uygulanır.

→ Eğer doğru çalışıyorsa, dosya yukarıda belirtilen dizinde oluşturulur ve global değişken bilgileri girilmelidir.


② Dizini kontrol ederseniz (C: \ User \ User - Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \),

Belirtilen "Write.txt" oluşturuldu, ancak dosya boyutu 0 kilobayt.

→ Açtığımda tabii ki global değişkenin adı ve değeri girilmemişti.


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

Sonraki ReadGlobalParameters.mq 4 tarafında ---


③ 2 ile aynı dizinde rastgele bir isim ve sayısal değere sahip global bir değişkeni okumak için bir "Read.txt" dosyası oluşturdum

(İki tür isim/numara/zaman damgası oluşturduk ve test ettik, bölünmüş (belirtilmemiş) ve bölünmüş sekme (FileOpen'da "\ t" belirtilerek ())))


④ ①'a benzer şekilde, grafiğe ReadGlobalParameters.mq4 uygulasanız bile, yukarıdaki hata mesajı ve terminaldeki global değişkenler listesinin açılması da boştu.


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

※ açıklamalar

Önlem olarak, FileOpen () işlevi için varsayılan olarak ayarlanan FILE_CSV, FILE_UNICODE, FILE_BIN ve FILE_ANSI ile aynı deneyi yaptık, ancak sonuç değişmedi.

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
The Synchronized Charts script allows comparing bars of different symbols or different periods of the same symbol. Attach the script to a chart and move bars or change the scale, all opened chart will move synchronously with the current one. The bars on different charts aligned to the border according to their open time. CreateGridOrdersTune A...
 

Artık Global Değişkenler yalnızca çifttir.

CMap nesnesini anahtar: değer çifti gibi öğelerle kullanmak isteyebilirsiniz.

Veya Array veya liste kullanın ..... Veya Global Değişken olarak Array veya liste kullanın.


Veya Global Değişken olarak bir belleğe işaret eden bir işaretçi kullanın .