Ответ
 
Опции темы
05.04.2015, 19:33
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от Yurkov Посмотреть сообщение
Добрый вечер!
Подкиньте, пожалуйста, кусок кода, которым можно ограничить торговлю советника в определенный месяц.
Цитата:
Month
Возвращает номер текущего месяца последнего известного времени сервера.
int Month();
Возвращаемое значение
Номер текущего месяца (1-Январь,2,3,4,5,6,7,8,9,10,11,12) последнего известного серверного времени.
К примеру надо что бы что то делалось только в марте и декабре
if(Month()==3 || Month()==12)
{
//Здесь что надо делать
}
К примеру надо что бы что то не делалось только в марте и декабре
if(Month()!=3 && Month()!=12)
{
//Здесь что надо делать кроме марта и декабря
}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yurkov (06.04.2015)
06.04.2015, 06:09
Аватар для Yurkov
Yurkov Почётный гражданин
Регистрация: 19.01.2011 / Сообщений: 656
Поблагодарили 364 раз(а) / Репутация: 367
Сообщение от Ugar Посмотреть сообщение
К примеру надо что бы что то не делалось только в марте и декабре
if(Month()!=3 && Month()!=12)
{
//Здесь что надо делать кроме марта и декабря
}
А что написать, чтоб не торговал в эти месяцы?

P.S.
Вписал
if(Month()==3)
{
return(0);
}
И в марте торговли нет. Правильно или нет не знаю, но вроде как работает, спасибо!)

Последний раз редактировалось Yurkov; 06.04.2015 в 06:31.
Yurkov на форуме Ответить с цитированиемОтветить с цитированием  
06.04.2015, 12:48
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от Yurkov Посмотреть сообщение
А что написать, чтоб не торговал в эти месяцы?

P.S.
Вписал
if(Month()==3)
{
return(0);
}
И в марте торговли нет. Правильно или нет не знаю, но вроде как работает, спасибо!)
Этот код буквально означает что всё что после него в марте не будет работать.
Стоит помнить что если это вся работа советника после этих строк, советник полностью прекратит работу. А если сделки открытые остались и их надо до сопроводить до закрытия, или что то надо завершить. То эти операции надо разместить до этих строк, если нужно что бы они работали всегда. Или внутри фигурных скобок, перед ретурн, если нужно что бы они работали только в марте.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Abi (06.04.2015), vladradon (07.04.2015)
06.04.2015, 13:03
Аватар для Abi
Abi Элитный участник
Регистрация: 21.12.2010 / Адрес: Kz Казахстан / Сообщений: 970
Поблагодарили 1,694 раз(а) / Репутация: 1696
Ugar все очень четко и правильно предупредил.
Нужно точно знать, что делать с ордерами, которые остались в рынке, если наступил март:
1) либо выше по коду ставить условия по их закрытию-тралению-локированию и т.п. на ваше усмотрение
2) либо внутри скобок перед return(0); писать, что с текущими ордерами делать...
Abi вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Ugar (06.04.2015)
10.04.2015, 04:17
Аватар для svoi
svoi Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 600
Поблагодарили 892 раз(а) / Репутация: 896
Уважаемые программисты!
Вот тут периодически возникает ошибка :

if(Time_bar!=Time[0]) в этой строчке array out of range
{
new_bar = true;
Time_bar=Time[0];
}
Кто нибудь подскажет как исправить, либо другой вариант определения что бар текущий?
svoi вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 05:42
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от svoi Посмотреть сообщение
Уважаемые программисты!
Вот тут периодически возникает ошибка :

if(Time_bar!=Time[0]) в этой строчке array out of range
{
new_bar = true;
Time_bar=Time[0];
}
Кто нибудь подскажет как исправить, либо другой вариант определения что бар текущий?
Что-то у тебя из серии очевидное не вероятное... Не должно быть такого...
Если хочешь возьми мою функцию.
Код:
void OnTick()
{
 static datetime lbD, lbH;
  if(NewBar(PERIOD_D1, lbD))
   {
     // Делаем что надо в начале дня...
   }
  if(NewBar(PERIOD_H1, lbH))
   {
     // Делаем что надо в начале часа ...
   }
// И так можно определить начало бара любого периода
}/*******************************************************************/

bool NewBar(int tf, datetime &lastbar)
{
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}/*******************************************************************/
Переменные lbD и lbH можно объявить на глобальном уровне, но от этого ничего особо не изменится.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
svoi (10.04.2015)
10.04.2015, 06:07
Аватар для svoi
svoi Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 600
Поблагодарили 892 раз(а) / Репутация: 896
Сообщение от AlexeyVik Посмотреть сообщение
Что-то у тебя из серии очевидное не вероятное... Не должно быть такого...
Если хочешь возьми мою функцию.
Код:
void OnTick()
{
 static datetime lbD, lbH;
  if(NewBar(PERIOD_D1, lbD))
   {
     // Делаем что надо в начале дня...
   }
  if(NewBar(PERIOD_H1, lbH))
   {
     // Делаем что надо в начале часа ...
   }
// И так можно определить начало бара любого периода
}/*******************************************************************/

bool NewBar(int tf, datetime &lastbar)
{
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}/*******************************************************************/
Переменные lbD и lbH можно объявить на глобальном уровне, но от этого ничего особо не изменится.
Спасибо за функцию, но суть таже. Попробую с функцией iTime еще. Может это ДЦ не дает время 0-ого бара спецом?
svoi вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 06:23
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от svoi Посмотреть сообщение
Спасибо за функцию, но суть таже. Попробую с функцией iTime еще. Может это ДЦ не дает время 0-ого бара спецом?
А другой сути и быть не может. Есть время открытия бара и оно проверяется на неравенство.
ДЦ не может давать или не давать время открытия бара, оно берётся с сервера независимо от желания брокера вместе с очередным тиком, а уже в терминале определяется наступление нового бара какого-то периода.
Когда получишь ошибку посмотри номер строки и сравни с номером строки своего кода. Что-то кажется мне что не в этой строке ошибка.
Индикатор пишешь\правишь?
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 06:29
Аватар для svoi
svoi Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 600
Поблагодарили 892 раз(а) / Репутация: 896
Сообщение от AlexeyVik Посмотреть сообщение
А другой сути и быть не может. Есть время открытия бара и оно проверяется на неравенство.
ДЦ не может давать или не давать время открытия бара, оно берётся с сервера независимо от желания брокера вместе с очередным тиком, а уже в терминале определяется наступление нового бара какого-то периода.
Когда получишь ошибку посмотри номер строки и сравни с номером строки своего кода. Что-то кажется мне что не в этой строке ошибка.
Индикатор пишешь\правишь?
Это советник:
вот лог:
0 17:43:48.655 MACD_ColorHist_Alert_1_1 EURUSDf,M5: Alert: MACD Crossed down\n Date=2015.04.09 15:45\n Symbol=EURUSDf Period=5
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-22.mq4' (175,21)
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-2.mq4' (168,21)
0 17:58:08.865 MACD_ColorHist_Alert_1_1 EURUSDf,M5: uninit reason 1

вот кусок кода:
Миниатюры:
Нажмите на изображение для увеличения
Название: ошибка.png
Просмотров: 21
Размер:	13.9 Кб
ID:	202474  
svoi вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 07:05
Аватар для vlad_123
vlad_123 Местный знаток
Регистрация: 29.01.2013 / Сообщений: 389
Поблагодарили 877 раз(а) / Репутация: 881
Сообщение от svoi Посмотреть сообщение
Это советник:
вот лог:
0 17:43:48.655 MACD_ColorHist_Alert_1_1 EURUSDf,M5: Alert: MACD Crossed down\n Date=2015.04.09 15:45\n Symbol=EURUSDf Period=5
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-22.mq4' (175,21)
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-2.mq4' (168,21)
0 17:58:08.865 MACD_ColorHist_Alert_1_1 EURUSDf,M5: uninit reason 1
Поищи - не объявляется ли где-нибудь в твоем коде массив Time[]
В этом случае MetaEditor при компиляции просто выдает варнинг:
Цитата:
declaration of 'Time' hides predefined variable

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

На заказ не программирую.
vlad_123 на форуме Ответить с цитированиемОтветить с цитированием  
10.04.2015, 07:11
Аватар для svoi
svoi Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 600
Поблагодарили 892 раз(а) / Репутация: 896
Сообщение от vlad_123 Посмотреть сообщение
Поищи - не объявляется ли где-нибудь в твоем коде массив Time[]
В этом случае MetaEditor при компиляции просто выдает варнинг:
Неа , он только в этом куске, ща переделал на iTime пока нет ошибки. Странно как-то, техподдержка молчит как всегда.
svoi вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 15:00
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от svoi Посмотреть сообщение
Это советник:
вот лог:
0 17:43:48.655 MACD_ColorHist_Alert_1_1 EURUSDf,M5: Alert: MACD Crossed down\n Date=2015.04.09 15:45\n Symbol=EURUSDf Period=5
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-22.mq4' (175,21)
1 17:48:33.214 array out of range in 'barabachka_pips_2_1_4-2.mq4' (168,21)
0 17:58:08.865 MACD_ColorHist_Alert_1_1 EURUSDf,M5: uninit reason 1

вот кусок кода:
А в строке 168 что? И при каких делах тут индикатор MACD_ColorHist_Alert_1_1
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
10.04.2015, 15:59
Аватар для svoi
svoi Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 600
Поблагодарили 892 раз(а) / Репутация: 896
Сообщение от AlexeyVik Посмотреть сообщение
А в строке 168 что? И при каких делах тут индикатор MACD_ColorHist_Alert_1_1
168-21 это другая версия такого же советника, а Макдак просто стоит на графике, возможно был обрыв связи и заново инициализация индикатора. С iTime пока нет ошибки.
svoi вне форума Ответить с цитированиемОтветить с цитированием  
13.04.2015, 14:20
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Может ли пользовательская функция типа bool вернуть значения двух переменных такого типа, правильно ли так описать:

bool Cross (a,b,c....)
{
return (bool s, bool f);
}

и как ней обратиться, можно ли вернуть оба значения за одно обращение?
Например так:

Cross (a,b,c....)
{
int w,m;
w=s;m=f;
return (s, f);
}
owjedi вне форума Ответить с цитированиемОтветить с цитированием  
13.04.2015, 14:59
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
В хелпе написано, что можно возвращать простые структуры.
_http://docs.mql4.com/ru/basis/types/classes#simple_structure

Последний раз редактировалось NSerega; 13.04.2015 в 15:31.
matro3 на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
owjedi (13.04.2015)
13.04.2015, 15:43
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от owjedi Посмотреть сообщение
Может ли пользовательская функция типа bool вернуть значения двух переменных такого типа, правильно ли так описать:

bool Cross (a,b,c....)
{
return (bool s, bool f);
}

и как ней обратиться, можно ли вернуть оба значения за одно обращение?
Например так:

Cross (a,b,c....)
{
int w,m;
w=s;m=f;
return (s, f);
}
Можно использовать ссылки
void Cross (int a, int b, int c, bool& s, bool& f)
{
//Здесь вычисления значений s, f.
}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
owjedi (13.04.2015)
13.04.2015, 18:38
Аватар для Yura Vakulenko
Yura Vakulenko Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77
Привет, друзья, подскажите простейшую функцию, которая если наступят условия.. (SigPF==1 или SigPF==2) и OrdersTotal>0 т.е. нужно обрабатывать только те ордера, которые сейчас в рынке, если наступит одно из условий SigPF.

Внешняя переменная для проверки условия внутри функции..
extern int PF_price_in_pips=70;
Функция должна:
1.определить с какими ордерами будем иметь дело.. если SigPF==1 , то это обрдера БАЙ (сигнал на покупку), если SigPF==2 , то это ордера СЕЛЛ (Сигнал на продажу)
2.проверить текущую цену и если
в рынке сейчас Бай ордера и был SigPF==1, тогда

разность между текущей ценой, по которой будет открыт ордер Бай, и любой из цен открытия ордеров, что уже есть в рынке больше PF_price_in_pips, тогда функция должна возвратить флаг valid_signal=true


в рынке сейчас Селл ордера и был SigPF==2, тогда

разность между любой из цен открытия ордеров, что уже есть в рынке и текущей ценой по которой будет открыт ордер Селл больше PF_price_in_pips, тогда функция должна возвратить флаг valid_signal=true

если же расстояние между ценой открытия новго ордера при наступлении сигналов на покупку-продажу меньше PF_price_in_pips, тогда функция будет возвращать valid_signal=false

В общем, если в двух словах, функция должна проверить расстояние между ценой открытия нового ордера при сигналах о покупке-продаже (SigPF==1, SigPF==2) и любой из цен открытия ордеров, что есть в рынке уже.. и если это расстояние больше чем PF_price_in_pips, тогда возвращать флаг valid_signal=true, если же это расстояние - меньше, тогда valid_signal=false. Это чтобы не открывались ордера по очень близким друг к другу ценам! И вот еще.. советник у меня торгует только по открытию нового бара.. не на всех тиках.. , хотя, думаю, это не важно.. там все-равно нужно будет рать во внимание цены Бид или Аск..

помогите с такой функцией.. ! Если не понятно что-то я постараюсь объяснить.. или дам картинки! Только помогите) Спасибо!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума Ответить с цитированиемОтветить с цитированием  
13.04.2015, 20:21
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Перебирай ордера в рынке и сравнивай цены их открытия с текущей.
Что-то не вижу проблем.
matro3 на форуме Ответить с цитированиемОтветить с цитированием  
14.04.2015, 00:18
Аватар для vladradon
vladradon Активный участник
Регистрация: 12.02.2015 / Сообщений: 127
Поблагодарили 52 раз(а) / Репутация: 52
Сообщение от Yura Vakulenko Посмотреть сообщение
Привет, друзья, подскажите простейшую функцию, которая если наступят условия.. (SigPF==1 или SigPF==2) и OrdersTotal>0 т.е. нужно обрабатывать только те ордера, которые сейчас в рынке, если наступит одно из условий SigPF.

Внешняя переменная для проверки условия внутри функции..
extern int PF_price_in_pips=70;
Функция должна:
1.определить с какими ордерами будем иметь дело.. если SigPF==1 , то это обрдера БАЙ (сигнал на покупку), если SigPF==2 , то это ордера СЕЛЛ (Сигнал на продажу)
2.проверить текущую цену и если
в рынке сейчас Бай ордера и был SigPF==1, тогда

разность между текущей ценой, по которой будет открыт ордер Бай, и любой из цен открытия ордеров, что уже есть в рынке больше PF_price_in_pips, тогда функция должна возвратить флаг valid_signal=true


в рынке сейчас Селл ордера и был SigPF==2, тогда

разность между любой из цен открытия ордеров, что уже есть в рынке и текущей ценой по которой будет открыт ордер Селл больше PF_price_in_pips, тогда функция должна возвратить флаг valid_signal=true

если же расстояние между ценой открытия новго ордера при наступлении сигналов на покупку-продажу меньше PF_price_in_pips, тогда функция будет возвращать valid_signal=false

В общем, если в двух словах, функция должна проверить расстояние между ценой открытия нового ордера при сигналах о покупке-продаже (SigPF==1, SigPF==2) и любой из цен открытия ордеров, что есть в рынке уже.. и если это расстояние больше чем PF_price_in_pips, тогда возвращать флаг valid_signal=true, если же это расстояние - меньше, тогда valid_signal=false. Это чтобы не открывались ордера по очень близким друг к другу ценам! И вот еще.. советник у меня торгует только по открытию нового бара.. не на всех тиках.. , хотя, думаю, это не важно.. там все-равно нужно будет рать во внимание цены Бид или Аск..

помогите с такой функцией.. ! Если не понятно что-то я постараюсь объяснить.. или дам картинки! Только помогите) Спасибо!
Это уже не функция, а почти полный сов... Больше похоже на ТЗ... Круто ты спросил...))) Там еще не одну функию придется использовать для разных расчетов..

Последний раз редактировалось vladradon; 14.04.2015 в 00:34.
vladradon вне форума Ответить с цитированиемОтветить с цитированием  
14.04.2015, 08:52
Аватар для Yura Vakulenko
Yura Vakulenko Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77
Сообщение от vladradon Посмотреть сообщение
Это уже не функция, а почти полный сов... Больше похоже на ТЗ... Круто ты спросил...))) Там еще не одну функию придется использовать для разных расчетов..
Это всего одна функция. Это не советник. просто все очень подробно расписал..

там нету ничего сложного в функции, просто не могу додуматся как написать.. может знатоки подскажут код..

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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