Немного разобрался в теме. Поэтому извиняюсь за некорректно заданный вопрос. И в связи с этим, уточню:
В МТ4 build 670 входит MetaEditor 5 build 966. А В МТ5 build 975 входит MetaEditor 5 build 975.
На mql4 предложили скопировать MetaEditor из МТ4 скопировать в папку установки МТ5. Буду пробовать. Но мне важно, чтобы скомпилированый индикатор работал под МТ4.
Немного разобрался в теме. Поэтому извиняюсь за некорректно заданный вопрос. И в связи с этим, уточню:
В МТ4 build 670 входит MetaEditor 5 build 966. А В МТ5 build 975 входит MetaEditor 5 build 975.
На mql4 предложили скопировать MetaEditor из МТ4 скопировать в папку установки МТ5. Буду пробовать. Но мне важно, чтобы скомпилированый индикатор работал под МТ4.
Да, вы можете всегда использовать более новый MetaEditor для обоих платформ.
MetaEditor также содержит встроенный компилятор.
Да, вы можете всегда использовать более новый MetaEditor для обоих платформ.
MetaEditor также содержит встроенный компилятор.
Чувствую мне надо насколько раскрыть свою проблему, поэтому приведу часть кода, а именно функцию OnCalculate:
int OnCalculate (const int rates_total, // размер входных таймсерий
const int prev_calculated, // обработано баров на предыдущем вызове
const datetime &time[], // Time
const double &open[], // Open
const double &high[], // High
const double &low[], // Low
const double &close[], // Close
const long &tick_volume[], // Tick Volume
const long &volume[], // Real Volume
const int &spread[] // Spread
){
//--- Объявление переменных
int UpT=0,DownT=0;
ResetLastError();//сбрасываем сообщения об ошибках
if (N1>0) {
//--- Верхние ТД точки для N1
Filling_Up_TDPoints_Array(N1,TDHighPoints_N1);
//--- Нижние ТД точки для N1
Filling_Low_TDpoints_Array(N1,TDLowPoints_N1);
//--- Trend Lines Level 1
UpT=Filling_Up_Trends_Array(N1,TDLowPoints_N1,Lvl1UpTrend);
PlotIndexSetInteger(6,PLOT_DRAW_BEGIN,UpT);
DownT=Filling_Down_Trends_Array(N1,TDHighPoints_N1,Lvl1DownTrend);
PlotIndexSetInteger(7,PLOT_DRAW_BEGIN,DownT);
}
if (N2>0) {
//--- Верхние ТД точки для N2
Filling_Up_TDPoints_Array(N2,TDHighPoints_N2);
//--- Нижние ТД точки для N2
Filling_Low_TDpoints_Array(N2,TDLowPoints_N2);
//--- Trend Lines Level 2
UpT=Filling_Up_Trends_Array(N2,TDLowPoints_N2,Lvl2UpTrend);
PlotIndexSetInteger(8,PLOT_DRAW_BEGIN,UpT);
DownT=Filling_Down_Trends_Array(N2,TDHighPoints_N2,Lvl2DownTrend);
PlotIndexSetInteger(9,PLOT_DRAW_BEGIN,DownT);
}
if (N3>0) {
//--- Верхние ТД точки для N3
Filling_Up_TDPoints_Array(N3,TDHighPoints_N3);
//--- Нижние ТД точки для N3
Filling_Low_TDpoints_Array(N3,TDLowPoints_N3);
//--- TD Trend Lines Level 3
UpT=Filling_Up_Trends_Array(N3,TDLowPoints_N3,Lvl3UpTrend);
PlotIndexSetInteger(10,PLOT_DRAW_BEGIN,UpT);
DownT=Filling_Down_Trends_Array(N3,TDHighPoints_N3,Lvl3DownTrend);
PlotIndexSetInteger(11,PLOT_DRAW_BEGIN,DownT);
}
return(rates_total);
}
При запуске алгоритма на отладку с точкой останова у строчки: UpT=Filling_Up_Trends_Array(N1,TDLowPoints_N1,Lvl1UpTrend);
я получаю график с заполненными всеми тремя парами массивов для верхних и нижних точек Демарка. Массивы точек он заполнил все три пары!, но точка останова то стоит после заполнения первых двух массивов! И она не сработала!
Точка останова срабатывает только на объявлении переменных. В любом месте ниже - нет.
Хорошо. Жму F11 от того места где срабатывает. Меня перекидывают в функцию, вызова которой из OnCalculate вообще не происходит!К сожалению здесь нет телепатов. Для моделирования Вашей проблемы нужен весь код. Иначе (это из опыта) ветка превратится во флуд и проблема никак не будет решена.
//+------------------------------------------------------------------+ //| Заполнение массива точек для Up-трендов | //+------------------------------------------------------------------+ int Filling_Up_Trends_Array(int N,double &TDLowPointsArray[],double &UpTrend[])
Ошибка выход за диапазон массива. Ошибка видна при отладке.
Также очень тяжёлые перерасчеты на каждом тике.
Ошибка выход за диапазон массива.
Также очень тяжёлые перерасчеты на каждом тике.
Ошибка видна при отладке.
А можно подробней, как Вы это увидели. У меня во время отладки ни один стоп не срабатывает! А прогонять всю программу сначала, так там тоже чудеса. Я уже писал, что отладчик начинает скакать по процедурам, вызова которых не происходило.
Сначала расставил точки останова:
Рис.1. Расстановка точек останова
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Отладку mql4 в MetaEditor4 решилась довольно просто и изящно путем добавления перед OnCalculate (OnTick) следующего кода:
//--->Необходимо для корректной отладки под Win7
class CFix { } ExtFix;
//--->