ФОРТС: Функция Bars() - страница 3

 
Михаил:

Если минут 10-15 в дебагере "долбить" синхронизацию и наличие первых дат,

то начинает возвращать правильно. 

Но, при правильной работе, Bars(_Symbol,_Period) должна возвращать

или ВСЕ бары или "0", если данных нет или они не синхронизированы. 

Я согласен.

Но скорее всего исправлять этого не будут, просто подправят документацию.

Типа "возвращается имеющееся кол-во баров, для получения подробной информации проверьте GetLastError". 

 

Михаил:

...Или не умею читать, или Вы не ХОТИТЕ это делать!

Функция вернула бы "0", если бы данные не были синхронизированы! 

Прошу прощение. Тогда это баг. Нужно писать в СД.
 
Михаил:

Слушай.... Хорошая манера общения, ну да ладно...

Я напомню ТЕБЕ, с чего всё началось. ТЫ ПЕРВЫЙ написал:

"Михаил, ну вот зачем вы продолжаете пропагандировать свой позорный принцип в программировании экспертов?"

Даже если меня ЗАБАНЯТ, то я ВСЕГДА буду "воевать" с хамами!

А на войне все средства хороши. НО, если ТЕБЕ будет "приятно" и ты успокоишься, то я признаю себя ДУРАКОМ,

не умеющим программировать и ничего не знающим.

ТВОЁ ЭГО довольно? 

Почему это объективная и реальная оценка стала называться хамством?

Первый раз я написал не здесь, а давно давно где-то там и по существу, просто поучаствовал в теме, но почему ты ты начал сразу изворачиваться.

Война? А какая война? Придумал себе войну и воюешь?  В такой войне, чтобы победить остается только себя замочить.

Было бы твое эго довольно. 

 
Михаил:

...

Если бы функция вернула "0", то тогда, возможно, имело бы смысл вызывать GetLastError().

...

Того, что функция возвращает не то, что есть на самом деле (т.е. работает неправильно) недостаточно? Нужно чтобы совсем никак не работала, только тогда есть смысл в GetLastError? Ну и логика.
 
Dennis Kirichenko:
Кагбэ правила хорошего тона подразумевают синхронизацию данных...

Функция Bars сама по себе активизирует подкачку и синхронизацию. И ведь Михаил разумные человек, если он говорит, что ест ошибка, значит она есть.

Проблема, как понял, не в том, что на разных графиках по разному, а в том, что фактически на графике одно количество, а функция возвращает другое (у Михаила на ФОРТС). 

 

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

Но все же очень интересно, количество видимых глазами баров на графике не соответствует значению функции Bars()? Или же соответствует, но не соответствует действительности? Но этого мы никогда не узнаем...

Может быть так, что бары не все, но сервер не выдает их и тогда Bars покажет что данные синхронизированы, хотя они не все. Это действительно проблема брокера. 

 
Михаил:

Антон!

Если бы функция вернула "0", то тогда, возможно, имело бы смысл вызывать GetLastError().

Если "по каждому чиху" вызывать эту функцию, то получится следующее:

 Это я знаю, что их (баров) должно быть больше, а мог и не знать....

Даже если эта функция и вернула "0", то это не значит, что это ошибка (в справке всё написано.)

Михаил, Вы не правильно поняли мой призыв в данном конкретном случае.

Попробуйте для теста вызвать:

   ResetLastError();
   int b=Bars( "SILV-3.16", PERIOD_H1 );
   Print( "b=", b, "Err=", GetLastError() );

Затем посмотрите журнал терминала. У меня график серебра закрыт. Запускаю и вот результат:

"Эксперт"

2015.11.21 07:22:03.906 test_bars (SBRF-12.15,M1)       b=267Err=0

"Журнал"

2015.11.21 07:22:03.906    Scripts    script test_bars (SBRF-12.15,M1) removed
2015.11.21 07:22:03.781    Scripts    script test_bars (SBRF-12.15,M1) loaded successfully


Допускаю, что ошибка у Вас больше не воспроизводится (например, данные баров обновились с сервера). Тогда хотя бы посмотрите файл "Журнала" терминала за тот день на момент проявления ошибки. Возможно, там есть какая-то отметина о плохих барах в истории или что-то подобное, как я уже писал, такие сообщения могут быть спровоцированы Bars().

 
Fry_Антон:

Михаил, Вы не правильно поняли мой призыв в данном конкретном случае.

Попробуйте для теста вызвать:

Затем посмотрите журнал терминала. У меня график серебра закрыт. Запускаю и вот результат:

"Эксперт"

"Журнал"


Допускаю, что ошибка у Вас больше не воспроизводится (например, данные баров обновились с сервера). Тогда хотя бы посмотрите файл "Журнала" терминала за тот день на момент проявления ошибки. Возможно, там есть какая-то отметина о плохих барах в истории или что-то подобное, как я уже писал, такие сообщения могут быть спровоцированы Bars().

Антон!

Если Вам так интересно про GetLastError(), то извольте:

  ResetLastError();
  sec_bars = Bars( sec_symbol, time_frame );
  
  int ret_code = GetLastError();
  Print( "Sec bars = ", sec_bars, "; Last error = ", ret_code );

 

2015.11.22 21:06:48.111 Spread (Eu-12.15,M1)    Sec bars = 7; Last error = 0
2015.11.22 21:07:15.129 Spread (Eu-12.15,M1)    Sec bars = 0; Last error = 4401
2015.11.22 21:07:15.129 Spread (Eu-12.15,M1)    OnCalculate: Не получены бары по символу Eu-3.16
2015.11.22 21:07:28.833 Spread (Eu-12.15,M1)    Sec bars = 492; Last error = 0

 Убедились :)

Заработала с 3 раза, а бывает, что с 12 раза :(

А бывает и так: 

2015.11.22 21:18:10.525 Spread (FEES-12.15,H1)  Sec bars = 4; Last error = 0
2015.11.22 21:17:54.791 Spread (FEES-12.15,H1)  OnCalculate: Не получены бары по символу FEES-3.16
2015.11.22 21:17:54.791 Spread (FEES-12.15,H1)  Sec bars = 0; Last error = 4401
2015.11.22 21:17:42.753 Spread (FEES-12.15,H1)  Sec bars = 3; Last error = 0
2015.11.22 21:19:23.447 Spread (GAZR-12.15,H1)  Sec bars = 316; Last error = 0
2015.11.22 21:19:12.886 Spread (GAZR-12.15,H1)  OnCalculate: Не получены бары по символу GAZR-3.16
2015.11.22 21:19:12.886 Spread (GAZR-12.15,H1)  Sec bars = 0; Last error = 4401
2015.11.22 21:19:01.986 Spread (GAZR-12.15,H1)  OnCalculate: Не получены бары по символу GAZR-3.16
2015.11.22 21:19:01.986 Spread (GAZR-12.15,H1)  Sec bars = 0; Last error = 4401 

P/S LastError всегда будет = "0", если она ( Bars() ) вернула не нулевое значение.

 Ошибка 4401 (ERR_HISTORY_NOT_FOUND) - это и есть нулевое возвращаемое значение

функции Bars(), так что НЕТ смысла вызывать GetLastError() для функции Bars() 

это очевидно из примечания к  функции Bars() 

 

Для меня совершенно очевидно, что это ошибка MQ, я думаю, что когда функция вызывается в 

первый раз, то в памяти что-то "болтается", поэтому и возвращаются какие-то бары (7).

2015.11.22 21:06:48.111 Spread (Eu-12.15,M1)    Sec bars = 7; Last error = 0
2015.11.22 21:07:15.129 Spread (Eu-12.15,M1)    Sec bars = 0; Last error = 4401
2015.11.22 21:07:15.129 Spread (Eu-12.15,M1)    OnCalculate: Не получены бары по символу Eu-3.16
2015.11.22 21:07:28.833 Spread (Eu-12.15,M1)    Sec bars = 492; Last error = 0
 
Dmitry Fedoseev:

Почему это объективная и реальная оценка стала называться хамством?

Первый раз я написал не здесь, а давно давно где-то там и по существу, просто поучаствовал в теме, но почему ты ты начал сразу изворачиваться.

Война? А какая война? Придумал себе войну и воюешь?  В такой войне, чтобы победить остается только себя замочить.

Было бы твое эго довольно. 

Дмитрий Федосеев, Вы неоднократно ставите себя выше других.

Вы считаете, что Ваша оценка объективна - отлично!

А я считаю, что Вы полный "0" в вопросах о рынке ФОРТС.

"Бегая" за мной по моим топикам, и вставляя глупые комментарии, Вы в конечном счёте сведёте цифры под Вашим аватаром в НОЛЬ.

Вы абсолютно НИЧЕГО не докажите МНЕ, а другие уже сделали выводы (или сделают)... 

 

P/S Вот и по поводу LastError для функции Bars() Вы получили "щелчок по носу"....:) 

 

Что касается моих "позорных методов программирования" советников для ФОРТС:

Здесь 

https://www.mql5.com/ru/forum/58012/page2#comment_1625166 

я привёл пример ОСТАНОВКИ работы советника по коду возврата.

Брокер ошибся. Если бы я не остановил работу, то за этот день я получил бы штраф в 30 000 руб.

(это максимум, что может снять с меня биржа за полную торговую сессию, а так бы настучало гораздо больше)!

То же самое я советовал Антону с кодом ошибки 10013, я лично ВООБЩЕ НИ ПОЛКОПЕЙКИ не хочу платить бирже.

Я выразил ему своё мнение.

Как отвели Вы (даже не спросив почему я так советую ) - уже все знают.

И не Антону, а мне!  

ФОРТС: OnTradeTransaction() коды возврата
ФОРТС: OnTradeTransaction() коды возврата
  • www.mql5.com
Сейчас, коды возврата торгового сервера функции OnTradeTransaction() выглядят так:. - Страница 2 - Категория: биржевой трейдинг
Причина обращения: