[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 607

 
rustein:
Да, понятно, спасибо.

Поставил так, другого выхода не знаю.......)

А так ..

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    if(!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES))continue; // если нет продолжим цикл
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  if(MySummBull==0)return(380/*v*/);
  return(MySummBull);
}
 
griha:
хочу вести запись действий советника в файл
взял пример из справочника к редактору MQL, маленько переделал под себя


а в результате файл OrdersReport.csv пуст, хотя ордера открываются.


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

Заявка в сервисдек :

при попытке дописать в текстовый файл отркытый с ключем FILE_READ|FILE_WRITE, без предварительной явной установки файлового указателя функцией FileSeek(), запись не происходит вообще.

в предыдущих версиях терминала, при предварительном чтении текстового файла фукцией FileReadString() установка файлового указателя происходила автоматически.

Вот ответ от разработчиков:

Последнее изменение файлового функционала датируется серединой 2008 года.

Никогда раньше нельзя было дописывать в файл без предварительной установки файлового указателя в конец.

Опять вопрос про дополнительные сведения. Это связано с дозаписью в конец файла?

Любые файловые операции чтения-записи автоматически передвигают файловый указатель. Это было всегда и не менялось. Однако, если файл открыт как csv, то возможна промежуточная буферизация данных. Тогда файловый указатель может оказаться не там, где Вы ожидаете. Повторяю, так было всегда - и в предыдущей версии, и в предпредыдущей, с самого начала официального релиза.

Мы многократно повторяли, что принцип умолчания - крайне вреден. В том числе и для файловых указателей. Работайте с файловым указателем явно, если Вы не используете непрерывного чтения или непрерывную запись (особенно это касается экзотических случаев смешанного чтения-записи)

Вывод: юзайте FileSeek

 
khorosh:
Есть.
Спасибо.
 
Roll:

Ваш советник торгует по сигналам 30 мин ADX . Если советник будет торговать по сигналам 1мин ADX, то такие сигналы будут подаваться чаще, чем в первом варианте. Cкриншот в вашем варианте снимается лишь при открытии позиции BUY.
Вас интересует отутствие изображения индикаторов с графика на скриншоте (в тестовом режиме). Вам было предложено убедиться в том, что при режиме демо индикаторы на скриншоте присутствуют. Был выложен скрипт с соответствующей функцией для того, чтобы смогли проверить и разобраться в своем вопросе быстро, а не ждать много часов. Прошло более суток. Хочу знать -- какие у вас результаты?

буду держать вас в курсе. пока занят, постараюсь завтра проверить
 

Подскажите в чем разница при определении имени в функции или при присвоении имени переменной потом передача переменной в функцию?

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);     Имя присваиваю в теле функции
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции
//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()        ИМЯ ПРИСВАИВАЮ В ПЕРЕМЕННОЙ
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);                 ПЕРЕДАЮ ПЕРЕМЕННУЮ В ФУНКЦИЮ
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);
 
rustein:
Помогите избавится от ошибки zero divide в советнике.

Заранее благодарю.

Можно так, у меня работает

double BullPrice()

{

double BullAveragePrice=0;

double MySummBullLots=0;

for (int i = OrdersTotal() - 1; i >= 0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol()) continue;

if (OrderSymbol() == Symbol() && OrderType() == OP_BUY)

{

BullAveragePrice+=OrderOpenPrice()*OrderLots();

MySummBullLots+=OrderLots();

}

}

if (MySummBullLots>0) BullAveragePrice = NormalizeDouble(BullAveragePrice / MySummBullLots, Digits);

return(BullAveragePrice);

}

 
Zhunko:

В папке МТ4 есть пример кода С++ на все случаи жизни в MQL4. Скомпилируйте тот код, и свой туда вставте. Найдёте сразу разницу между Вашим и примером.

В моему МТ нету. Есть только 1 либа, написанная на MQL (stdlib.mq4). Можете кинуть сюда пример?
 
Fox_RM:

Подскажите в чем разница при определении имени в функции или при присвоении имени переменной потом передача переменной в функцию?

В вашем примере разница только при передаче параметров в функцию
dellline(...)
 
costy_:

А так ..

Спасибо!
 

подскажите ситуация такая, читаю csv файл например так

void ReadDate(){
   while(!IsStopped()){
      string dTime = FileReadString(ExtCsvHandle); // читаем строчку 1
      string sValue = FileReadString(ExtCsvHandle); // читаем строчку 2
      Print("Date=",StrToTime(dTime), "Value=",sValue);   
      
   }
}

но csv файл имеет заголовок, первую лишнюю строчку

Time,Value
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3

как программно пропустить первую строчку, или программно удалять в общем при сохранении значения она все портит.

заранее спасибо.