नमस्ते दोस्तों! आज हम बात करेंगे एक ऐसे Expert Advisor के बारे में, जो MetaTrader 5 में काम करता है। यह EA हर.Tick पर Bid और Ask कीमतों के मान को प्राप्त करता है और उन्हें 'prices' नाम के एक संरचना में संग्रहित करता है। हर बीसवें.Tick पर, यह डेटा को एक फ़ाइल में लिखता है, जो आपके स्थानीय टर्मिनल फ़ोल्डर के उपडायरेक्टरी में स्टोर होता है।
आप टर्मिनल के स्थानीय फ़ोल्डर का स्थान जानने के लिए TerminalInfoString() फ़ंक्शन का उपयोग कर सकते हैं।
PrintFormat("टर्मिनल के स्थानीय फ़ोल्डर का पथ: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
जब आप Expert Advisor को चार्ट से हटाते हैं, तो यह फ़ाइल में लिखे हुए डेटा को सेव करता है और फिर काम समाप्त कर देता है।
कोड:
//--- इनपुट पैरामीटर input string InpFileName="data.bin"; input string InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+ //| कीमतों के डेटा को स्टोर करने के लिए संरचना | //+------------------------------------------------------------------+ struct prices { datetime date; // डेटा double bid; // Bid कीमत double ask; // Ask कीमत }; //--- ग्लोबल वेरिएबल्स int count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+ //| Expert का इनिशियलाइजेशन फ़ंक्शन | //+------------------------------------------------------------------+ int OnInit() { //--- ऐरे के लिए मेमोरी आवंटित करें ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert का डिइनिशियलाइजेशन फ़ंक्शन | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- लिखी हुई शेष काउंट को फ़ाइल में लिखें WriteData(count); } //+------------------------------------------------------------------+ //| Expert टिक्स फ़ंक्शन | //+------------------------------------------------------------------+ void OnTick() { //--- डेटा को ऐरे में सेव करें arr[count].date=TimeCurrent(); arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- वर्तमान डेटा दिखाएं Print("तारीख = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask); //--- काउंटर बढ़ाएं count++; //--- यदि ऐरे भरा है, तो डेटा को फ़ाइल में लिखें और इसे ज़ीरो करें if(count==size) { WriteData(size); count=0; } } //+------------------------------------------------------------------+ //| ऐरे के n तत्वों को फ़ाइल में लिखें | //+------------------------------------------------------------------+ void WriteData(const int n) { //--- फ़ाइल खोलें ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- फ़ाइल के अंत में ऐरे डेटा लिखें FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- फ़ाइल बंद करें FileClose(handle); } else Print("फ़ाइल खोलने में विफल, त्रुटि ",GetLastError()); }
टिप्पणी 0