Ответить
02.04.2016, 05:02
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,626
Поблагодарили 3,760 раз(а) / Репутация: 3752
Да он балуется, не парься.
К чему это баловство, если чётко написано, что если во время выполнения события OnTick() наступит время выполнения события OnTimer(), то оно выполнено не будет и наоборот, если во время выполнения события OnTimer() поступит новый тик, то он будет пропущен.
02.04.2016, 15:58
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
как сделать чтобы не открывались ордера по тем же ценам по которым уже открыты бай на бае селл на селле, напишите код пожалуйста
02.04.2016, 23:13
Аватар для _SERG_
_SERG_ _SERG_ на форуме Активный участник
Регистрация: 21.07.2009 / Сообщений: 280
Поблагодарили 93 раз(а) / Репутация: 93
К чему это баловство, если чётко написано, что если во время выполнения события OnTick() наступит время выполнения события OnTimer(), то оно выполнено не будет и наоборот, если во время выполнения события OnTimer() поступит новый тик, то он будет пропущен.

Доку ща персмотрю.

По избыточной схеме, обработку события можно вешать в тело и онтик и онтаймер, если именно обработка этого события критична для прикладного алгоритма.
03.04.2016, 07:50
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
как сделать чтобы не открывались ордера по тем же ценам по которым уже открыты бай на бае селл на селле, напишите код пожалуйста
Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 07:52.
03.04.2016, 10:19
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
[QUOTE=Elvis Burunduk;1131773]Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.[/QUмне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
03.04.2016, 10:20
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
Сообщение от: Elvis Burunduk
Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.
мне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
03.04.2016, 10:48
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
мне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
А, ну понятно, короче тебе нужно чтобы баи или селлы не плодились на одном уровне.
Типа если есть уже бай тут - то второго не надо, но можно селл.
И наоборот если есть селл, то второго не надо, но можно бай.
Я тебя правильно понял?

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 11:02.
03.04.2016, 11:13
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
Сообщение от: Elvis Burunduk
А, ну понятно, короче тебе нужно чтобы баи или селлы не плодились на одном уровне.
Типа если есть уже бай тут - то второго не надо, но можно селл.
И наоборот если есть селл, то второго не надо, но можно бай.
Я тебя правильно понял?
ага все правильно именно так
03.04.2016, 11:25
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
ага все правильно именно так
Ща найду кусок кода. Не все так быстро.

Там, если вкратце объяснить --- перебираешь уже открытые ордера этого направления(или бай или селл), и если они есть в близком месте - то не открываем текущий, а игнорируем, ждем когда цена убежит за границу дозволенного диапазона.
Тогда можно и повторно открыть.
Наработок много - можно запутаться.
03.04.2016, 11:31
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
Сообщение от: Elvis Burunduk
Ща найду кусок кода. Не все так быстро.

Там, если вкратце объяснить --- перебираешь уже открытые ордера этого направления(или бай или селл), и если они есть в близком месте - то не открываем текущий, а игнорируем, ждем когда цена убежит за границу дозволенного диапазона.
Тогда можно и повторно открыть.
Наработок много - можно запутаться.
да я знаю что надо перебирать, вот и надо мне код чтобы вставить в сов
03.04.2016, 11:50
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
Кароче,
объявляешь в начале совы

extern int Diapazon=50; // или сколько тебе надо... 20-50-100-1000 и т.д.



Перед тем где надо открыть ордер бай , вставляешь это, для проверки.

if (Check_Last_Order_Price(0)<MathAbs(Ask+Diapazon*Po ints)) return;

это не даст открыть ордер бай рядом.

А вот это не даст открыть селл ордер рядом с уже существующим. Это нужно вставить перед тем, где думаешь открыть селл.

if (Check_Last_Order_Price(1)<MathAbs(Bid+Diapazon*Po ints)) return;


Ну и сама функция. Ее нужно вставить куда нибудь в код совы.
Обычно нужен именно последний ордер бай или селл, чтоб не плодить много ордеров на одном уровне.
Я думаю - ты сам понимаешь что старые ордера(на прошлой неделе, у меня и такие есть если чё) можно не учитывать, ведь условия для входа поменялись на этой неделе.

//+------------------------------------------------------------------+
// Функция для определения цены открытия последнего ордера |
//+------------------------------------------------------------------+

double Check_Last_Order_Price(int op)
{
datetime last =0;
double price =-1;

int ordtot=OrdersTotal()-1;
for (int i=ordtot; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderType()==op && OrderMagicNumber()==MagicNumber)
{
if (OrderOpenTime()<last) continue;
last = OrderOpenTime();
price=OrderOpenPrice();
}
continue;
}
}
return(price);
}

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 12:04.
03.04.2016, 12:04
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
Сообщение от: Elvis Burunduk
Кароче,
объявляешь в начале совы

extern int Diapazon=50; // или сколько тебе надо... 20-50-100-1000 и т.д.



Перед тем где надо открыть ордер бай , вставляешь это, для проверки.

if (Check_Last_Order_Price(0)<MathAbs(Ask+Diapazon*Po ints)) return;

это не даст открыть ордер бай рядом.

А вот это не даст открыть селл ордер рядом с уже существующим. Это нужно вставить перед тем, где думаешь открыть селл.

if (Check_Last_Order_Price(1)<MathAbs(Bid+Diapazon*Po ints)) return;


Ну и сама функция. Ее нужно вставить куда нибудь в код совы.
Обычно нужен именно последний ордер бай или селл, чтоб не плодить много ордеров на одном уровне.
Я думаю - ты сам понимаешь что старые ордера(на прошлой неделе, у меня и такие есть если чё) можно не учитывать, ведь условия для входа поменялись сегодня.

//+------------------------------------------------------------------+
// Функция для определения цены открытия последнего ордера |
//+------------------------------------------------------------------+

double Check_Last_Order_Price(int op)
{
datetime last =0;
double price =-1;

int ordtot=OrdersTotal()-1;
for (int i=ordtot; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderType()==op && OrderMagicNumber()==MagicNumber)
{
if (OrderOpenTime()<last) continue;
last = OrderOpenTime();
price=OrderOpenPrice();
}
continue;
}
}
return(price);
}
спс большое за код, будем пробовать
03.04.2016, 12:11
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
спс большое за код, будем пробовать
Ты бы в личку написал бы, я поглядел на свой пост - код вообще нечитаемый(трудно читаемый) , я бы тебе в MQL нормально читаемый прислал бы.
03.04.2016, 12:32
Аватар для sega111
sega111 sega111 вне форума Заблокирован
Регистрация: 13.03.2013 / Сообщений: 20
Поблагодарили 6 раз(а) / Репутация: 6
Сообщение от: Elvis Burunduk
Ты бы в личку написал бы, я поглядел на свой пост - код вообще нечитаемый(трудно читаемый) , я бы тебе в MQL нормально читаемый прислал бы.
ты в личке то не отвечаешь))
03.04.2016, 12:36
Аватар для Elvis Burunduk
Elvis Burunduk Elvis Burunduk на форуме Местный знаток
Регистрация: 08.02.2016 / Сообщений: 544
Поблагодарили 683 раз(а) / Репутация: 704
  • Отправить сообщение для Elvis Burunduk с помощью Skype™
ты в личке то не отвечаешь))
Тока что увидел личку ...))))))
Ответил.

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 12:52.
04.04.2016, 10:47
Аватар для Кушмурунец
Кушмурунец Кушмурунец вне форума Прохожий
Регистрация: 10.04.2013 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте нужна ваша помощь есть индикатор для бо нужно туда прикрутить счетчик сигналов с соотношением винрейта с заданной экспирацией но что бы экспирацию можно было самому указывать и еще что бы он начинал считать со следующей свечи после сигнальной
05.04.2016, 18:20
Аватар для 1Игорь1
1Игорь1 1Игорь1 вне форума Новичок форума
Регистрация: 06.12.2009 / Сообщений: 23
Поблагодарили 0 раз(а) / Репутация: -1
Добрый день.
Давно не пользовался старым советником, поднял оптимизировал, поставил на график, 2-а дня работал, а потом открепился от окна и не прикрепляется, при компиляции выдает выдает ошибки. Не могу понять как такое может быть, сначала работал, затем перестал, помогите пжл поправить, как надо прописать, чтобы ошибка убралась? Вот в двух местах:
1-е место, где пишет ошибку
ошибка '(' - name expected 190 13
ошибка 'int' - name expected 190 20
ошибка '0' - name expected 191 34
ошибка '18' - name expected 191 37
ошибка '*' - semicolon expectede 191 59
ошибка 'return' - expressions are not allowed on a global scope 193 3
ошибка '}' - expressions are not allowed on a global scope 194 1
187 // Показания индикаторов, должны быть в диапазоне от 0 до 1
188 // p - период индикатора
189 // shift - смещение вглубь истории в периодах индикатора
190 double input(int p, int shift) {
191 double result = iRSI(Symbol(), 0, 18, PRICE_OPEN, shift * p) / 100.0;
192 //
193 return (result);
194 }

2-е место, где пишет ошибку
ошибка return value of 'OrderSelect' should be checked 57 7
53 // Количество открытых поз
54 int total = OrdersTotal();
55 // Перебираем открытые позиции
56 for(int i = total - 1; i >= 0; i--) { // Выделяем открытую позицию
57 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
58 // Проверяем на соответствие символу инструмента и магическому номеру
59 if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
60 // Есть открытая позиция, выходим
61
62 return(0);
63 }
64 }
05.04.2016, 18:48
Аватар для Walle2323
Walle2323 Walle2323 вне форума Активный участник
Регистрация: 07.03.2016 / Адрес: Планета Земля. / Сообщений: 110
Поблагодарили 115 раз(а) / Репутация: 116
Сообщение от: 1Игорь1
Добрый день.
Давно не пользовался старым советником, поднял оптимизировал, поставил на график, 2-а дня работал, а потом открепился от окна и не прикрепляется, при компиляции выдает выдает ошибки. Не могу понять как такое может быть, сначала работал, затем перестал, помогите пжл поправить, как надо прописать, чтобы ошибка убралась? Вот в двух местах:
1-е место, где пишет ошибку
ошибка '(' - name expected 190 13
ошибка 'int' - name expected 190 20
ошибка '0' - name expected 191 34
ошибка '18' - name expected 191 37
ошибка '*' - semicolon expectede 191 59
ошибка 'return' - expressions are not allowed on a global scope 193 3
ошибка '}' - expressions are not allowed on a global scope 194 1
187 // Показания индикаторов, должны быть в диапазоне от 0 до 1
188 // p - период индикатора
189 // shift - смещение вглубь истории в периодах индикатора
190 double input(int p, int shift) {
191 double result = iRSI(Symbol(), 0, 18, PRICE_OPEN, shift * p) / 100.0;
192 //
193 return (result);
194 }

2-е место, где пишет ошибку
ошибка return value of 'OrderSelect' should be checked 57 7
53 // Количество открытых поз
54 int total = OrdersTotal();
55 // Перебираем открытые позиции
56 for(int i = total - 1; i >= 0; i--) { // Выделяем открытую позицию
57 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
58 // Проверяем на соответствие символу инструмента и магическому номеру
59 if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
60 // Есть открытая позиция, выходим
61
62 return(0);
63 }
64 }
Проверьте

Код:
double input_Funk(int p, int shift) { // Изменить имя вызова функции  !!!!!
 double result = iRSI(Symbol(), 0, 18, PRICE_OPEN, shift * p) / 100.0;
 //
 return (result);
 }
Код:
// Перебираем открытые позиции
 for(int i = OrdersTotal() - 1; i >= 0; i--) { // Выделяем открытую позицию
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Проверка - Возвращает true при успешном завершении функции или false в случае ошибки
 // Проверяем на соответствие символу инструмента и магическому номеру
   if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
 // Есть открытая позиция, выходим
 return(0);
 }
 }
05.04.2016, 19:12
Аватар для 1Игорь1
1Игорь1 1Игорь1 вне форума Новичок форума
Регистрация: 06.12.2009 / Сообщений: 23
Поблагодарили 0 раз(а) / Репутация: -1
Спасибо большое, уважаемый Walle2323. А как до этого работало? что такое случилось?
И подскажите, пжл, где надо "Изменить имя вызова функции!!!" и на какое имя, чтобы заработало?
Выдает еще 2-е ошибки, одна подобная, как их поправить?:

ошибка input' - unexpected token 117 16
ошибка ',' - unexpected token 117 23
ошибка 'input' - unexpected token 118 29
ошибка ',' - unexpected token 118 36
ошибка 'input' - unexpected token 119 29
ошибка ',' - unexpected token 119 36
113 // Преобразует вероятность в торговый сигнал
114
115 double tradesSingal() {
116 // Считываем показания индикаторов
117 double a1 = input(9, 0);
118 double a2 = sigmoid(a1 - input(9, 1));
119 double a3 = sigmoid(a1 - input(9, 2));
120
121 // Вычисляем вероятность торгового сигнала для короткой позиции
122 double result = getProbability(a1, a2, a3);
123

ошибка return value of 'OrderSelect' should be checked 211 7
208 else {
209 int total = OrdersHistoryTotal();
210 for (int i = 0; i < total; i++) {
211 OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
212 if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
213 if (OrderCloseTime() > lasttime) {profit = OrderProfit();}
214 else {result = lots;}
215 }
05.04.2016, 19:18
Аватар для 1Игорь1
1Игорь1 1Игорь1 вне форума Новичок форума
Регистрация: 06.12.2009 / Сообщений: 23
Поблагодарили 0 раз(а) / Репутация: -1
Посмотрите, пжл, может у меня не правильно написан Мартин, иногда он почему-то делает лот больше, чем выставленный коэфициент. Вот он весь, и ошибка в нем же:
201 // Размер лота для мартингейла
202 double getLots(double sp) {
203 int lasttime = 0;
204 double profit = 0;
205 double result = 0;
206
207 if (mart < 1) {result = lots;}
208 else {
209 int total = OrdersHistoryTotal();
210 for (int i = 0; i < total; i++) {
211 OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
212 if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mn)) {
213 if (OrderCloseTime() > lasttime) {profit = OrderProfit();}
214 else {result = lots;}
215 }
216 }
217 if ((profit >= 0.0) || (total == 0)) {result = lots;}
218 else {result = OrderLots() * Kmart;}
219 }
220 result = NormalizeDouble(result, 2);
221 return(result);
222 }
Ответить

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


Опции темы

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

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



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


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