Ответить
11.01.2014, 17:42
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
подкорректируйте плиз, мой вариант кода, чтобы он выполнял логику как надо...
Как на счёт вот такого варианта?
if(MathAbs(High[1]-High[2])<10.5*Point)
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
11.01.2014, 17:57
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Как на счёт вот такого варианта?
if(MathAbs(High[1]-High[2])<10.5*Point)
Спасибо Ugar, ваш вариант более компактен!)
но неясно почему 10.5?
и чем будет отличаться логика работы вашего варианта, и вот такого:
if(MathAbs(High[1]-High[2])<=10*Point)
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
11.01.2014, 18:15
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
Спасибо Ugar, ваш вариант более компактен!)
но неясно почему 10.5?
и чем будет отличаться логика работы вашего варианта, и вот такого:
if(MathAbs(High[1]-High[2])<=10*Point)
Если так сильно нравится знак <=, тогда уж лучше вот так:
if(MathRound(MathAbs(High[1]-High[2])/Point)<=10)
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Milord 
11.01.2014, 19:30
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,038
Поблагодарили 871 раз(а) / Репутация: 857
Если так сильно нравится знак <=, тогда уж лучше вот так:
if(MathRound(MathAbs(High[1]-High[2])/Point)<=10)
Я себе плохо представляю валютную пару, у которой разница цен может быть 10!
Вот разница 10*Point , то бишь, 10 пунктов, вполне реальна, а как, скажем, у евробакса может быть разница 10, когда он сам "весит" 1.35?
11.01.2014, 19:46
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
Я себе плохо представляю валютную пару, у которой разница цен может быть 10!
Вот разница 10*Point , то бишь, 10 пунктов, вполне реальна, а как, скажем, у евробакса может быть разница 10, когда он сам "весит" 1.35?
if(MathRound(MathAbs(High[1]-High[2])/Point)<=10)
Выделенная красным часть, это разница в целых пунктах.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Milord 
11.01.2014, 19:48
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,038
Поблагодарили 871 раз(а) / Репутация: 857
if(MathRound(MathAbs(High[1]-High[2])/Point)<=10)
Выделенная красным часть, это разница в целых пунктах.
Пардон!
Моя невнимательность!
Но "делить" не есть хорошо! Впрочем, это дело конкретного программера
Ugar 
11.01.2014, 20:29
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
Но "делить" не есть хорошо! Впрочем, это дело конкретного программера
Это лучше чем сравнивать дробные значения на =
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
11.01.2014, 20:30
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,038
Поблагодарили 871 раз(а) / Репутация: 857
Ugar
Уел
Ugar 
12.01.2014, 04:11
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Почему-то не могу получить значения буферов FastTMALine.
PHP код:
int nResult iCustom(NULLPERIOD_TF"FastTMALine",
                                          
TimeFrame,
                                          
TMAPeriod,
                                          
Price,
                                          
ATRMultiplier,
                                          
ATRPeriod,
                                          
TrendThreshold,
                                          
ShowCenterLine,
                                          
alertsOn,
                                          
alertsMessage,
                                          
alertsSound,
                                          
alertsEmail,
                                          
MoveEndpointEveryTick,
                                          
MaxBarsBackbufferpos); 
Первые три дают единицу, последние три бредовое число.
Я где-то затупил так, что не могу увидеть где )
Помогите.
_http://rghost.ru/51583057

Последний раз редактировалось NSerega; 12.01.2014 в 20:40.
12.01.2014, 08:58
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
подкорректируйте плиз, мой вариант кода, чтобы он выполнял логику как надо...
Вместо || (или) надо && (и) использовать.
Milord 
12.01.2014, 09:14
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Вместо || (или) надо && (и) использовать.
Это будет самый, самый вариант. Никогда условие не будет выполнено.
Потому, что High[1] никогда не может и выше и ниже High[2] одновременно.
Milord 
12.01.2014, 09:16
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Почему-то не могу получить значения буферов FastTMALine.
PHP код:
int nResult iCustom(NULLPERIOD_TF"FastTMALine",
                                          
TimeFrame,
                                          
TMAPeriod,
                                          
Price,
                                          
ATRMultiplier,
                                          
ATRPeriod,
                                          
TrendThreshold,
                                          
ShowCenterLine,
                                          
alertsOn,
                                          
alertsMessage,
                                          
alertsSound,
                                          
alertsEmail,
                                          
MoveEndpointEveryTick,
                                          
MaxBarsBackbufferpos); 
Первые три дают единицу, последние три бредовое число.
Я где-то затупил так, что не могу увидеть где )
Помогите.
_http://rghost.ru/51583057
Думаю, тут уместнее double nResult = iCustom();

Последний раз редактировалось NSerega; 12.01.2014 в 20:40.
12.01.2014, 09:19
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Я имею в виду вот так
PHP код:
if((High[1]<=High[2]+10*Point)&&(High[1]>=High[2]-10*Point))
{
ваше действие;

High[1] находится в полосе +- 10п. от High[2].

Это будет самый, самый вариант. Никогда условие не будет выполнено.
Потому, что High[1] никогда не может и выше и ниже High[2] одновременно.
12.01.2014, 09:26
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Я имею в виду вот так
PHP код:
if((High[1]<=High[2]+10*Point)&&(High[1]>=High[2]-10*Point))
{
ваше действие;

High[1] находится в полосе +- 10п. от High[2].
Ну так это-же совсем другое условие.
Это не просто заменить или на и
В том варианте было наоборот "не работать в диапазоне +-10"
12.01.2014, 09:37
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Ну так это-же совсем другое условие.
Это не просто заменить или на и
В том варианте было наоборот "не работать в диапазоне +-10"
Ты, видать, начало пропустил.
Наш молчаливый друг спрашивает
Доброе время суток товарищи. Подскажите пожалуйста как закодить такое условие: появился новый дневной хай(мах), если этот новый хай в пределах 10пунктов от старого хая - то производится какое-то действие.
Милорд отвечает почти правильно, только И/ИЛИ путает.

неточный вопрос,выше или ниже на 10 пунктов???
если допускается вниз 10 пунктов и вверх 10 пунктов,то я бы написал так:

PHP код:
if((High[1]<=High[2]+10*Point)||(High[1]>=High[2]-10*Point))
{
ваше действие;

Я говорю, поменять операции

Вместо || (или) надо && (и) использовать.
Получится правильно

PHP код:
if((High[1]<=High[2]+10*Point)&&(High[1]>=High[2]-10*Point))
{
ваше действие;

High[1] находится в полосе +- 10п. от High[2].
Впрочем, это все равно мимо, поскольку вопрос был с картинкой, на которой нарисован M15 и пара максимумов часах в трех друг от друга. High[1] и High[2] тут не причем, очевидно.
12.01.2014, 13:01
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Ну так вот если-бы ты так расписал сразу, то и вопросов не возникло-бы ни у кого. Даже у Бекингема.
12.01.2014, 13:25
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Вместо || (или) надо && (и) использовать.
спасибо за уточнение!)
у меня кстати была такая мысль заменить || на &&, но сомневался..)
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
12.01.2014, 13:39
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
... в момент открытия бара Open[0] = High[0] = Low[0] = Close[0] а потом они начинают расходиться...
тогда можно написать такой код для открытия ордера на начале бара:

PHP код:
if(Open[0]==Close[0]&&High[0]==Low[0])
 {
  
OrderSend(...);
 } 
или можно наверно ограничиться таким кодом:

PHP код:
if(Open[0]==Close[0])
 {
  
OrderSend(...);
 } 
вопрос ко всем программерам - будет ли такой код работать как надо, если нет, то подкорректируйте плиз его, или приведите свои варианты короткого куска кода открывающего ордер на Open[0]
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
12.01.2014, 13:48
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
тогда можно написать такой код для открытия ордера на начале бара:

PHP код:
if(Open[0]==Close[0]&&High[0]==Low[0])
 {
  
OrderSend(...);
 } 
или можно наверно ограничиться таким кодом:

PHP код:
if(Open[0]==Close[0])
 {
  
OrderSend(...);
 } 
вопрос ко всем программерам - будет ли такой код работать как надо, если нет, то подкорректируйте плиз его, или приведите свои варианты короткого куска кода открывающего ордер на Open[0]
Это очень опасно. Дело в том, что если в МТ присутствует тяжёлый индикатор и он загрузит комп так что проскочит первый тик мимо советника, то на новом баре может уже не быть такого равенства. Это для первого варианта
Да и Open[0] останется неизменным, а вот Close[0] в любой момент и несколько раз подряд может быть равен цене открытия бара. А это для второго.

Последний раз редактировалось AlexeyVik; 12.01.2014 в 13:50.
12.01.2014, 14:15
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
тогда можно написать такой код для открытия ордера на начале бара:
вопрос ко всем программерам - будет ли такой код работать как надо, если нет, то подкорректируйте плиз его, или приведите свои варианты короткого куска кода открывающего ордер на Open[0]
Есть много способов детектировать появление нового бара, и через Volume, и через Bars, через равенство OHLC, через TimeCurrent(), но из них один только один надежный - изменение Time[0]. Все остальное на быстром рынке может не сработать.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 06:49. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO