Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 432

 
WinProject:

Спасибо!) , переменную Cena=FileReadString(handle); вставляю в функцию  Separator=StringReplace(Сena,",",".");  пишет ошибку "implicit conversion from number to string" -

не хочет читать значение с разделителем "," (1,22426) как строку,  и StringReplace не срабатывает. Или я неправильно действую?


опкбликуйте часть кода в том виде что у Вас есть, от начала чтения файла, с указанием типа переменной CENA

 
Vladislav Andruschenko:

опкбликуйте часть кода в том виде что у Вас есть, от начала чтения файла, с указанием типа переменной CENA


void MyFunc()

 handle=FileOpen("Data.csv",FILE_CSV|FILE_READ,';');

   while(FileIsEnding(handle)!=true)

     { string cena=FileReadString(handle); 

       string Separ=StringReplace(cena,",",".");

  if(FileIsEnding(handle)==true)   

   break;       

   }

   FileClose(handle);

}  

 
WinProject:

void MyFunc()

 handle=FileOpen("Data.csv",FILE_CSV|FILE_READ,';');

   while(FileIsEnding(handle)!=true)

     { string cena=FileReadString(handle); 

       string Separ=StringReplace(cena,",",".");

  if(FileIsEnding(handle)==true)   

   break;       

   }

   FileClose(handle);

}  

Прочитайте пожалуйста,  что возвращает эта функция. Вы пытаетесь в стринг получить результат. Но эта функция просто заменяет символ на символ. Можете и дальше использовать cena уже с изменениями 
 
Vladislav Andruschenko:
Прочитайте пожалуйста,  что возвращает эта функция. Вы пытаетесь в стринг получить результат. Но эта функция просто заменяет символ на символ. Можете и дальше использовать cena уже с изменениями 
Я понял свою ошибку, (string Separ=здесь лишнее) и все получилось.

Спасибо, спасибо!)

 

Помогите, мне нужно чтобы рисовался прямоугольник от хая предыдущей свечи до точки на 200п выше него и времени на бара вперед.

Я написал код, но не пойму почему левая точка прямоугольника не смещается? А правая скользит за хаем

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   //ObjectDelete(0,"Name");
   ArraySetAsSeries(high,true);
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,TimeCurrent(),high[0],TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Roman Sharanov:

Помогите, мне нужно чтобы рисовался прямоугольник от хая предыдущей свечи до точки на 200п выше него и времени на бара вперед.

Я написал код, но не пойму почему левая точка прямоугольника не смещается? А правая скользит за хаем


возможно вы пытаетесь создать объект, который уже есть на графике? может лучше  сделать проверку на то, есть ли уже объекты на графике.


да и предыдущий бар это 1 а не 0. 

high[0] - это ХАЙ текущего бара
 
Vladislav Andruschenko:

возможно вы пытаетесь создать объект, который уже есть на графике? может лучше  сделать проверку на то, есть ли уже объекты на графике.


да и предыдущий бар это 1 а не 0. 


Это да, уже исправил индексы.

Имя поменял, список посмотрел, ничего ен изменилось, все так же, одна точка висит в одном месте, вторая следует хаям

 
Roman SharanovЭто да, уже исправил индексы.

Имя поменял, список посмотрел, ничего ен изменилось, все так же, одна точка висит в одном месте, вторая следует хаям

   ObjectDelete(0,"Name");
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,
                TimeCurrent()-_Period*60,high[1],
                TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
   return(rates_total);

     Двигается


 
STARIJ:
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.

STARIJ, Благодарю за помощь, проверил, к сожалению совпадение с оригиналом слабое, а с увеличением ТФ (например из 30 мин в недельный) совпадение уменьшается значительно. Этот способ лучше чем нечего, но точности в нем маловато. Есть еще варианты? 

 
Boss11:

STARIJ, Благодарю за помощь, проверил, к сожалению совпадение с оригиналом слабое, а с увеличением ТФ (например из 30 мин в недельный) совпадение уменьшается значительно. Этот способ лучше чем нечего, но точности в нем маловато. Есть еще варианты? 

Да. Надо использовать М1, а М5, ... - для проверки. Может быть, интерполяцию использовать? в МТ5 есть история тиков. Если сообщите, где тут профит - посмотрю еще
Причина обращения: