Ответ
 
Опции темы
23.03.2015, 07:33
Аватар для Fairy
Fairy Прохожий
За призовое место в конкурсе 

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

Вопрос:
До 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
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

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


Подскажите пожалуйста кто в "теме":
Может ли советник работать без привязки к окну графика?
Через какую функцию вернуть факт получения тика по любому инструменту счета, возможно ли это?
Я написал простенький советник, но работает он у меня только на графике, а я хочу не открывать десятки графиков и запускать его в них, а чтобы он сам производил мониторинг инструментов счета.
Есть ли какие-нибудь стандартные функции через которые это можно реализовать?
Какие функции обработки событий использовать?
owjedi вне форума Ответить с цитированиемОтветить с цитированием  
24.03.2015, 14:27
Аватар для Cemen4yk1
Cemen4yk1 Местный житель
Регистрация: 18.09.2014 / Сообщений: 227
Поблагодарили 247 раз(а) / Репутация: 248
Сообщение от owjedi Посмотреть сообщение
Подскажите пожалуйста кто в "теме":
Может ли советник работать без привязки к окну графика?
Через какую функцию вернуть факт получения тика по любому инструменту счета, возможно ли это?
Я написал простенький советник, но работает он у меня только на графике, а я хочу не открывать десятки графиков и запускать его в них, а чтобы он сам производил мониторинг инструментов счета.
Есть ли какие-нибудь стандартные функции через которые это можно реализовать?
Какие функции обработки событий использовать?
ну на 1 график та его повесить всёравно придётся, а "обращатся" он может к любым "символам" есть же Symbol() и пляшите от него
Cemen4yk1 на форуме Ответить с цитированиемОтветить с цитированием  
24.03.2015, 16:18
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Сообщение от Cemen4yk1 Посмотреть сообщение
ну на 1 график та его повесить всёравно придётся, а "обращатся" он может к любым "символам" есть же Symbol() и пляшите от него
Symbol() возвращает имя символа текущего графика. А я то от графика и хочу отвязаться и обрабатывать тики полученные по другим символам счета.
Есть у меня функция индикатора, туда же через запятую символы не впишешь. Надо переменную, переменной присвоить символы. Вот тут и вопрос в какой момент советник понимает, что поступил тик по символу не принадлежащему данному графику, но указанному мной в переменной.
Или я все не так понимаю.
И еще подскажите, пожалуйста, функция Start срабатывает при поступлении любого тика в терминале по счету или тика графика на котором прикреплен советник. Или надо какой-то другой обработчик событий использовать. Есть onTick, но не могу понять как он работает и чем отличается от Start.
owjedi вне форума Ответить с цитированиемОтветить с цитированием  
24.03.2015, 20:49
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от 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
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от owjedi Посмотреть сообщение
Symbol() возвращает имя символа текущего графика. А я то от графика и хочу отвязаться и обрабатывать тики полученные по другим символам счета.
Есть у меня функция индикатора, туда же через запятую символы не впишешь. Надо переменную, переменной присвоить символы. Вот тут и вопрос в какой момент советник понимает, что поступил тик по символу не принадлежащему данному графику, но указанному мной в переменной.
Или я все не так понимаю.
И еще подскажите, пожалуйста, функция Start срабатывает при поступлении любого тика в терминале по счету или тика графика на котором прикреплен советник. Или надо какой-то другой обработчик событий использовать. Есть onTick, но не могу понять как он работает и чем отличается от Start.
У данного вопроса есть варианты.
Сам такой вопрос раньше задавал.
Определись с целями и выбери решение.
Решения: "Надстройка" или циклический опрос инструментов.
Отличаются реализацией. Можешь все котировки из МТ4 в PIP толкать и там своим приложением обрабатывать, со всеми вытекающими. (Ну пропустишь одну котировку, что это завалит всю систему?)

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

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
Аватар для dimon_777
dimon_777 Прохожий
Регистрация: 22.02.2011 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
пока ждал ответ понял в чем ошибка:
эти две переменных надо было объявить в начале , а не в функции

datetime time_open , otk_bar;

перед

int OnInit()
dimon_777 вне форума Ответить с цитированиемОтветить с цитированием  
25.03.2015, 23:12
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
_http://forum.mql4.com/ru/38949/page4#434235
matro3 на форуме Ответить с цитированиемОтветить с цитированием  
26.03.2015, 07:46
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Сообщение от _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
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от 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
Аватар для ViMax
ViMax Интересующийся
Регистрация: 21.03.2015 / Сообщений: 4
Поблагодарили 0 раз(а) / Репутация: 1
Доброго дня, уважаемые!

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

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

Заранее благодарен!
ViMax вне форума Ответить с цитированиемОтветить с цитированием  
28.03.2015, 05:58
Аватар для vladradon
vladradon Активный участник
Регистрация: 12.02.2015 / Сообщений: 127
Поблагодарили 52 раз(а) / Репутация: 52
Сообщение от 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
Аватар для kamilkz
kamilkz Почётный гражданин
Регистрация: 10.03.2010 / Сообщений: 290
Поблагодарили 336 раз(а) / Репутация: 337
Приветствую всех!
Недавно начал изучать программирование, сейчас в начальной (ясельной) стадии.
У меня просьба: нужна функция для определения расстояния от цены до ближайшего отложенного ордера.
Как оформить - меня затрудняет. Помогите, пожалуйста. Заранее благодарю.
kamilkz на форуме Ответить с цитированиемОтветить с цитированием  
28.03.2015, 08:33
Аватар для vladradon
vladradon Активный участник
Регистрация: 12.02.2015 / Сообщений: 127
Поблагодарили 52 раз(а) / Репутация: 52
Сообщение от 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
Аватар для kamilkz
kamilkz Почётный гражданин
Регистрация: 10.03.2010 / Сообщений: 290
Поблагодарили 336 раз(а) / Репутация: 337
Спасибо большое.
kamilkz на форуме Ответить с цитированиемОтветить с цитированием  
28.03.2015, 21:56
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Сообщение от _SERG_ Посмотреть сообщение
Ну это только перебор символов рынка, по поступившей котировке, и никак не мультивалютник. А что касается "Мой советник (_symbolName);" то именно здесь и суть будет. Надо рассмотреть, как это на самом деле работает, а не как ты об этом думаешь. Обработку ордеров советника, котировки по инструментам, обновление цен...... и т.д.
Так и есть, меня перебор то подумать и заставил. И спросить не знал как и посмотреть негде. Сам советник строю на Ишимоку, по моему ему все равно на какой паре работать. Обработка ордеров, котировки по инструментам, обновление цен все это важно, но это второй этап. Самое главное, что он пересечения тенкан и киджун с подтверждением чикоуспан по всем инструментам ищет и на почту уведомления мне отправляет. А Ваш мультивалютник работает? Я видел вы моим вопросом постов 100 назад задались.
owjedi вне форума Ответить с цитированиемОтветить с цитированием  
29.03.2015, 06:40
Аватар для vladradon
vladradon Активный участник
Регистрация: 12.02.2015 / Сообщений: 127
Поблагодарили 52 раз(а) / Репутация: 52
Сообщение от kamilkz Посмотреть сообщение
Спасибо большое.
Помогло хоть? Я функцию чирканул чисто по твоим данным, что ты описал в вопросе, но в ней нет проверки меджика и разграничений между buy и sell из отложенников. Добавить мной перечисленное не сложно, но придется уже не один параметр выводить и функцию в разряд void прописать. В любом случае удачи!
vladradon вне форума Ответить с цитированиемОтветить с цитированием  
29.03.2015, 13:18
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от owjedi Посмотреть сообщение
Так и есть, меня перебор то подумать и заставил. И спросить не знал как и посмотреть негде. Сам советник строю на Ишимоку, по моему ему все равно на какой паре работать. Обработка ордеров, котировки по инструментам, обновление цен все это важно, но это второй этап. Самое главное, что он пересечения тенкан и киджун с подтверждением чикоуспан по всем инструментам ищет и на почту уведомления мне отправляет. А Ваш мультивалютник работает? Я видел вы моим вопросом постов 100 назад задались.
Всё поместил в OnTimer(), по факту зациклил.
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
29.03.2015, 13:47
Аватар для owjedi
owjedi Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Сообщение от _SERG_ Посмотреть сообщение
Всё поместил в OnTimer(), по факту зациклил.
OnTimer() должен срабатывать если торговля закрыта или нет?

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

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

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

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

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

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


Опции темы

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

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



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


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