Я немножко, изменил код, теперь ошибок нет.
Но проблема старая, индикатор не показывает разные значения двух последних тиков,
а показывает в обоих массивов значение последнего тика.
Вот код
//+------------------------------------------------------------------+
//| prostoi indicator.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
string Mas_Old[1],Mas_New[1] ,
z=TimeToStr(MarketInfo(Symbol(), MODE_TIME), TIME_DATE|TIME_SECONDS);
ArrayCopy(Mas_Old, Mas_New) ;
ArrayInitialize(Mas_New,0) ;
Mas_New[1]=z ;
Alert("Mas_New="+Mas_New1]) ;
Alert("Mas_Old="+Mas_Old[1]) ;
//----
return(0);
}
//+------------------------------------------------------------------+
Я немножко, изменил код, теперь ошибок нет.
Но проблема старая, индикатор не показывает разные значения двух последних тиков,
а показывает в обоих массивов значение последнего тика.
Ваши массивы какого типа???
Почитайте про ArrayInitialize().
У меня массивы типа "string".
Понял, ArrayInitalize() , в данном случае ,не пригоден.
Так как же очистить такой массив при приходе каждого нового тика?
У меня массивы типа "string".
Понял, ArrayInitalize() , в данном случае ,не пригоден.
Так как же очистить такой массив при приходе каждого нового тика?
1 - зачем использовать stirng переменные для сохранения значение времени???
2 - зачем использовать массивы с размером 1???
ок,более конкретно.
В интернете прочитал что, для того чтобы иметь данные времени в формате ЧЧ:ММ:СС от двух последних тиков, то необходимо вначале создать два пустых массива:
Mas_Old --для "старого" тика
Mas_New -- для нового тика
В начале эти массивы пустые.
Потом через ArrayCopy(Mas_Old,Mas_New) копируем, пока ещё пустой Mas_New в Mas_Old
Далее объявляем string переменную "z",и присваиваем ей значение времени последнего тика
z=TimeToStr(MarketInfo(Symbol(), MODE_TIME), TIME_DATE|TIME_SECONDS);
Потом присваиваем "z" массиву "Mas_New"
Mas_New[1]=z ;
Ну и для наглядности выведем результаты на экран содержимого этих двух массивов через Alert().
К сожалению , при выводе на экран cодержимое этих двух массивов одинаковое, и является информацией от последнего тика.
Решение проблемы наверняка не такое и сложное, но пока мои результаты поиска нулевые.
Буду рад любой подсказке с вашей стороны.
ок,более конкретно.
В интернете прочитал что, для того чтобы иметь данные времени в формате ЧЧ:ММ:СС от двух последних тиков, то необходимо вначале создать два пустых массива:
Mas_Old --для "старого" тика
Mas_New -- для нового тика
В начале эти массивы пустые.
Потом через ArrayCopy(Mas_Old,Mas_New) копируем, пока ещё пустой Mas_New в Mas_Old
Далее объявляем string переменную "z",и присваиваем ей значение времени последнего тика
z=TimeToStr(MarketInfo(Symbol(), MODE_TIME), TIME_DATE|TIME_SECONDS);
Потом присваиваем "z" массиву "Mas_New"
Mas_New[1]=z ;
Ну и для наглядности выведем результаты на экран содержимого этих двух массивов через Alert().
К сожалению , при выводе на экран cодержимое этих двух массивов одинаковое, и является информацией от последнего тика.
Решение проблемы наверняка не такое и сложное, но пока мои результаты поиска нулевые.
Буду рад любой подсказке с вашей стороны.
Сначала ознакомьтесь с TimeCurrent(), а затем почитайте про GetTickCount(). Может что-то прояснится?!
А для усвоения материала это:
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { int Razn[5]; string ls_Razn = ""; static int Array[] = {0,0,0,0,0,0}; static double prePrice = 0.0; //---- for (int i = 5; i > 0; i--) {Array[i] = Array[i-1];} Array[0] = GetTickCount(); for (i = 0; i < 5; i++) { Razn[i] = Array[i] - Array[i+1]; ls_Razn = StringConcatenate (ls_Razn, "\n Время", i, ": ", fTimeToStr (Razn[i])); } Comment ("\n Старая цена: " + DoubleToStr (prePrice, Digits) + "\n Новая цена: " + DoubleToStr (Bid, Digits) + ls_Razn); prePrice = Bid; //---- } //+------------------------------------------------------------------+ string fTimeToStr (int fi_Time) { string ls_Time = StringConcatenate (TimeToStr (fi_Time / 1000, TIME_SECONDS), ":", fi_Time % 1000, " ms."); //---- if (StringFind (ls_Time, "00:") != -1) ls_Time = StringSubstr (ls_Time, 3); //---- return (ls_Time); }
Я немножко, изменил код, теперь ошибок нет.
Но проблема старая, индикатор не показывает разные значения двух последних тиков,
а показывает в обоих массивов значение последнего тика.
Вот код
//+------------------------------------------------------------------+
//| prostoi indicator.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
string Mas_Old[1],Mas_New[1] ,
z=TimeToStr(MarketInfo(Symbol(), MODE_TIME), TIME_DATE|TIME_SECONDS);
ArrayCopy(Mas_Old, Mas_New) ;
ArrayInitialize(Mas_New,0) ;
Mas_New[1]=z ;
Alert("Mas_New="+Mas_New1]) ;
Alert("Mas_Old="+Mas_Old[1]) ;
//----
return(0);
}
//+------------------------------------------------------------------+
Стесняюсь, но все-таки спрошу:
1. если в массивах по одному элементу, то зачем массивы ? Какая такая "сермяжная" истина в массиве из одного элемента ? Чем это лучше, чем простое использование обычных переменных.
2. Какой смысл в хранении действительных чисел (тип double) в строковых массивах ?
или просто тормозов добавить в исполняемый код "просто таки жуть как необходимо" ? ;)
ЗЫ Вопросы риторические.
Спасибо всем.
Постараюсь найти выход из ситуаций.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите , пожалуйста, в чём моя ошибка.
Передо мной стойт такая задача:
Нужно сохранить параметры от двух последних тиков.