Ответ
 
Опции темы
30.03.2013, 17:31
Аватар для Александр К
Александр К Новичок форума
Регистрация: 22.10.2009 / Сообщений: 4
Поблагодарили 0 раз(а) / Репутация: 0
Странности оператора IF
if (func1) Func2;
else
if (func3) Func4;
else
if (func5) Func6;
Почему то срабатывают все строки хотя условий нет. Почему?
Александр К вне форума Ответить с цитированиемОтветить с цитированием  
30.03.2013, 17:54
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от Александр К Посмотреть сообщение
Странности оператора IF
if (func1) Func2;
else
if (func3) Func4;
else
if (func5) Func6;
Почему то срабатывают все строки хотя условий нет. Почему?
Если все Func* исполняются, однозначно func* == true, все три. Покажите реальный код, возможно у вас {} скобки неправильно расставлены.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (31.03.2013)
30.03.2013, 18:25
Аватар для Александр К
Александр К Новичок форума
Регистрация: 22.10.2009 / Сообщений: 4
Поблагодарили 0 раз(а) / Репутация: 0
if (R1>=R23 && OrderStopLoss()<R33)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_2*Point),OrderTakeProfit(),OrderExpiratio n());}
else
if (R1>=R22 && OrderStopLoss()<R32)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_1*Point),OrderTakeProfit(),OrderExpiratio n());}

else
if (R1>=R21 && OrderStopLoss()<R31)
{
Print ("R1= ",R1," R21= ",R21," OrderStopLoss()= ",DoubleToStr(OrderStopLoss(),5)," R31= ",DoubleToStr(R31,5));
OrderModify(ticket,OrderOpenPrice(),(OrderOpenPric e() + 1*Point),OrderTakeProfit(),OrderExpiration());}
}
Я вводил печать условий, они не совпадают. Это перевод СЛ на предыдущий уровень, при достижении текущего уровня (трал по Баришпольцу)

Последний раз редактировалось Александр К; 30.03.2013 в 18:29.
Александр К вне форума Ответить с цитированиемОтветить с цитированием  
30.03.2013, 19:25
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от Александр К Посмотреть сообщение
if (R1>=R23 && OrderStopLoss()<R33)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_2*Point),OrderTakeProfit(),OrderExpiratio n());}
else
if (R1>=R22 && OrderStopLoss()<R32)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_1*Point),OrderTakeProfit(),OrderExpiratio n());}

else
if (R1>=R21 && OrderStopLoss()<R31)
{
Print ("R1= ",R1," R21= ",R21," OrderStopLoss()= ",DoubleToStr(OrderStopLoss(),5)," R31= ",DoubleToStr(R31,5));
OrderModify(ticket,OrderOpenPrice(),(OrderOpenPric e() + 1*Point),OrderTakeProfit(),OrderExpiration());}
}
Я вводил печать условий, они не совпадают. Это перевод СЛ на предыдущий уровень, при достижении текущего уровня (трал по Баришпольцу)
уберите else они там не нужны.
alexshell на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (31.03.2013), smartmans (05.04.2013)
30.03.2013, 19:39
Аватар для Александр К
Александр К Новичок форума
Регистрация: 22.10.2009 / Сообщений: 4
Поблагодарили 0 раз(а) / Репутация: 0
спасибо!
Александр К вне форума Ответить с цитированиемОтветить с цитированием  
31.03.2013, 07:05
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от alexshell Посмотреть сообщение
уберите else они там не нужны.
В этом ты очень не прав.
Сообщение от Александр К Посмотреть сообщение
if (R1>=R23 && OrderStopLoss()<R33)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_2*Point),OrderTakeProfit(),OrderExpiratio n());}
else
if (R1>=R22 && OrderStopLoss()<R32)
{OrderModify(ticket,OrderOpenPrice(),(OrderOpenPri ce() + pf_level_1*Point),OrderTakeProfit(),OrderExpiratio n());}

else
if (R1>=R21 && OrderStopLoss()<R31)
{
Print ("R1= ",R1," R21= ",R21," OrderStopLoss()= ",DoubleToStr(OrderStopLoss(),5)," R31= ",DoubleToStr(R31,5));
OrderModify(ticket,OrderOpenPrice(),(OrderOpenPric e() + 1*Point),OrderTakeProfit(),OrderExpiration());}
}
Я вводил печать условий, они не совпадают. Это перевод СЛ на предыдущий уровень, при достижении текущего уровня (трал по Баришпольцу)
Александр, дополни все if() строкой Print() и покажи распечатку.
Или обрати внимание, на вероятность или очерёдность возможности выполнения условия для OrderModify()
Вероятно происходит выполнение не на одном тике. То-есть сначала выполнено первое условие и OrderModify(), потом на следующем тике вторая часть условия уже не пускает... а else пожалуйста... условие true
Посмотри не надо-ли дополнить
else
if (R1>=R22 && OrderStopLoss()<R32 && OrderStopLoss()<R33)
и соответственно следующее else if()
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
31.03.2013, 09:29
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от alexshell Посмотреть сообщение
уберите else они там не нужны.
Сообщение от AlexeyVik Посмотреть сообщение
В этом ты очень не прав.
Неправ в чём? Что в операторе if() можно не использовать else? Или что условия неправильно понял? Судя по ответу спасибо всё таки у Александра К заработало всё как надо.
alexshell на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (31.03.2013), strannik-ps (31.03.2013)
31.03.2013, 17:29
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ

По умолчанию Подскажите Пожалуйста


Доброго времени суток подскажите пожалуйста вот есть индикатор я его в код советника вставляю вот так
Код:
double Buy1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Buy1_2 = iCustom(NULL, 0, "100pipsdayscalper5~", 1, Current + 36);

double Sell1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Sell1_2 = iCustom(NULL, 0, "100pipsdailyscalper5~", 1, Current + 36);
может не правильное сравнение?работает криво или праметры не верные задаю?подскажите пожалуйста
и еще в тестере постоянно вылазит 2013.03.31 22:38:33 2013.02.12 11:08 Cannot open file 'C:\Program Files (x86)\InstaTrader\experts\indicators\100pipsdaysca lper5~.ex4' on the EURUSD,M5 хотя он там есть
Вложения:
Тип файла: mq4 100pipsdailyscalper5~.mq4 (6.6 Кб, 19 просмотров)

Последний раз редактировалось gold_traid; 31.03.2013 в 17:39.
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
31.03.2013, 21:17
Регистрация: 13.03.2009 / Сообщений: 2,322
Поблагодарили 1,944 раз(а) / Репутация: 2019
Сообщение от gold_traid Посмотреть сообщение
Доброго времени суток подскажите пожалуйста вот есть индикатор я его в код советника вставляю вот так
Код:
double Buy1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Buy1_2 = iCustom(NULL, 0, "100pipsdayscalper5~", 1, Current + 36);

double Sell1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Sell1_2 = iCustom(NULL, 0, "100pipsdailyscalper5~", 1, Current + 36);
может не правильное сравнение?работает криво или праметры не верные задаю?подскажите пожалуйста
и еще в тестере постоянно вылазит 2013.03.31 22:38:33 2013.02.12 11:08 Cannot open file 'C:\Program Files (x86)\InstaTrader\experts\indicators\100pipsdaysca lper5~.ex4' on the EURUSD,M5 хотя он там есть
1. убери терминал из папки C:\Program Files (x86). Установи в специально созданную папку, например c:\Terminals
2. О каком сравнении пишешь. Здесь привёл только вызов индикатора. При том дважды вызываешь одно и то же. Это даёт лишнюю нагрузку.
3. Зачем так далеко в историю глядишь? Current + 36
4. Ошибка в имени файла в второй строке.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 31.03.2013 в 21:21.
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
31.03.2013, 21:22
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
1. убери терминал из папки C:\Program Files (x86). Установи в специально созданную папку, например c:\Terminals
2. О каком сравнении пишешь. Здесь привёл только вызов индикатора. При том дважды вызываешь одно и то же. Это даёт лишнюю нагрузку.
3. Зачем так далеко в историю глядишь? Current + 36
*if (Buy1_1 < Buy1_2) Order = SIGNAL_BUY;
*if (Sell1_1 > Sell1_2) Order = SIGNAL_SELL; вот это сранение
ну должно быть так синий индикатор и цена выше него покупаем красный наоборот

Последний раз редактировалось gold_traid; 31.03.2013 в 21:28.
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
31.03.2013, 21:38
Регистрация: 13.03.2009 / Сообщений: 2,322
Поблагодарили 1,944 раз(а) / Репутация: 2019
Сообщение от gold_traid Посмотреть сообщение
*if (Buy1_1 < Buy1_2) Order = SIGNAL_BUY;
*if (Sell1_1 > Sell1_2) Order = SIGNAL_SELL; вот это сранение
ну должно быть так синий индикатор и цена выше него покупаем красный наоборот
1. Прежде чем использовать индикатор надо разобраться в буферах. Какие именно тебе нужны. Например, в это индикаторе 6 буферов.
Ты вызываешь 0 и 1 буферы на Current + 36 баре.
А ты уверен что данные которые тебе нужны находятся в этих буферах?
2. По твоему описанию индикатор должен сравниваться с ценой, а в коде сравниваешь один буфер с другим.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
31.03.2013, 21:43
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
1. Прежде чем использовать индикатор надо разобраться в буферах. Какие именно тебе нужны. Например, в это индикаторе 6 буферов.
Ты вызываешь 0 и 1 буферы на Current + 36 баре.
А ты уверен что данные которые тебе нужны находятся в этих буферах?
2. По твоему описанию индикатор должен сравниваться с ценой, а в коде сравниваешь один буфер с другим.
буфера проверял 0 синий 1 красный не понятно как задать те параметры которые вылазят в алерте цена и стоп что по ним ставились
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
31.03.2013, 21:51
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от gold_traid Посмотреть сообщение
буфера проверял 0 синий 1 красный не понятно как задать те параметры которые вылазят в алерте цена и стоп что по ним ставились
совтник должен работь вот по этим сигналам
if (ad_24 != 0.0) ls_48 = " at price " + DoubleToStr(ad_24, 4);
else ls_48 = "";
if (ad_8 != 0.0) ls_40 = ", TakeProfit on " + DoubleToStr(ad_8, 4);
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
01.04.2013, 05:45
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от alexshell Посмотреть сообщение
Неправ в чём? Что в операторе if() можно не использовать else? Или что условия неправильно понял? Судя по ответу спасибо всё таки у Александра К заработало всё как надо.
Не прав в том, что else там не нужны. Такой подход к решению вопроса похож на "попал - не попал"
Конечно else можно не использовать, а иногда, при неправильном их использовании, они даже приводят к неправильной работе кода. Но чаще всего использование else предотвращает от бесполезных проверок других условий и сокращает время исполнения кода.

Последний раз редактировалось AlexeyVik; 01.04.2013 в 05:54.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
01.04.2013, 05:48
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от gold_traid Посмотреть сообщение
Доброго времени суток подскажите пожалуйста вот есть индикатор я его в код советника вставляю вот так
Код:
double Buy1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Buy1_2 = iCustom(NULL, 0, "100pipsdayscalper5~", 1, Current + 36);

double Sell1_1 = iCustom(NULL, 0, "100pipsdailyscalper5~", 0, Current + 36);
double Sell1_2 = iCustom(NULL, 0, "100pipsdailyscalper5~", 1, Current + 36);
может не правильное сравнение?работает криво или праметры не верные задаю?подскажите пожалуйста
и еще в тестере постоянно вылазит 2013.03.31 22:38:33 2013.02.12 11:08 Cannot open file 'C:\Program Files (x86)\InstaTrader\experts\indicators\100pipsdaysca lper5~.ex4' on the EURUSD,M5 хотя он там есть
А грамматическую ошибку не смог найти??? Даже несоответствие длины двух одинаковых строк не заметил???
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
01.04.2013, 08:18
Аватар для smartmans
smartmans Активный участник
Регистрация: 07.09.2012 / Адрес: Москва / Сообщений: 119
Поблагодарили 82 раз(а) / Репутация: 83
Приветствую.
Есть индикатор X, обновляется только при смене таймфрейма или при перезапуске терминала.
Подскажите, что нужно вставить, чтобы обновлялся (перестраивался) в необходимое время терминала, скажем 00:00?
То есть не каждый бар/тик, а только в назначенное время.
smartmans вне форума Ответить с цитированиемОтветить с цитированием  
01.04.2013, 12:07
Аватар для svitanak
svitanak Местный житель
Регистрация: 18.07.2011 / Сообщений: 163
Поблагодарили 297 раз(а) / Репутация: 298
здравствуйте уважаемые программисты. есть такой вопрос. может кто подскажет как приписать мысль в советнике или покажет советник который выполняет такую функцию -
- по сигналу индикатора открывается ордер и если он в минусе при противоположном сигнале, он не закрывается, а при следующем сигнале открывается увеличенный. типа мартина, но только не через количество пунктов, а при следующем сигнале индикатора в том же направлении, что и минусовой
- надо чтобы сова расчитывала ближние прибыльные ордера и закрывала только те что при противоположном сигнале будут в общем в плюсе.
пример - селл 1 лот , бай закрывается в + и открывается новый селл 1*2=2лота, снова селл в минусе и открывается новый бай, который снова в плюсе и снова открывается селл 1*3=3лота. 2 последних ордера (один +20пп второй -10пп) в сумме дают +10. надо прописать чтобы закрывались только они потому что с первым лотом(-30пп) будет общий минус.

заранее спасибо за совет или может у кого есть пример советника, который так расчитывает ордера
svitanak на форуме Ответить с цитированиемОтветить с цитированием  
04.04.2013, 23:36
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от svitanak Посмотреть сообщение
здравствуйте уважаемые программисты. есть такой вопрос. может кто подскажет как приписать мысль в советнике или покажет советник который выполняет такую функцию -
- по сигналу индикатора открывается ордер и если он в минусе при противоположном сигнале, он не закрывается, а при следующем сигнале открывается увеличенный. типа мартина, но только не через количество пунктов, а при следующем сигнале индикатора в том же направлении, что и минусовой
- надо чтобы сова расчитывала ближние прибыльные ордера и закрывала только те что при противоположном сигнале будут в общем в плюсе.
пример - селл 1 лот , бай закрывается в + и открывается новый селл 1*2=2лота, снова селл в минусе и открывается новый бай, который снова в плюсе и снова открывается селл 1*3=3лота. 2 последних ордера (один +20пп второй -10пп) в сумме дают +10. надо прописать чтобы закрывались только они потому что с первым лотом(-30пп) будет общий минус.

заранее спасибо за совет или может у кого есть пример советника, который так расчитывает ордера
1. По сигналу индикатора открываешь ордер.
2. Мониторишь посредством выборки ордеров в режиме MODE_HISTORY профитность ордера предыдущего, если он достиг убытка заданного, то...
3. Открываешь ордер по следующему сигналу.

Да и вообще ты тут не вопрос задал, а чуть ли ни ТЗ для написания эксперта. С такой просьбой тебе в другую ветку нужно..
hoz вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
svitanak (06.04.2013)
05.04.2013, 14:12
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Привет всем. Подскажите, как написать - "если ордер закрыт и профит в плюсе, то после этого закрытые в минус ордера......." Начало и конец мне ясны if(OrderClose() > 0 && OrderProfit() > 0) вот тут нужно вписать - после этого - и дальше тоже понятно if(OrderClose() > 0 && OrderProfit() < 0)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 на форуме Ответить с цитированиемОтветить с цитированием  
06.04.2013, 12:15
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Сообщение от Алекc1234 Посмотреть сообщение
Привет всем. Подскажите, как написать - "если ордер закрыт и профит в плюсе, то после этого закрытые в минус ордера......." Начало и конец мне ясны if(OrderClose() > 0 && OrderProfit() > 0) вот тут нужно вписать - после этого - и дальше тоже понятно if(OrderClose() > 0 && OrderProfit() < 0)
Никто не ответил. Видать, слишком сложно написать такое...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 на форуме Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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