Leo59: Объясните пожалуйста, как распихать данные из таблицы (*.csv) в трёх-мерный статический массив. В первом столбце таблицы - индекс по первому измерению массива, Во втором - индекс по второму измерению массива, В третьем и далее столбцах - сами значения по третьему измерению массива.
То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.
void AAA()
{
int Handle; // Файловый описательstring File_Name = "AAA.csv"; // Имя открываемого файлаstring str_1 = ""; // 1 Номер индекса по первому измерениюstring str_2 = ""; // 2 Номер индекса по второму измерениюstring str_3 = ""; // 3 Значениеstring str_4 = ""; // 4 Значениеstring str_5 = ""; // 5 Значение
Handle=FileOpen(File_Name, FILE_READ, ";"); // Открытие файлаwhile(FileIsEnding(Handle)==false) // До тех пор, пока файловый...
{ // ...указатель не в конце файла// Чтение данных из строки до файлового разделителя
str_1 = FileReadString(Handle); // 1 Номер индекса по первому измерению
str_2 = FileReadString(Handle); // 2 Номер индекса по второму измерению
str_3 = FileReadString(Handle); // 3 Значение
str_4 = FileReadString(Handle); // 4 Значение
str_5 = FileReadString(Handle); // 5 Значение
// А здесь заполнение массива
arr[str_1][str_2][0] = str_3;
arr[str_1][str_2][1] = str_3;
arr[str_1][str_2][2] = str_4;
if(FileIsEnding(Handle)==true) // Файловый указатель в конце файлаbreak; // Выход из цикла чтения
????????????????????????????????????????????????????
}
FileClose(Handle); // Закрываем файлreturn; // Выход из функции
}
Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.
То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.
Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.
СПАСИБО ОГРОМНОЕ!!!! Когда мозг кипит - "слепнешь" и не видишь простых и очевидных вещей. Самое интересное, это то, что знаешь - решение простое, "как три копейки", но увы, перед глазами пелена. Ещё раз СПАСИБО!!!!!
Тем, что она удалит ВСЕ объекты. Даже те, которые НЕ принадлежат советнику/индикатору. А если человек долгое время делал разметку свою на чарте? А потом запустил этот код в стороннем индикаторе? Как, и что он скажет потом об авторе сего доброго кода?
После закрытия ордеров 152, 153, 158 и 159 получается не правильная прибыль (как будто тестер рассчитал неверно). Ордера "висели" несколько месяцев как видно из таблицы. Причем просадка отражена в таблице правильно а на графике ее почему то не видно.
собственно все начиналось с команды: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);
а потом другой вариант попробовал ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);
Уважаемый почитайте справку :)
Я не понимаю почему мой индюк с указанными командами корректно работает в Альфа-Форексе, а в Саксо банке объекты уже не удаляются.
Потом начались эксперименты со скриптом и скрипт перестал удалять объекты во всех терминалах.
Первая ищет в главном окне графика, вторая во всех. Вывод - 1) используйте индекс окна чтобы сократить количество объектов которые перебирает функция для поиска удаляемых. 2) Если удаляете по имени (части имени, поскольку одна mql программа как правило именует объекты с каким то персональным префиксом) то используйте цикл поиска от последнего (старшего по времени создания) объекта.
Хотя действительно, есть проблема с удалением объектов, если их очень много и перебирать от 0 до ObjectTotal()-1, то удаление части объектов не происходит. Вопрос к разработкам, возможно отведенной памяти буфера не хватает.
Пример:
void DeleteObjects(int chartID, string prefix_obj_name) {
string obj_nm="";
int obj=ObjectsTotal();
// for(int k=0; k<obj; k++){ // неправильный вариант
for(int k=obj-1; k>=0; k--){
obj_nm = ObjectName(k);
if(StringFind(obj_nm,prefix_obj_name)>=0)
{
ResetLastError();
if(!ObjectDelete(chartID,obj_nm))
{
Print(__FUNCTION__,
": не удалось удалить объект ",obj_nm," Код ошибки = ",GetLastError());
}
}
}
}
// prefix_obj_name = "Obj_MQLname_"; Имена объектов создаваемых программой "Obj_MQLname_Close_"+DoubleToStr(Close[0],Digits), "Obj_MQLname_Open_"+DoubleToStr(Open[0],Digits) и т.д.
Подскажите, плиз, совместима ли Win 8 с MT 4 и MT 5? Спрашиваю, потому что у меня мак и думаю, с какой ОС покупать комп. Один человек даже скриншот показывал, на котором видно, что на восьмерке у него MT 4 работает. Но так как некоторые товарищи утверждают, что полной совместимости нет, приходится уточнять... Спасибо.
Объясните пожалуйста, как распихать данные из таблицы (*.csv) в трёх-мерный статический массив.
В первом столбце таблицы - индекс по первому измерению массива,
Во втором - индекс по второму измерению массива,
В третьем и далее столбцах - сами значения по третьему измерению массива.
То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.
Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.
То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.
Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.
Ещё раз СПАСИБО!!!!!
Вот только не нужно советовать глупые варианты. Эта команда удалит вообще все объекты с графика.
Не согласен с Вами!
Был вопрос:
Как удалить все объекты например типа OBJ_ARROW_RIGHT_PRICE ?
Решение:
И чем же решение глупое?
Не согласен с Вами!
Был вопрос:
Решение:
И чем же решение глупое?
Как, и что он скажет потом об авторе сего доброго кода?
Люди добрые. Скажут все что думают
Люди добрые. Скажут все что думают
Не согласен с Вами!
Был вопрос:
Решение:
И чем же решение глупое?
собственно все начиналось с команды: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);
а потом другой вариант попробовал ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);
Уважаемый почитайте справку :)
Я не понимаю почему мой индюк с указанными командами корректно работает в Альфа-Форексе, а в Саксо банке объекты уже не удаляются.
Потом начались эксперименты со скриптом и скрипт перестал удалять объекты во всех терминалах.
Всем салют !
Такая странность тестера наблюдается.
После закрытия ордеров 152, 153, 158 и 159 получается не правильная прибыль (как будто тестер рассчитал неверно). Ордера "висели" несколько месяцев как видно из таблицы. Причем просадка отражена в таблице правильно а на графике ее почему то не видно.
В чем может быть дело ?
EURUSD (Euro vs US Dollar)
15 Минут (M15) 2012.01.01 23:00 - 2014.03.07 22:59 (2012.01.01 - 2014.03.08)
1000.00
Спред
Текущий (12)
1418.73
Общая прибыль
2045.28
Общий убыток
-626.55
3.26
Матожидание выигрыша
2.41
419.34
Максимальная просадка
834.91 (58.98%)
Относительная просадка
58.98% (834.91)
№
Время
Тип
Ордер
Объём
Цена
S / L
T / P
Прибыль
Баланс
372
2012.04.30 11:00
buy
151
0.01
1.32193
0.00000
1.32472
373
2012.05.01 04:45
t/p
151
0.01
1.3247234
0.00000
1.32472
2.75
1402.41
374
2012.05.01 15:00
buy
152
0.01
1.32262
0.00000
1.32713
375
2012.05.02 07:45
t/p
142
0.01
1.31949
0.00000
1.31949
-4.40
1398.00
376
2012.05.02 07:45
t/p
143
0.01
1.31949
0.00000
1.31949
0.95
1398.96
377
2012.05.02 07:45
t/p
149
0.02
1.31949
0.00000
1.31949
12.49
1411.44
378
2012.05.02 08:45
buy
153
0.01
1.31711
0.00000
1.32237
379
2012.05.02 08:45
modify
152
0.01
1.32262
0.00000
1.32237
380
2012.05.02 15:15
sell
154
0.01
1.31483
0.00000
1.31352
381
2012.05.03 07:00
t/p
154
0.01
1.3135174
0.00000
1.31352
1.18
1412.63
382
2012.05.03 08:45
sell
155
0.01
1.31454
0.00000
1.31425
383
2012.05.03 09:00
t/p
155
0.01
1.3142483
0.00000
1.31425
0.29
1412.92
384
2012.05.03 13:45
sell
156
0.01
1.31671
0.00000
1.31256
385
2012.05.04 10:45
t/p
156
0.01
1.3125581
0.00000
1.31256
4.11
1417.02
386
2012.05.04 14:15
sell
157
0.01
1.31527
0.00000
1.31293
387
2012.05.04 14:45
t/p
157
0.01
1.3129331
0.00000
1.31293
2.34
1419.36
388
2012.05.04 16:15
buy
158
0.02
1.30997
0.00000
1.31742
389
2012.05.04 16:15
modify
152
0.01
1.32262
0.00000
1.31742
390
2012.05.04 16:15
modify
153
0.01
1.31711
0.00000
1.31742
391
2012.05.06 23:15
buy
159
0.04
1.29845
0.00000
1.30918
392
2012.05.06 23:15
modify
152
0.01
1.32262
0.00000
1.30918
393
2012.05.06 23:15
modify
153
0.01
1.31711
0.00000
1.30918
394
2012.05.06 23:15
modify
158
0.02
1.30997
0.00000
1.30918
395
2012.09.14 10:45
t/p
152
0.01
1.30918
0.00000
1.30918
-18.67
1400.70
396
2012.09.14 10:45
t/p
153
0.01
1.30918
0.00000
1.30918
-13.12
1387.58
397
2012.09.14 10:45
t/p
158
0.02
1.30918
0.00000
1.30918
-11.65
1375.93
398
2012.09.14 10:45
t/p
159
0.04
1.30918
0.00000
1.30918
22.77
1398.70
собственно все начиналось с команды: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);
а потом другой вариант попробовал ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);
Уважаемый почитайте справку :)
Я не понимаю почему мой индюк с указанными командами корректно работает в Альфа-Форексе, а в Саксо банке объекты уже не удаляются.
Потом начались эксперименты со скриптом и скрипт перестал удалять объекты во всех терминалах.
Первая ищет в главном окне графика, вторая во всех. Вывод - 1) используйте индекс окна чтобы сократить количество объектов которые перебирает функция для поиска удаляемых. 2) Если удаляете по имени (части имени, поскольку одна mql программа как правило именует объекты с каким то персональным префиксом) то используйте цикл поиска от последнего (старшего по времени создания) объекта.
Хотя действительно, есть проблема с удалением объектов, если их очень много и перебирать от 0 до ObjectTotal()-1, то удаление части объектов не происходит. Вопрос к разработкам, возможно отведенной памяти буфера не хватает.
Пример: