Ответ
 
Опции темы
Старый 02.04.2016, 05:02   #4721 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,114
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от _SERG_ Посмотреть сообщение
Да он балуется, не парься.
К чему это баловство, если чётко написано, что если во время выполнения события OnTick() наступит время выполнения события OnTimer(), то оно выполнено не будет и наоборот, если во время выполнения события OnTimer() поступит новый тик, то он будет пропущен.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 02.04.2016, 15:58   #4722 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
как сделать чтобы не открывались ордера по тем же ценам по которым уже открыты бай на бае селл на селле, напишите код пожалуйста
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.04.2016, 23:13   #4723 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от AlexeyVik Посмотреть сообщение
К чему это баловство, если чётко написано, что если во время выполнения события OnTick() наступит время выполнения события OnTimer(), то оно выполнено не будет и наоборот, если во время выполнения события OnTimer() поступит новый тик, то он будет пропущен.

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

По избыточной схеме, обработку события можно вешать в тело и онтик и онтаймер, если именно обработка этого события критична для прикладного алгоритма.
_SERG_ вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 07:50   #4724 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Сообщение от sega111 Посмотреть сообщение
как сделать чтобы не открывались ордера по тем же ценам по которым уже открыты бай на бае селл на селле, напишите код пожалуйста
Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 07:52.
Elvis Burunduk на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 10:19   #4725 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
[QUOTE=Elvis Burunduk;1131773]Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.[/QUмне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 10:20   #4726 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
Сообщение от Elvis Burunduk Посмотреть сообщение
Ты слишком общо написал. как тебе надо, чтоб не открывал лишние ордера? Я так понимаю ты советник пишешь?
Как чтобы он не открывал?
На той же свече или на том же уровне цены??? Или еще как???
Есть много функций уже написанных. На всякие случаи жизни. И чтоб на той же свече не открывал, и чтоб на том же уровне цены +-10, 20, 50пп.(сам задаешь какой размер) не открывал добавочный ордер.
мне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 10:48   #4727 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Сообщение от sega111 Посмотреть сообщение
мне нужно чтобы сов не открывал ордера по ценам по которым уже открыты ордера,допусти открыт ордер бай по этой цене может октрыться только селл противоположный ордер,а баевский ордер не может открыться так как уже на этой цене есть ордер в бай
А, ну понятно, короче тебе нужно чтобы баи или селлы не плодились на одном уровне.
Типа если есть уже бай тут - то второго не надо, но можно селл.
И наоборот если есть селл, то второго не надо, но можно бай.
Я тебя правильно понял?

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 11:02.
Elvis Burunduk на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 11:13   #4728 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
Сообщение от Elvis Burunduk Посмотреть сообщение
А, ну понятно, короче тебе нужно чтобы баи или селлы не плодились на одном уровне.
Типа если есть уже бай тут - то второго не надо, но можно селл.
И наоборот если есть селл, то второго не надо, но можно бай.
Я тебя правильно понял?
ага все правильно именно так
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 11:25   #4729 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Сообщение от sega111 Посмотреть сообщение
ага все правильно именно так
Ща найду кусок кода. Не все так быстро.

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

Там, если вкратце объяснить --- перебираешь уже открытые ордера этого направления(или бай или селл), и если они есть в близком месте - то не открываем текущий, а игнорируем, ждем когда цена убежит за границу дозволенного диапазона.
Тогда можно и повторно открыть.
Наработок много - можно запутаться.
да я знаю что надо перебирать, вот и надо мне код чтобы вставить в сов
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 11:50   #4731 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Кароче,
объявляешь в начале совы

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.
Elvis Burunduk на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
sega111 (03.04.2016)
Старый 03.04.2016, 12:04   #4732 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
Сообщение от 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);
}
спс большое за код, будем пробовать
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 12:11   #4733 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Сообщение от sega111 Посмотреть сообщение
спс большое за код, будем пробовать
Ты бы в личку написал бы, я поглядел на свой пост - код вообще нечитаемый(трудно читаемый) , я бы тебе в MQL нормально читаемый прислал бы.
Elvis Burunduk на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 12:32   #4734 (permalink)
Заблокирован
 
Аватар для sega111
 
Регистрация: 13.03.2013
Сообщений: 20
Репутация: 6
sega111
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 1 сообщении
Поинты: 18
Сообщение от Elvis Burunduk Посмотреть сообщение
Ты бы в личку написал бы, я поглядел на свой пост - код вообще нечитаемый(трудно читаемый) , я бы тебе в MQL нормально читаемый прислал бы.
ты в личке то не отвечаешь))
sega111 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.04.2016, 12:36   #4735 (permalink)
Активный участник
 
Аватар для Elvis Burunduk
 
Регистрация: 08.02.2016
Сообщений: 133
Репутация: 82
Elvis Burunduk
Сказал(а) спасибо: 39
Поблагодарили 78 раз(а) в 53 сообщениях
Поинты: 80
Сообщение от sega111 Посмотреть сообщение
ты в личке то не отвечаешь))
Тока что увидел личку ...))))))
Ответил.

Последний раз редактировалось Elvis Burunduk; 03.04.2016 в 12:52.
Elvis Burunduk на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.04.2016, 10:47   #4736 (permalink)
Прохожий
 
Аватар для Кушмурунец
 
Регистрация: 10.04.2013
Сообщений: 1
Репутация: 1
Кушмурунец
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Здравствуйте нужна ваша помощь есть индикатор для бо нужно туда прикрутить счетчик сигналов с соотношением винрейта с заданной экспирацией но что бы экспирацию можно было самому указывать и еще что бы он начинал считать со следующей свечи после сигнальной
Кушмурунец вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.04.2016, 18:20   #4737 (permalink)
Новичок форума
 
Аватар для 1Игорь1
 
Регистрация: 06.12.2009
Сообщений: 23
Репутация: -1
1Игорь1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 30
Добрый день.
Давно не пользовался старым советником, поднял оптимизировал, поставил на график, 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 }
1Игорь1 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.04.2016, 18:48   #4738 (permalink)
Активный участник
 
Аватар для Walle2323
 
Регистрация: 07.03.2016
Адрес: Планета Земля.
Сообщений: 110
Репутация: 115
Walle2323 Walle2323
Сказал(а) спасибо: 7
Поблагодарили 114 раз(а) в 59 сообщениях
Поинты: 42
Сообщение от 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);
 }
 }
Walle2323 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.04.2016, 19:12   #4739 (permalink)
Новичок форума
 
Аватар для 1Игорь1
 
Регистрация: 06.12.2009
Сообщений: 23
Репутация: -1
1Игорь1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 30
Спасибо большое, уважаемый 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 }
1Игорь1 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.04.2016, 19:18   #4740 (permalink)
Новичок форума
 
Аватар для 1Игорь1
 
Регистрация: 06.12.2009
Сообщений: 23
Репутация: -1
1Игорь1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 30
Посмотрите, пжл, может у меня не правильно написан Мартин, иногда он почему-то делает лот больше, чем выставленный коэфициент. Вот он весь, и ошибка в нем же:
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 }
1Игорь1 вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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