Ответить
05.04.2015, 19:33
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,950 раз(а) / Репутация: 2027
Добрый вечер!
Подкиньте, пожалуйста, кусок кода, которым можно ограничить торговлю советника в определенный месяц.
Цитата:
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
Чужие программы не переделываю!
Yurkov 
06.04.2015, 06:09
Аватар для Yurkov
Yurkov Yurkov на форуме Почётный гражданин
Регистрация: 19.01.2011 / Сообщений: 659
Поблагодарили 364 раз(а) / Репутация: 367
К примеру надо что бы что то не делалось только в марте и декабре
if(Month()!=3 && Month()!=12)
{
//Здесь что надо делать кроме марта и декабря
}
А что написать, чтоб не торговал в эти месяцы?

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

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

P.S.
Вписал
if(Month()==3)
{
return(0);
}
И в марте торговли нет. Правильно или нет не знаю, но вроде как работает, спасибо!)
Этот код буквально означает что всё что после него в марте не будет работать.
Стоит помнить что если это вся работа советника после этих строк, советник полностью прекратит работу. А если сделки открытые остались и их надо до сопроводить до закрытия, или что то надо завершить. То эти операции надо разместить до этих строк, если нужно что бы они работали всегда. Или внутри фигурных скобок, перед ретурн, если нужно что бы они работали только в марте.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Abi , vladradon 
06.04.2015, 13:03
Аватар для Abi
Abi Abi вне форума Элитный участник
Регистрация: 21.12.2010 / Адрес: Kz Казахстан / Сообщений: 970
Поблагодарили 1,694 раз(а) / Репутация: 1696
Ugar все очень четко и правильно предупредил.
Нужно точно знать, что делать с ордерами, которые остались в рынке, если наступил март:
1) либо выше по коду ставить условия по их закрытию-тралению-локированию и т.п. на ваше усмотрение
2) либо внутри скобок перед return(0); писать, что с текущими ордерами делать...
Ugar 
10.04.2015, 04:17
Аватар для svoi
svoi svoi вне форума Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 601
Поблагодарили 893 раз(а) / Репутация: 897
Уважаемые программисты!
Вот тут периодически возникает ошибка :

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

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 можно объявить на глобальном уровне, но от этого ничего особо не изменится.
svoi 
10.04.2015, 06:07
Аватар для svoi
svoi svoi вне форума Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 601
Поблагодарили 893 раз(а) / Репутация: 897
Что-то у тебя из серии очевидное не вероятное... Не должно быть такого...
Если хочешь возьми мою функцию.
Код:
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-ого бара спецом?
10.04.2015, 06:23
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Спасибо за функцию, но суть таже. Попробую с функцией iTime еще. Может это ДЦ не дает время 0-ого бара спецом?
А другой сути и быть не может. Есть время открытия бара и оно проверяется на неравенство.
ДЦ не может давать или не давать время открытия бара, оно берётся с сервера независимо от желания брокера вместе с очередным тиком, а уже в терминале определяется наступление нового бара какого-то периода.
Когда получишь ошибку посмотри номер строки и сравни с номером строки своего кода. Что-то кажется мне что не в этой строке ошибка.
Индикатор пишешь\правишь?
10.04.2015, 06:29
Аватар для svoi
svoi svoi вне форума Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 601
Поблагодарили 893 раз(а) / Репутация: 897
А другой сути и быть не может. Есть время открытия бара и оно проверяется на неравенство.
ДЦ не может давать или не давать время открытия бара, оно берётся с сервера независимо от желания брокера вместе с очередным тиком, а уже в терминале определяется наступление нового бара какого-то периода.
Когда получишь ошибку посмотри номер строки и сравни с номером строки своего кода. Что-то кажется мне что не в этой строке ошибка.
Индикатор пишешь\правишь?
Это советник:
вот лог:
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

вот кусок кода:
10.04.2015, 07:05
Аватар для vlad_123
vlad_123 vlad_123 на форуме Местный знаток
Регистрация: 29.01.2013 / Сообщений: 417
Поблагодарили 902 раз(а) / Репутация: 906
Это советник:
вот лог:
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

На заказ не программирую.
10.04.2015, 07:11
Аватар для svoi
svoi svoi вне форума Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 601
Поблагодарили 893 раз(а) / Репутация: 897
Поищи - не объявляется ли где-нибудь в твоем коде массив Time[]
В этом случае MetaEditor при компиляции просто выдает варнинг:
Неа , он только в этом куске, ща переделал на iTime пока нет ошибки. Странно как-то, техподдержка молчит как всегда.
10.04.2015, 15:00
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Это советник:
вот лог:
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
10.04.2015, 15:59
Аватар для svoi
svoi svoi вне форума Местный знаток
Регистрация: 10.04.2013 / Адрес: Москва / Сообщений: 601
Поблагодарили 893 раз(а) / Репутация: 897
А в строке 168 что? И при каких делах тут индикатор MACD_ColorHist_Alert_1_1
168-21 это другая версия такого же советника, а Макдак просто стоит на графике, возможно был обрыв связи и заново инициализация индикатора. С iTime пока нет ошибки.
13.04.2015, 14:20
Аватар для owjedi
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);
}
13.04.2015, 14:59
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
В хелпе написано, что можно возвращать простые структуры.
_http://docs.mql4.com/ru/basis/types/classes#simple_structure

Последний раз редактировалось NSerega; 13.04.2015 в 15:31.
owjedi 
13.04.2015, 15:43
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,950 раз(а) / Репутация: 2027
Может ли пользовательская функция типа 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
Чужие программы не переделываю!
owjedi 
13.04.2015, 18:38
Аватар для Yura Vakulenko
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
13.04.2015, 20:21
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Перебирай ордера в рынке и сравнивай цены их открытия с текущей.
Что-то не вижу проблем.
14.04.2015, 00:18
Аватар для vladradon
vladradon vladradon вне форума Активный участник
Регистрация: 12.02.2015 / Сообщений: 167
Поблагодарили 65 раз(а) / Репутация: 64
Сообщение от: 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.
14.04.2015, 08:52
Аватар для Yura Vakulenko
Yura Vakulenko Yura Vakulenko вне форума Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77
Это уже не функция, а почти полный сов... Больше похоже на ТЗ... Круто ты спросил...))) Там еще не одну функию придется использовать для разных расчетов..
Это всего одна функция. Это не советник. просто все очень подробно расписал..

там нету ничего сложного в функции, просто не могу додуматся как написать.. может знатоки подскажут код..
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Ответить

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


Опции темы

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

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



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


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