Спасибо за код. Мы проверили, действительно деинициализация не проходила до конца при принудительной остановке тестирования.
Исправление будет в ближайшем билде. Спасибо.
Исправление будет в ближайшем билде. Спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Билд терминала 1.9.9 (07 ноября 2006)
Код эксперта для проверки:
//+------------------------------------------------------------------+ //| DeinitTestExpert.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- input parameters extern int N_Bars = 10; //---- arrays double MySymbol_Open[]; double MySymbol_Close[]; double MySymbol_High[]; double MySymbol_Low[]; double MySymbol_Volume[]; //---- variables string MySymbol_FileName; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { string sym_period; //---- if (N_Bars > Bars) { N_Bars = Bars; } // sym_period = DoubleToStr(Period(), 0); MySymbol_FileName = Symbol() + "_" + sym_period + "_" + N_Bars + ".csv"; // Print("(1) Init: FileName ", MySymbol_FileName); // ArrayResize(MySymbol_Open, N_Bars); ArrayInitialize(MySymbol_Open, 0.0); // ArrayResize(MySymbol_Close, N_Bars); ArrayInitialize(MySymbol_Close, 0.0); // ArrayResize(MySymbol_High, N_Bars); ArrayInitialize(MySymbol_High, 0.0); // ArrayResize(MySymbol_Low, N_Bars); ArrayInitialize(MySymbol_Low, 0.0); // ArrayResize(MySymbol_Volume, N_Bars); ArrayInitialize(MySymbol_Volume, 0.0); // Print("(2) Init: Arrays ", N_Bars, " prepared."); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { int i, file_handle; //---- if (IsStopped() == true) { Print("(1) Deinit: Expert stopped: ", TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS)); } // file_handle = FileOpen(MySymbol_FileName, FILE_CSV | FILE_WRITE); // Print("(2) Denit: Try to write file ", MySymbol_FileName); // for (i = N_Bars - 1; i >= 1; i--) { FileWrite(file_handle, i); FileWrite(file_handle, MySymbol_Open[i]); FileWrite(file_handle, MySymbol_High[i]); FileWrite(file_handle, MySymbol_Close[i]); FileWrite(file_handle, MySymbol_Low[i]); FileWrite(file_handle, MySymbol_Volume[i]); } FileClose(file_handle); // Print("(3) Deinit: File ", MySymbol_FileName, " successfully written."); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int i, j, k, l, m, n; static bool run_once = false; //---- if (run_once == false) { for (i = N_Bars - 1; i >= 1; i--) { MySymbol_Open[i] = Open[i]; MySymbol_Close[i] = Close[i]; MySymbol_High[i] = High[i]; MySymbol_Low[i] = Low[i]; MySymbol_Volume[i] = Volume[i]; } Print("(0) Start: Arrays ", N_Bars, " bars completed."); run_once = true; } // for tester only: some slow abracadabra, // tuned by N_Bars extern parameter if (IsTesting() == true) { for (i = N_Bars - 1; i >= 1; i--) { for (j = i; j >= 1; j--) { for (k = j; k >= 1; k--) { for (l = k; l >= 1; l--) { for (m = l; m >= 1; m--) { for (n = m; n >= 1; n--) { // empty operator } } } } } } } //---- return(0); } //+------------------------------------------------------------------+Результаты его работы:
Тестер: естественное завершение процесса (читается снизу вверх):
2006.11.10 22:46:58 2005.05.31 23:59 DeinitTestExpert USDCHF,M15: (3) Deinit: File USDCHF_15_10.csv successfully written.
2006.11.10 22:46:58 2005.05.31 23:59 DeinitTestExpert USDCHF,M15: (2) Denit: Try to write file USDCHF_15_10.csv
2006.11.10 22:46:36 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (0) Start: Arrays 10 bars completed.
2006.11.10 22:46:36 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (2) Init: Arrays 10 prepared.
2006.11.10 22:46:36 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (1) Init: FileName USDCHF_15_10.csv
2006.11.10 22:46:36 DeinitTestExpert inputs: N_Bars=10;
2006.11.10 22:46:23 DeinitTestExpert USDCHF,M15: loaded successfully
Тестер: принудительное завершение по кнопке "Стоп" (читается снизу вверх):
2006.11.10 22:54:05 2005.05.10 21:31 DeinitTestExpert USDCHF,M15: (2) Denit: Try to write file USDCHF_15_10.csv
2006.11.10 22:53:57 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (0) Start: Arrays 10 bars completed.
2006.11.10 22:53:57 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (2) Init: Arrays 10 prepared.
2006.11.10 22:53:57 2005.05.02 00:00 DeinitTestExpert USDCHF,M15: (1) Init: FileName USDCHF_15_10.csv
2006.11.10 22:53:57 DeinitTestExpert inputs: N_Bars=10;
2006.11.10 22:53:42 DeinitTestExpert USDCHF,M15: loaded successfully
Демо: Эксперт прицеплен к демо-графику, отработал несколько тиков, затем отцеплен (читается сверху вниз):
22:53:35 Compiling 'DeinitTestExpert'
23:31:37 DeinitTestExpert USDCHF,M15: loaded successfully
23:31:37 DeinitTestExpert USDCHF,M15 inputs: N_Bars=10;
23:31:37 DeinitTestExpert USDCHF,M15: (1) Init: FileName USDCHF_15_10.csv
23:31:37 DeinitTestExpert USDCHF,M15: (2) Init: Arrays 10 prepared.
23:31:37 DeinitTestExpert USDCHF,M15: initialized
23:32:45 DeinitTestExpert USDCHF,M15: (0) Start: Arrays 10 bars completed.
23:32:45 DeinitTestExpert USDCHF,M15: (1) Deinit: Expert stopped: 2006.11.10 21:32:50
23:32:45 DeinitTestExpert USDCHF,M15: (2) Denit: Try to write file USDCHF_15_10.csv
23:32:45 DeinitTestExpert USDCHF,M15: (3) Deinit: File USDCHF_15_10.csv successfully written.
23:32:45 DeinitTestExpert USDCHF,M15: deinitialized
23:32:45 DeinitTestExpert USDCHF,M15: removed
Видно, что при естественном завершении процесса тестирования (и вообще при тестировании) некорректно отрабатывает функция IsStopped(), а при останове по кнопке "Стоп" некорректно завершается функция deinit() - запись в файл не происходит. На графике все функции срабатывают гладко, как и было задумано.
(Примечание: для теста лучше брать данные не более, чем за месяц, иначе придется слишком долго
ждать естественного завершения процесса).