[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 776

 
vasya_vasya:
через создание объекта типа эрроу, где нужно выбрать код символа или при помощи обьекта типа лейбл

Спасибо) Эх, жалко, что просто точек нету(
 
FoxUA:
спс за столь подробное обяснение, а я по вашему что делаю ПИШУ СОВЕТНИКА ДЛЯ РАБОТЫ? НЕТ Я УЧУ как и что должно работать, читаю учебник который тут выложен и делаю по премерам и пытаюь написать советник по той тс которую оставил себе как цель, но я токо неделю как узнал о этом языке чтото болие чем его название и место применения, не надо быть таким сроо котегоричным по своему опыту лучше разобрать рабочее чем с нуля построить новое, но нюанс в том что надо знать для чего оно работает, от я с этим и столкнулся что разобрать тут есть и много чего но тжело разбирать не зная для чего оно было создано, и потому я решил попробывать создать новое, но естествено всего не увидиш, Я КСТАТЕ ДЕЛАЮ ОДНО ДЕЙСТВИЕ ЭТО ОТКЫТИЕ ОТЛОЖЕНОГО ОРДЕРА ПО ЦЕНЕ РЫНОЧНОГО И ВСЕ НЕ БОЛИЕ НЕ МЕНИЕ. НО ТЕМ НИ МЕНИЕ СПОСИБО ЗА ВАШЕ ВРЕМЯ КОТОРОЕ ВЫ ТРАТИТЕ,

Не обижайтесь. Ваш код сложен для начинающего. Идти нужно от простого к сложному. В обучении должна быть системность, иначе от учёбы не будет ни какого проку.
 
Можно ли узнать с помощью mql4 номер бара или какой-нибудь параметр цены этого бара не на текущем периоде графика, если известно время его (этого бара) открытия?
 
drknn:

Не обижайтесь. Ваш код сложен для начинающего. Идти нужно от простого к сложному. В обучении должна быть системность, иначе от учёбы не будет ни какого проку.

тут я с вами не соглашусь, надо иметь цель это главное а все остальное приложится, но конечно без постороней помощи не обойтись, а насчет сложности ну а что по вашему не сложно и просто с премером роботы? я же не большого советника создаю с индкаторами с сложными вычесленими, а простого который открывает рыночный, отложены, потом модифицирует и удаляет весь абор для освоения принципа работы и методов воздейстия одного на другой! а хорошо а чтобы вы посоветовали бы мнеочень интересно вае мнение!
 
FoxUA:

тут я с вами не соглашусь, надо иметь цель это главное а все остальное приложится, но конечно без постороней помощи не обойтись, а насчет сложности ну а что по вашему не сложно и просто с премером роботы? я же не большого советника создаю с индкаторами с сложными вычесленими, а простого который открывает рыночный, отложены, потом модифицирует и удаляет весь абор для освоения принципа работы и методов воздейстия одного на другой! а хорошо а чтобы вы посоветовали бы мнеочень интересно вае мнение!


  Изменить логику построения кода и логику выбора имён переменных. Это в первую очередь. Ни чего если имя переменной более 5 символов получается. В борьбе за ясность кода ясность имён, разграничение блоков пробелами, знаками абзаца и комментами - это чертовски важно. Чем больше Вы будете  постигать язык (и не только MQL), тем сложнее будуд Ваши коды. Если Вы не возьмёте себе за привычку давать легкочитаемые имена переменным, и если не возьмёте за привычку организовывать код блочно (с пояснениями), то рано или поздно Вы сотворите код, в котором будете долго и трудно искать логическую ошибку, проклиная себя за то, что код, созданный Вами, столь неудобочитаем.

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

 
FoxUA:
а хорошо а чтобы вы посоветовали бы мнеочень интересно вае мнение! 

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

 

 

 
RekkeR:
Доброго вечера всем и удачной предстоящей недели. Наверное я туплю сваливая на жару, собственно вопрос как определить, проставить расстояние между линиями в пунктах?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distance=(Price1-Price2)/Point;

Это - если необходимо определить расстояние между двумя прямыми в текущий момент времени.

 
drknn:

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

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

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distance=(Price1-Price2)/Point;

Это - если необходимо определить расстояние между двумя прямыми в текущий момент времени.

Есть несколько горизонтальных линий, нужно определить кво пунктов между ними в разных сочетаниях, в принципе на данном этапе меня вполне устроит определение между двумя линиями, остальное сделаю руками. Может есть готовый скрипт или индикатор такой? Спасибо за отклик.
 
FoxUA:

...

вот такое я бы с удовольствием почиталбы если примерами и картинками!

Ну что же, давайте проведём эксперимент! Напишем 2 скрипта. Один будет содержать правильное описание функции. Другой - неправильное. Итак, правильный скрипт:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

А это неправильный скрипт:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

Неправильный он потому, что в нём строка  double MyKoren(double MyValue=36){ инициализирует переменную MyValue значением =  36. Это лишено всякого смысла, так как мы в подпрограмму передаём значение = значению переменной DlyaKornya.

Теперь  последовательно кидаем оба скрипта на график. И что мы видим:

 

Увы, оба скрипта выдали один и тот же результат.

По-идее второй (неправильный) скрипт должен был выдать значение = 6. Вероятно в компилятор встроена защита от дурака, ибо повторяю, строка  double MyKoren(double MyValue=36){ не имеет смысла. Инициализация переменной в ней значением = 36 видать сработает только в том случае, если вызов функции произойдёт без указания параметров. В нашем же случае, по-видимому произошло следующее - при вызове подпрограммы сначала была объявлена переменная double MyValue, затем ей было присвоено значение = 36 и только после этого ей было присвоено значение, которое лежало в переменной DlyaKornya. Другого объяснения, пожалуй, и не придумаешь.

Всё равно лучше не использовать конструкции типа  double MyKoren(double MyValue=36){, а писать как оно и положено - double MyKoren(double MyValue){, иначе потом будешь недоумевать, почему подпрограмма работает не так как нужно.

Причина обращения: