Ответ
 
Опции темы
Старый 23.03.2015, 07:33   #3681 (permalink)
Прохожий
За призовое место в конкурсе 

 
Аватар для Fairy
 
Регистрация: 23.03.2015
Сообщений: 2
Репутация: 1
Fairy
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Благодарю за ваше внимание Г-да программисты.

Вопрос:
До 600 билда проблем особо не было. Но с его появлением у 90% моих индикаторов перестал работать counted_bars.
3 Месяца ломала голову и придумала разбивать код на части, вводя его порциями через iCustom. Таким образом необходимые мне индикаторы опять заработали через counted_bars.
Но есть ряд индикаторов, которым мне нужно добавить TimeFrame. Но тут у меня плывут все линии.
Первый iCustom я получаю из кода RSI. В нем видимо вся проблема. Пыталась заменить его на iRSI c добавлением counted_bars, но через iRSI я получаю совершенно не те параметры для работы индикатора, так как в этом случае надо указывать буфер. А буфер занят параметром mode.
Потому в итоге в конечном коде у меня есть просто набор буферов, работающих через iCustom, и counted_bars прекрасно со своей работой справляется. Но вот TimeFrame который нужен позарез заставляет все линии плыть. Может подскажите мне какую не будь формулу для оптимизации значения TimeFrame чтобы линии не плыли?
Fairy вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.03.2015, 12:52   #3682 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22

По умолчанию Может ли советник работать без привязки к окну графика


Подскажите пожалуйста кто в "теме":
Может ли советник работать без привязки к окну графика?
Через какую функцию вернуть факт получения тика по любому инструменту счета, возможно ли это?
Я написал простенький советник, но работает он у меня только на графике, а я хочу не открывать десятки графиков и запускать его в них, а чтобы он сам производил мониторинг инструментов счета.
Есть ли какие-нибудь стандартные функции через которые это можно реализовать?
Какие функции обработки событий использовать?
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.03.2015, 14:27   #3683 (permalink)
Местный житель
 
Аватар для Cemen4yk1
 
Регистрация: 18.09.2014
Сообщений: 222
Репутация: 245
Cemen4yk1 - Cemen4yk1 - Cemen4yk1 -
Сказал(а) спасибо: 35
Поблагодарили 244 раз(а) в 101 сообщениях
Поинты: 205
Сообщение от owjedi Посмотреть сообщение
Подскажите пожалуйста кто в "теме":
Может ли советник работать без привязки к окну графика?
Через какую функцию вернуть факт получения тика по любому инструменту счета, возможно ли это?
Я написал простенький советник, но работает он у меня только на графике, а я хочу не открывать десятки графиков и запускать его в них, а чтобы он сам производил мониторинг инструментов счета.
Есть ли какие-нибудь стандартные функции через которые это можно реализовать?
Какие функции обработки событий использовать?
ну на 1 график та его повесить всёравно придётся, а "обращатся" он может к любым "символам" есть же Symbol() и пляшите от него
Cemen4yk1 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.03.2015, 16:18   #3684 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от Cemen4yk1 Посмотреть сообщение
ну на 1 график та его повесить всёравно придётся, а "обращатся" он может к любым "символам" есть же Symbol() и пляшите от него
Symbol() возвращает имя символа текущего графика. А я то от графика и хочу отвязаться и обрабатывать тики полученные по другим символам счета.
Есть у меня функция индикатора, туда же через запятую символы не впишешь. Надо переменную, переменной присвоить символы. Вот тут и вопрос в какой момент советник понимает, что поступил тик по символу не принадлежащему данному графику, но указанному мной в переменной.
Или я все не так понимаю.
И еще подскажите, пожалуйста, функция Start срабатывает при поступлении любого тика в терминале по счету или тика графика на котором прикреплен советник. Или надо какой-то другой обработчик событий использовать. Есть onTick, но не могу понять как он работает и чем отличается от Start.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.03.2015, 20:49   #3685 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,254
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1274
Отправить сообщение для Ugar с помощью ICQ
Сообщение от owjedi Посмотреть сообщение
Symbol() возвращает имя символа текущего графика. А я то от графика и хочу отвязаться и обрабатывать тики полученные по другим символам счета.
Есть у меня функция индикатора, туда же через запятую символы не впишешь. Надо переменную, переменной присвоить символы. Вот тут и вопрос в какой момент советник понимает, что поступил тик по символу не принадлежащему данному графику, но указанному мной в переменной.
Или я все не так понимаю.
И еще подскажите, пожалуйста, функция Start срабатывает при поступлении любого тика в терминале по счету или тика графика на котором прикреплен советник. Или надо какой-то другой обработчик событий использовать. Есть onTick, но не могу понять как он работает и чем отличается от Start.
В советнике OnTick и Start обе эти функции выполняются одинаково, с приходом тика по символу на графике которого он стоит.
Как вариант есть OnTimer(). Он по времени.
Можно сравнивать прошлую цену с текущей по любому символу, если цена изменилась, значит по нему есть тик.

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

Последний раз редактировалось Ugar; 24.03.2015 в 20:51.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
owjedi (26.03.2015)
Старый 25.03.2015, 15:59   #3686 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от owjedi Посмотреть сообщение
Symbol() возвращает имя символа текущего графика. А я то от графика и хочу отвязаться и обрабатывать тики полученные по другим символам счета.
Есть у меня функция индикатора, туда же через запятую символы не впишешь. Надо переменную, переменной присвоить символы. Вот тут и вопрос в какой момент советник понимает, что поступил тик по символу не принадлежащему данному графику, но указанному мной в переменной.
Или я все не так понимаю.
И еще подскажите, пожалуйста, функция Start срабатывает при поступлении любого тика в терминале по счету или тика графика на котором прикреплен советник. Или надо какой-то другой обработчик событий использовать. Есть onTick, но не могу понять как он работает и чем отличается от Start.
У данного вопроса есть варианты.
Сам такой вопрос раньше задавал.
Определись с целями и выбери решение.
Решения: "Надстройка" или циклический опрос инструментов.
Отличаются реализацией. Можешь все котировки из МТ4 в PIP толкать и там своим приложением обрабатывать, со всеми вытекающими. (Ну пропустишь одну котировку, что это завалит всю систему?)

Последний раз редактировалось _SERG_; 25.03.2015 в 16:23.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
owjedi (26.03.2015)
Старый 25.03.2015, 18:58   #3687 (permalink)
Прохожий
 
Аватар для dimon_777
 
Регистрация: 22.02.2011
Сообщений: 2
Репутация: 1
dimon_777
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Добрый вечер!
Составил функцию - гляньте пожалуйста правильно ли

int Bar_Order() //фунция - был ли открыт ордер на текущем баре
{
RefreshRates();
int order = 0; //сколько ордеров открывалось на текущем баре (обнуляем)
datetime time_open = 0; //время открытия последнего ордера(обнуляем)
datetime otk_bar = Time[0]; //узнаем время открытия текущего бара
for(int i=OrdersHistoryTotal()-1; i >=0; i --) //выбираем из истории последний закрытый ордер
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true) //если выбрали...
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)//если выбрали...
time_open = OrderOpenTime(); //узнаем время открытия последнего ордера
if(time_open >= otk_bar) order=1; //возвращаем order=1 - был открыт ордер на текущем баре
else order=0; // order=0 - не открывался ордер на текущем баре
}
return(order);
}
dimon_777 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.03.2015, 21:51   #3688 (permalink)
Прохожий
 
Аватар для dimon_777
 
Регистрация: 22.02.2011
Сообщений: 2
Репутация: 1
dimon_777
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
пока ждал ответ понял в чем ошибка:
эти две переменных надо было объявить в начале , а не в функции

datetime time_open , otk_bar;

перед

int OnInit()
dimon_777 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.03.2015, 23:12   #3689 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
_http://forum.mql4.com/ru/38949/page4#434235
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.03.2015, 07:46   #3690 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от _SERG_ Посмотреть сообщение
У данного вопроса есть варианты.
Сам такой вопрос раньше задавал.
Определись с целями и выбери решение.
Решения: "Надстройка" или циклический опрос инструментов.
Отличаются реализацией. Можешь все котировки из МТ4 в PIP толкать и там своим приложением обрабатывать, со всеми вытекающими. (Ну пропустишь одну котировку, что это завалит всю систему?)
Большое спасибо. С целями определился. Пока вопрос c мультивалютной работой моего советника решил вот так:

int start()
{
int _symbolsTotal = SymbolsTotal(false); // true – только символы в MarketWatch
int i;
for (i=0;i<_symbolsTotal;i++)
{
string _symbolName = SymbolName(i,false); // номер в списке / true – только символы в MarketWatch
\\--------------------------------------------------
Мой советник (_symbolName);
\\-------------------------------------------------
}
return (0);
}
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.03.2015, 21:32   #3691 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от owjedi Посмотреть сообщение
Большое спасибо. С целями определился. Пока вопрос c мультивалютной работой моего советника решил вот так:

int start()
{
int _symbolsTotal = SymbolsTotal(false); // true – только символы в MarketWatch
int i;
for (i=0;i<_symbolsTotal;i++)
{
string _symbolName = SymbolName(i,false); // номер в списке / true – только символы в MarketWatch
\\--------------------------------------------------
Мой советник (_symbolName);
\\-------------------------------------------------
}
return (0);
}
Ну это только перебор символов рынка, по поступившей котировке, и никак не мультивалютник. А что касается "Мой советник (_symbolName);" то именно здесь и суть будет. Надо рассмотреть, как это на самом деле работает, а не как ты об этом думаешь. Обработку ордеров советника, котировки по инструментам, обновление цен...... и т.д.

Последний раз редактировалось _SERG_; 26.03.2015 в 21:40.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 27.03.2015, 06:55   #3692 (permalink)
Интересующийся
 
Аватар для ViMax
 
Регистрация: 21.03.2015
Сообщений: 4
Репутация: 1
ViMax
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 8
Доброго дня, уважаемые!

Подскажите, пожалуйста...
Как и где и какую функцию прописать в советнике, что бы он проверял, входной параметр MagicNumber?
Пример:
if MagicNumber=AccountNumber*2-12345

Т.е. получается, что MagicNumber, будет для разных счетов, разный.

Заранее благодарен!
ViMax вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.03.2015, 05:58   #3693 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от ViMax Посмотреть сообщение
Доброго дня, уважаемые!

Подскажите, пожалуйста...
Как и где и какую функцию прописать в советнике, что бы он проверял, входной параметр MagicNumber?
Пример:
if MagicNumber=AccountNumber*2-12345

Т.е. получается, что MagicNumber, будет для разных счетов, разный.

Заранее благодарен!
Магик обычно проверяется при закрытии ордеров или подсчете профита или суммарного лота - т.е. в функциях каких-то при наличии уже открытых ордеров. Магик для разных счетов может быть одинаковый - он и нужен для того, чтобы на одном счете и одном инструменте торгов различать ордера от разных сов или по направлению торгов (разделение по бай и селл) или и то и другое. Вот к примеру простая функция закрытия всех ордеров с заданным магиком.
void closeall()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
int x=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Magic)
{
if(OrderType()==OP_BUY) x=OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue) ;
if(OrderType()==OP_SELL) x=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
}
}
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.03.2015, 06:37   #3694 (permalink)
Почётный гражданин
 
Аватар для kamilkz
 
Регистрация: 10.03.2010
Сообщений: 278
Репутация: 326
kamilkz kamilkz kamilkz kamilkz
Сказал(а) спасибо: 1,706
Поблагодарили 325 раз(а) в 124 сообщениях
Поинты: 18
Приветствую всех!
Недавно начал изучать программирование, сейчас в начальной (ясельной) стадии.
У меня просьба: нужна функция для определения расстояния от цены до ближайшего отложенного ордера.
Как оформить - меня затрудняет. Помогите, пожалуйста. Заранее благодарю.
kamilkz на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 28.03.2015, 08:33   #3695 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от kamilkz Посмотреть сообщение
Приветствую всех!
Недавно начал изучать программирование, сейчас в начальной (ясельной) стадии.
У меня просьба: нужна функция для определения расстояния от цены до ближайшего отложенного ордера.
Как оформить - меня затрудняет. Помогите, пожалуйста. Заранее благодарю.
int Spread()
{
int a=-1, b=0;
int r;
for (r=0;r<OrdersTotal();r++)
{
if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)) b=MathAbs(Bid-OrderOpenPrice())/_Point;
if (b>0 && a<0) a=b;
if (a>0 && b>0 && a>b) a=b;
}
}
return(a);
}
Как вариант. Вернет -1, если не найдет отложенников, либо расстояние в пунктах до ближайшего.
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
kamilkz (28.03.2015)
Старый 28.03.2015, 08:47   #3696 (permalink)
Почётный гражданин
 
Аватар для kamilkz
 
Регистрация: 10.03.2010
Сообщений: 278
Репутация: 326
kamilkz kamilkz kamilkz kamilkz
Сказал(а) спасибо: 1,706
Поблагодарили 325 раз(а) в 124 сообщениях
Поинты: 18
Спасибо большое.
kamilkz на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 28.03.2015, 21:56   #3697 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от _SERG_ Посмотреть сообщение
Ну это только перебор символов рынка, по поступившей котировке, и никак не мультивалютник. А что касается "Мой советник (_symbolName);" то именно здесь и суть будет. Надо рассмотреть, как это на самом деле работает, а не как ты об этом думаешь. Обработку ордеров советника, котировки по инструментам, обновление цен...... и т.д.
Так и есть, меня перебор то подумать и заставил. И спросить не знал как и посмотреть негде. Сам советник строю на Ишимоку, по моему ему все равно на какой паре работать. Обработка ордеров, котировки по инструментам, обновление цен все это важно, но это второй этап. Самое главное, что он пересечения тенкан и киджун с подтверждением чикоуспан по всем инструментам ищет и на почту уведомления мне отправляет. А Ваш мультивалютник работает? Я видел вы моим вопросом постов 100 назад задались.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 06:40   #3698 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от kamilkz Посмотреть сообщение
Спасибо большое.
Помогло хоть? Я функцию чирканул чисто по твоим данным, что ты описал в вопросе, но в ней нет проверки меджика и разграничений между buy и sell из отложенников. Добавить мной перечисленное не сложно, но придется уже не один параметр выводить и функцию в разряд void прописать. В любом случае удачи!
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 13:18   #3699 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от owjedi Посмотреть сообщение
Так и есть, меня перебор то подумать и заставил. И спросить не знал как и посмотреть негде. Сам советник строю на Ишимоку, по моему ему все равно на какой паре работать. Обработка ордеров, котировки по инструментам, обновление цен все это важно, но это второй этап. Самое главное, что он пересечения тенкан и киджун с подтверждением чикоуспан по всем инструментам ищет и на почту уведомления мне отправляет. А Ваш мультивалютник работает? Я видел вы моим вопросом постов 100 назад задались.
Всё поместил в OnTimer(), по факту зациклил.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 13:47   #3700 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от _SERG_ Посмотреть сообщение
Всё поместил в OnTimer(), по факту зациклил.
OnTimer() должен срабатывать если торговля закрыта или нет?

Я тоже сегодня в него поместил:

void OnTimer()
{
Print("Сработал таймер на выполнение алгоритма");

А сообщения в журнале не вижу.

Он разве по природе своей не циклически работает?

Сталкивались с тем, что алгоритм в тестере работает без ошибок, а на счете вообще не работает? В тестере пересечения по всем инструментам в журнал пишет. А на счете молчит ни в журнал ни на почту, а я жду от него писем с сигналами, думал нет еще пересечений, смотрю так по 3-м парам фунту, йене и евро. А сегодня случайно тестил по сегодняшний день и в тесте каждый день по 3 сигнала по всяким парам и акциям. По информации с журнала тестера все сигналы на своих инструментах-графиках фактически есть, а терминал на VPS молчал все эти дни.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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