Здравствуйте! При изучении MQL4 возник небольшой вопрос. Задача размещена в учебнике на этом сайте. Вот условие: Задача 25. Составить программу, в которой реализуются следующие условия: если курс поднялся выше заданного уровня, то выдать сообщение, в котором словами обозначено превышение над уровнем (до 100 пунктов); в остальных случаях сообщить, что курс не превышает заданный уровень. А вот предложенное решение:
//--------------------------------------------------------------------externdoubleLevel=1.3200; // Заданный уровень stringText[101]; // Объявление массива//--------------------------------------------------------------------intinit()// Спец. ф-ия init(){// Присвоение значенийText[1]="один "; Text[15]="пятнадцать ";
Text[2]="два "; Text[16]="шестнадцать ";
Text[3]="три "; Text[17]="семнадцать ";
Text[4]="четыре "; Text[18]="восемнадцать ";
Text[5]="пять "; Text[19]="девятнадцать ";
Text[6]="шесть "; Text[20]="двадцать ";
Text[7]="семь "; Text[30]="тридцать ";
Text[8]="восемь "; Text[40]="сорок ";
Text[9]="девять "; Text[50]="пятьдесят ";
Text[10]="десять "; Text[60]="шестьдесят";
Text[11]="одиннадцать "; Text[70]="семьдесят ";
Text[12]="двенадцать "; Text[80]="восемьдесят ";
Text[13]="тринадцать "; Text[90]="девяносто";
Text[14]="четырнадцать "; Text[100]= "сто";
// Вычисление значенийfor(inti=20; i<=90; i=i+10)// Цикл по десяткам{for(intj=1; j<=9; j++)// Цикл по единицамText[i+j]=Text[i] + Text[j]; // Вычисление значения }return; // Выход из init()}//--------------------------------------------------------------------intstart()// Спец. ф-ия start(){intDelta=NormalizeDouble((Bid-Level)/Point,0);// Превышение //--------------------------------------------------------------------if(Delta>=0)// Цена не выше уровня{Alert("Цена ниже уровня"); // Сообщениеreturn; // Выход из start()}//--------------------------------------------------------------------if(Delta<100)// Цена более 100{Alert("Более ста пунктов"); // Сообщениеreturn; // Выход из start()}//--------------------------------------------------------------------Alert("Плюс ",Text[Delta],"pt."); // Вывод на экранreturn; // Выход из start()}
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?
Step: Здравствуйте! При изучении MQL4 возник небольшой вопрос. Задача размещена в учебнике на этом сайте. Вот условие: Задача 25. Составить программу, в которой реализуются следующие условия: если курс поднялся выше заданного уровня, то выдать сообщение, в котором словами обозначено превышение над уровнем (до 100 пунктов); в остальных случаях сообщить, что курс не превышает заданный уровень. А вот предложенное решение:
Показаны возможные пути решения. Полезно для обучения.
Step: Здравствуйте! При изучении MQL4 возник небольшой вопрос. Задача размещена в учебнике на этом сайте. Вот условие: Задача 25. Составить программу, в которой реализуются следующие условия: если курс поднялся выше заданного уровня, то выдать сообщение, в котором словами обозначено превышение над уровнем (до 100 пунктов); в остальных случаях сообщить, что курс не превышает заданный уровень. А вот предложенное решение:
P.S.
Конкретно, польза данного примера в работе с массивом,
Судя по всему, в классе непосредственно нет возможности напрямую объявить внешние переменные. Тогда какие есть варианты? Если я не хочу объявлять в самом эксперте или где-нить ещё данные внешние специфические переменные, которые нужны только при использовании этого класса. Я так понимаю единственный вариант сделать инклюдник, в котором будут эти внешние переменные объявлены. А в него инклюдить ещё и класса, так?
Тогда чтоб вызвать класс, нужно будет инклюдить инклюдник, который уже, в свою очередь, включает в себя, непосредственно, класс. Так? Или ещё какие-то варианты бывают?
Просто как-то выглядит не очень как по мне. Куча вложенные файлов-включений создавать... Потому и вопрос такой.
Или всё-таки можно как в обычной библиотеке перед объявлением класса объявить внешние переменные и заимпортить требуемые библиотеки? Имею ввиду типа так:
// Объявляем внешние переменныеextern type Var1;
extern type Var2;
extern type Var3;
// Подключаем требуемые библиотеки//#include <LBase.mqh>//+---//#include <Logging.mqh>#import "user32.dll"int GetAncestor;
int PostMessageA;
#import
//class CLogging
{
protected:
// защищенные данныеpublic:
// открытые данные
};
Такого я не встречал. Вот и думаю, в правильном ли я направлении двигаюсь..
Переношу код индикатора в советник, возникает ошибка. zero divide в части кода
...
Выводил их глобальными переменными на экран терминала через Comment. Нулей не было, были только отрицательные числа. Потом сменил
...
на
...
все встало на свои места, вернул обратно. Никакой ошибки нет! В чем была причина? Инет отключал еще.
У меня тоже выскакивала ошибка "zero divide" там, где в знаменателе дроби никак не мог быть передан ноль. Теперь перед делением делаю формальную проверку типа:
if(znamenatel==0)
{
какое-то действие;
}
и ошибка исчезла. Т.е. компилятору надо дать инструкцию, что делать если знаменатель=0 даже если программер на 100% уверен что никакого 0 там и нет.
Здравствуйте, помогите, пожалуйста, с кодом. Мне нужно, чтобы советник делал элементарное - открывал позиции при подходе к вертикальной (т.е. строго временной, а не ценовой) линии, а именно за указанный промежуток shi, который у меня тут 120 т.е. как я понимаю - 2 минуты. Цвет линии должен определять бай это или селл. Поискал в инете и переписал, получилось следующее:
void OnTick() { int AllObject = ObjectsTotal(); for ( int i = 0; i < AllObject; i++) {
Здравствуйте, помогите, пожалуйста, с кодом. Мне нужно, чтобы советник делал элементарное - открывал позиции при подходе к вертикальной (т.е. строго временной, а не ценовой) линии, а именно за указанный промежуток shi, который у меня тут 120 т.е. как я понимаю - 2 минуты. Цвет линии должен определять бай это или селл. Поискал в инете и переписал, получилось следующее:
void OnTick() { int AllObject = ObjectsTotal(); for ( int i = 0; i < AllObject; i++) {
МТ4 - 625, сообщение тестера при попытке тестировать сов с библиотекой:
2014.03.29 18:38:48.753'C:\Program Files\Admiral1\MQL4\Libraries\ingLib094.mq4' is not 32-bit version
Перед этим сов компилился без запинки, и библиотечка тоже без единого слова. И ваще я совсем не понимаю.
Система у меня (в смысле винда) 32-битная, другой никогда не держал. Семерка.
Библиотека моя родная, всю дорогу с ней. Нормально идет в реальном времени на новом билде. В том числе с другими совами. И в тестере в более ранних версиях без проблем.
А вот в тестере открываться не желает, да еще и причину из пальца высосаллло.
А вот предложенное решение:
Здравствуйте! При изучении MQL4 возник небольшой вопрос. Задача размещена в учебнике на этом сайте. Вот условие: Задача 25. Составить программу, в которой реализуются следующие условия: если курс поднялся выше заданного уровня, то выдать сообщение, в котором словами обозначено превышение над уровнем (до 100 пунктов); в остальных случаях сообщить, что курс не превышает заданный уровень.
А вот предложенное решение:
Показаны возможные пути решения. Полезно для обучения.
Есть другие варианты. Есть другие ошибки.
Больше доверяйте себе. Эксперементируйте.
Здравствуйте! При изучении MQL4 возник небольшой вопрос. Задача размещена в учебнике на этом сайте. Вот условие: Задача 25. Составить программу, в которой реализуются следующие условия: если курс поднялся выше заданного уровня, то выдать сообщение, в котором словами обозначено превышение над уровнем (до 100 пунктов); в остальных случаях сообщить, что курс не превышает заданный уровень.
А вот предложенное решение:
P.S.
Конкретно, польза данного примера в работе с массивом,
возможном представлении данных словами,
использование функции NormalizeDouble и предопределённой переменной Point.
Возможность выбрать хобби попроще.
Судя по всему, в классе непосредственно нет возможности напрямую объявить внешние переменные. Тогда какие есть варианты? Если я не хочу объявлять в самом эксперте или где-нить ещё данные внешние специфические переменные, которые нужны только при использовании этого класса. Я так понимаю единственный вариант сделать инклюдник, в котором будут эти внешние переменные объявлены. А в него инклюдить ещё и класса, так?
Тогда чтоб вызвать класс, нужно будет инклюдить инклюдник, который уже, в свою очередь, включает в себя, непосредственно, класс. Так? Или ещё какие-то варианты бывают?
Просто как-то выглядит не очень как по мне. Куча вложенные файлов-включений создавать... Потому и вопрос такой.
Или всё-таки можно как в обычной библиотеке перед объявлением класса объявить внешние переменные и заимпортить требуемые библиотеки? Имею ввиду типа так:
Такого я не встречал. Вот и думаю, в правильном ли я направлении двигаюсь..Выводил их глобальными переменными на экран терминала через Comment. Нулей не было, были только отрицательные числа. Потом сменил
Переношу код индикатора в советник, возникает ошибка. zero divide в части кода
...
Выводил их глобальными переменными на экран терминала через Comment. Нулей не было, были только отрицательные числа. Потом сменил
...
на
...
все встало на свои места, вернул обратно. Никакой ошибки нет! В чем была причина? Инет отключал еще.У меня тоже выскакивала ошибка "zero divide" там, где в знаменателе дроби никак не мог быть передан ноль. Теперь перед делением делаю формальную проверку типа:
и ошибка исчезла. Т.е. компилятору надо дать инструкцию, что делать если знаменатель=0 даже если программер на 100% уверен что никакого 0 там и нет.
Здравствуйте, помогите, пожалуйста, с кодом. Мне нужно, чтобы советник делал элементарное - открывал позиции при подходе к вертикальной (т.е. строго временной, а не ценовой) линии, а именно за указанный промежуток shi, который у меня тут 120 т.е. как я понимаю - 2 минуты. Цвет линии должен определять бай это или селл. Поискал в инете и переписал, получилось следующее:
void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{
string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}
int kolpos = 0;
if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}
}
}
Здравствуйте, помогите, пожалуйста, с кодом. Мне нужно, чтобы советник делал элементарное - открывал позиции при подходе к вертикальной (т.е. строго временной, а не ценовой) линии, а именно за указанный промежуток shi, который у меня тут 120 т.е. как я понимаю - 2 минуты. Цвет линии должен определять бай это или селл. Поискал в инете и переписал, получилось следующее:
void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{
string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}
int kolpos = 0;
if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}
}
}
Если у тебя время компа совпадает с временем терминала, то можно использовать и TimeLocal() но всё-же надёжней TimeCurrent()
Измени тип переменной operacia на int и убери кавычки OP_BUY и OP_SELL
Если у тебя время компа совпадает с временем терминала, то можно использовать и TimeLocal() но всё-же надёжней TimeCurrent()
Измени тип переменной operacia на int и убери кавычки OP_BUY и OP_SELL
Спасибо. Про ТаймКуррент это точно, у меня время не совпадает с серверным. Исправил, но всё равно не работает... В журнал никаких ошибок не пишет.
П.С. в предыдущем моём посте почему то код без пробелов вставился. Но я вроде все фигурные скобки правильно расставил.
МТ4 - 625, сообщение тестера при попытке тестировать сов с библиотекой:
2014.03.29 18:38:48.753 'C:\Program Files\Admiral1\MQL4\Libraries\ingLib094.mq4' is not 32-bit version
Перед этим сов компилился без запинки, и библиотечка тоже без единого слова. И ваще я совсем не понимаю.
Система у меня (в смысле винда) 32-битная, другой никогда не держал. Семерка.
Библиотека моя родная, всю дорогу с ней. Нормально идет в реальном времени на новом билде. В том числе с другими совами. И в тестере в более ранних версиях без проблем.
А вот в тестере открываться не желает, да еще и причину из пальца высосаллло.
И про 32-битные дела во всех хелпах нет ни слова.