//+------------------------------------------------------------------+ //| Demo_FileWriteDouble.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- script çalıştığında giriş parametrelerinin penceresini göster #property script_show_inputs //--- terminalden veri alımı için parametreler input string InpSymbolName="EURJPY"; // döviz çifti input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_M15; // zaman aralığı input int InpMAPeriod=10; // düzleştirme periyodu input int InpMAShift=0; // gösterge kaydırma değeri input ENUM_MA_METHOD InpMAMethod=MODE_SMA; // düzleştirme tipi input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // fiyat tipi input datetime InpDateStart=D'2013.01.01 00:00'; // veri kopyalama için başlangıç tarihi //--- verinin dosyaya yazılması için gereken parametreler input string InpFileName="MA.csv"; // dosya ismi input string InpDirectoryName="Data"; // dizin ismi //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); double ma_buff[]; datetime time_buff[]; int size; //--- MA göstergesinin tanıtıcı değerini al ResetLastError(); int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice); if(ma_handle==INVALID_HANDLE) { //--- gösterge tanıtıcı değeri alınamadı PrintFormat("Gösterge tanıtıcı değerinin alınması hatası. Hata kodu = %d",GetLastError()); return; } //--- gösterge değerleri hesaplanana kadar döngü içinde olunacak while(BarsCalculated(ma_handle)==-1) Sleep(20); // göstergenin değerlerinin hesaplanabilmesiiçin bir duraklama PrintFormat("gösterge değerleri, %s'den başlayarak dosyaya yazılacak",TimeToString(InpDateStart)); //--- gösterge değerlerini kopyala ResetLastError(); if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1) { PrintFormat("Gösterge değerlerinin kopyalanması başarısız oldu. Hata kodu = %d",GetLastError()); return; } //--- uygun çubukların zamanlarını kopyala ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("Zaman değerleri kopyalanamadı. Hata kodu = %d",GetLastError()); return; } //--- tampon büyüklüğünü al size=ArraySize(ma_buff); //--- serbest bellek, gösterge tarafından işgal edildi IndicatorRelease(ma_handle); //--- gösterge değerlerini yazmak için dosyayı aç (dosya yoksa, otomatik olarak oluşturulacak) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s dosyası yazma için hazır",InpFileName); PrintFormat("Dosya yolu: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- önce, veri örneğinin büyüklüğünü yaz FileWriteDouble(file_handle,(double)size); //--- göstergenin zamanını ve değerini dosyaya yaz for(int i=0;i<size;i++) { FileWriteDouble(file_handle,(double)time_buff[i]); FileWriteDouble(file_handle,ma_buff[i]); } //--- dosyayı kapat FileClose(file_handle); PrintFormat("Veri yazıldı, %s dosyası kapatıldı",InpFileName); } else PrintFormat("%s dosyası açılamadı, Hata kodu = %d",InpFileName,GetLastError()); } |