[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 180
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При работе с числами типа double в случае, когда необходимо присвоить переменной какое-то значение (например ноль), у разных авторов встречаются различные варианты написания. Например так a=0; или так a=0.0; или так a=0.0000; Есть ли какое-нибудь отличие с точки зрения корректной работы программы?
if ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) || (OrderMagicNumber()==55)) && (ticket==0)){
OrderDelete(OrderTicket());
int err1=GetLastError();
Print(err1);}
С недавних пор этот кусок кода прекрасно работал...теперь возвращается ошибка ERR_OFF_QUOTES. Прошу заметить ошибку возвращает OrderDelete, даже если номер тикета прописать руками. Кто нибудь может прояснить ситуацию? Спасибо.
При работе с числами типа double в случае, когда необходимо присвоить переменной какое-то значение (например ноль), у разных авторов встречаются различные варианты написания. Например так a=0; или так a=0.0; или так a=0.0000; Есть ли какое-нибудь отличие с точки зрения корректной работы программы?
Нет, правила нет. Но лично я предпочитаю писать константные значения double используя точку.
Например:
Во-первых, при просмотре текста беглым взглядом видно, что тип значения double.
Во-вторых, это избавляет от некоторых ошибок. Сравните:
Помогите плиз. Не хочет выполнять код:
int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
return;
}
Т.е., как задумывалось, если свеча восходящая - открываемся.
Все компилируется. Но ничего не происходит при тесте. Т.е никаких ордеров не выставляет. Ткните носом в ошибку, плиз...
Помогите плиз. Не хочет выполнять код:
int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
return;
}
Т.е., как задумывалось, если свеча восходящая - открываемся.
Все компилируется. Но ничего не происходит при тесте. Т.е никаких ордеров не выставляет. Ткните носом в ошибку, плиз...
Какая свеча вы не уточнили? текущая на графике? предыдущая дневная? предыдущая недельная? если предыдущая дневная например...выглядело бы это так например:
if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) в хелпе про iOpen/iClose доступно всё описано
Помогите плиз. Не хочет выполнять код:
int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
return;
}
Т.е., как задумывалось, если свеча восходящая - открываемся.
Все компилируется. Но ничего не происходит при тесте. Т.е никаких ордеров не выставляет. Ткните носом в ошибку, плиз...
Дело всё в том, что PRICE_CLOSE и PRICE_OPEN - это константы, а не функции и также не массивы тайм-серий. Чтобы получить значения цены открытия и закрытия свечей нужно обратиться к функциям (iOpen и iClose) или же к массивам тайм-серий (Open и Close).
Чтобы узнать подробнее, читайте учебник, например, в этом разделе расписано про предопределённые переменные (куда входят массивы тайм-серий, нужные Вам, Open и Close).
При работе с числами типа double в случае, когда необходимо присвоить переменной какое-то значение (например ноль), у разных авторов встречаются различные варианты написания. Например так a=0; или так a=0.0; или так a=0.0000; Есть ли какое-нибудь отличие с точки зрения корректной работы программы?
Я так понимаю, что в случае:
компилятор воспринимает "1", как значение типа int и выполняется приведение типов (int в целевой тип double).
А в случае:
или (разницы уже нет)
компилятор воспринимает "1.(xxxx)", как значение типа double и приведение типов не выполняется.
P.S.: спасибо PapaYozh за пример. Мысли, изложенные выше пришли именно после него.
И Я так понимаю, что компилятору проще, когда он не приводит типы лишний раз? А может и в ex4 прописываются строчки с "не приведёнными" типами? То есть падает быстродействие? Хотя компилятор должен по идее оптимизировать код.
Пусть более опытные Программисты MQL4 Меня поправят...
Спасибо за мега-развернутые ответы. Читаю, вникаю.
С недавних пор этот кусок кода прекрасно работал...теперь возвращается ошибка ERR_OFF_QUOTES. Прошу заметить ошибку возвращает OrderDelete, даже если номер тикета прописать руками. Кто нибудь может прояснить ситуацию? Спасибо.