Ответ
 
Опции темы
Старый 03.01.2013, 17:04   #761 (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
Сообщение от Алекc1234 Посмотреть сообщение
Привет всем. Есть такой код
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
double fir_or_time = OrderOpenTime();
i = iBarShift(NULL,0,fir_or_time);
}
То есть я задаю свечу первого по времени открытия ордера. Но в итоге сов видит последний ордер. Подскажите, что сделано не так?
А чё у тебя время засовывается в дробную переменную?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (04.01.2013), Алекc1234 (03.01.2013)
Старый 03.01.2013, 18:18   #762 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от Ugar Посмотреть сообщение
А чё у тебя время засовывается в дробную переменную?
Да, действительно, сделал
datetime fir_or_time = OrderOpenTime();
Всё равно не помогло
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.01.2013, 18:29   #763 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ale002 Посмотреть сообщение
High[] - массив, iHigh() - функция, котор обрабатывает массив. Вывод, имхо, очевиден. iHigh нужно для мультивалютных расчетов

Ну почему же сразу мультивалютных... также и мультитаймфреймовых.. Мне как-раз МТФ и интересует.

Сообщение от ale002 Посмотреть сообщение
На предмет укоротить:
PHP код:
if(GetStateMa() == MA_TALKING_LONG)
  return(
    
High[iHighest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_maxValueShiftB,0)]
    -
    
Low[iLowest(Symbol(),i_ExtremumLookingTF,MODE_HIGH,i_minValueShiftB,0)]
    >= 
7*pt
  
); 
iLowest(..MODE_HIGH..) - бывает, конечно, но чаще MODE_LOW

А на предмет производительности, когда " одно в другое " помещаю, есть разница? Я имею ввиду, если для хая, то maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShift B) в

PHP код:
if((maxValue minValue) >= 7*pt

Я так понимаю, в первом случает, на одну ячейку память эксперт больше занимает в каждом случает, а во втором варианте " всё в одном ".

Последний раз редактировалось hoz; 03.01.2013 в 19:00.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.01.2013, 18:51   #764 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от alexshell Посмотреть сообщение
eevviill. А почему ты считаешь,что таким образом выберется именно первый по времени ордер?
Первый по времени ордер функция не возвратит. eevviill исправил очевидный косяк в вышеприведённой функции, который бросается в глаза с ходу.
А чтоб найти первый по времени ордер, как я понимаю нужно делать ещё один цикл и сравнивать время открытиях их.... всё очевидно.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
alexshell (03.01.2013), Алекc1234 (03.01.2013)
Старый 03.01.2013, 18:54   #765 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от hoz Посмотреть сообщение
Первый по времени ордер функция не возвратит. eevviill исправил очевидный косяк в вышеприведённой функции, который бросается в глаза с ходу.
А чтоб найти первый по времени ордер, как я понимаю нужно делать ещё один цикл и сравнивать время открытиях их.... всё очевидно.
И как же это в коде написать?
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.01.2013, 19:18   #766 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 917
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от Алекc1234 Посмотреть сообщение
И как же это в коде написать?
Ну так вот:
Ваши вопросы по языку MQL4
Заместо профита вставляй свою формулу.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ale002 (03.01.2013), Алекc1234 (03.01.2013)
Старый 03.01.2013, 19:20   #767 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от hoz Посмотреть сообщение
Ну почему же сразу мультивалютных... также и мультитаймфреймовых.. Мне как-раз МТФ и интересует.
Часто мультиТФ лучше заменить мультиПериодностью - чтобы не дёргать базу лишний раз

Цитата:
А на предмет производительности, когда " одно в другое " помещаю, есть разница?
Каждая лишняя скобка (это тоже оператор) и переменная отжирают чу-чу ресурсов. А по большому счёту в 99% наших игрушек разница практически незаметна. Но можете поставить свои варианты в большой цикл с выводом времени в журнал перед и после него - узнаете разницу в цифрах


Сообщение от Алекc1234 Посмотреть сообщение
И как же это в коде написать?
Попробьте так

PHP код:
datetime tTime 0;
iPos OrdersTotal();
while (
iPos 0) {
    
iPos--;
    if(
OrderSelect(iPosSELECT_BY_POS)) {
        if(
tTime == 0tTime OrderOpenTime();
        else if(
tTime OrderOpenTime()) tTime OrderOpenTime();
    }
}
int iBar iBarShift(NULL,0,tTime); 
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
alexshell (03.01.2013), eevviill (04.01.2013), Алекc1234 (03.01.2013)
Старый 04.01.2013, 10:17   #768 (permalink)
Активный участник
 
Аватар для Rust
 
Регистрация: 21.05.2009
Адрес: Тянь Шань
Сообщений: 14
Репутация: 10
Rust
Сказал(а) спасибо: 18
Поблагодарили 10 раз(а) в 6 сообщениях
Поинты: 42
Сообщение от Ugar Посмотреть сообщение
Попадая в цикл, выхода из него нет. Происходит зацикливание. тольео полный перезапуск всего терминала поможет выйти из такого зацикливания.
ТОЧНО. Убрал его, так как он просто был лишним там.
Чуток поэкспериментировал ещё и всё затикало, - тик-так.
- с нормальной отчетностью о содеянном.
СПАСИБО Вам и будьте здоровы !
Rust вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.01.2013, 13:51   #769 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от alexshell Посмотреть сообщение
eevviill. А почему ты считаешь,что таким образом выберется именно первый по времени ордер?
Ну потому что очередь ордеров строится по временю их открытия.

p.s. Аааа. Точно точно. Это я последний выбрал.
Правильно так.
PHP код:
for(int i=0i<=OrdersTotal()-1i++) 
 { 
 if(
OrderSelect(i,SELECT_BY_POS))
 { 
 if(
OrderMagicNumber()==magic
 { 
 if(
OrderSymbol()==Symbol()) 
 { 
int fir_or_time OrderOpenTime();
int i iBarShift(NULL,0,fir_or_time);
break; 
 } 
 } 
 } 
 } 

Последний раз редактировалось eevviill; 04.01.2013 в 13:56. Причина: p.s.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
alexshell (04.01.2013), Viko2000 (20.04.2015), Алекc1234 (04.01.2013)
Старый 04.01.2013, 14:39   #770 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 917
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
[QUOTE=eevviill;552922]Ну потому что очередь ордеров строится по временю их открытия.

Я для чего спрашивал. Вот это распрастраненная ошибка. По уумолчанию в терминале очередь так и строится. Но ведь пользователь может поменять сортировку ордеров для своего удобства. Допустим по символу или по прибыли. Он ведь не знает что нельзя менять очередь ордеров. И вся логика советника может рухнуть.По этому нужно все таки задавать проверочные условия для определения нужного ордера. И мы уже железно выберем нужный ордер независимо от того как располагаются ордера в терминале.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (04.01.2013), Алекc1234 (04.01.2013)
Старый 04.01.2013, 16:13   #771 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
[QUOTE=alexshell;552940]
Сообщение от eevviill Посмотреть сообщение
Ну потому что очередь ордеров строится по временю их открытия.

Я для чего спрашивал. Вот это распрастраненная ошибка. По уумолчанию в терминале очередь так и строится. Но ведь пользователь может поменять сортировку ордеров для своего удобства. Допустим по символу или по прибыли. Он ведь не знает что нельзя менять очередь ордеров. И вся логика советника может рухнуть.По этому нужно все таки задавать проверочные условия для определения нужного ордера. И мы уже железно выберем нужный ордер независимо от того как располагаются ордера в терминале.
Хмм. Не знал что если сортировку поменять то ордера будут по ней выбиратся. Сейчас проверю.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
alexshell (04.01.2013), Алекc1234 (04.01.2013)
Старый 04.01.2013, 18:00   #772 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
[QUOTE=eevviill;552972]
Сообщение от alexshell Посмотреть сообщение
Хмм. Не знал что если сортировку поменять то ордера будут по ней выбиратся. Сейчас проверю.
Я был прав.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
alexshell (04.01.2013)
Старый 04.01.2013, 18:09   #773 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 917
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
[QUOTE=eevviill;553015]
Сообщение от eevviill Посмотреть сообщение
Я был прав.
Значит я заблуждался. Ну да ладно мое заблуждение мне не вредило. Где то я ж это вычитал.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (04.01.2013)
Старый 05.01.2013, 09:15   #774 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Ну потому что очередь ордеров строится по временю их открытия.

p.s. Аааа. Точно точно. Это я последний выбрал.
Правильно так.
PHP код:
for(int i=0i<=OrdersTotal()-1i++) 
 { 
 if(
OrderSelect(i,SELECT_BY_POS))
 { 
 if(
OrderMagicNumber()==magic
 { 
 if(
OrderSymbol()==Symbol()) 
 { 
int fir_or_time OrderOpenTime();
int i iBarShift(NULL,0,fir_or_time);
break; 
 } 
 } 
 } 
 } 
eevviill, так работает, только есть одна странность. Как только на одной и той же свече открываются два ордера - сов начинает работать неправильно - не по программе. Если ордера открываются на разных свечах - то сов чётко видит первый ордер. Может, у кого-нибудь есть идеи, отчего так?
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.01.2013, 09:36   #775 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
eevviill, так работает, только есть одна странность. Как только на одной и той же свече открываются два ордера - сов начинает работать неправильно - не по программе. Если ордера открываются на разных свечах - то сов чётко видит первый ордер. Может, у кого-нибудь есть идеи, отчего так?
Идей может быть много, а что ты имеешь ввиду под не правильно работает не понятно.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.01.2013, 09:49   #776 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Идей может быть много, а что ты имеешь ввиду под не правильно работает не понятно.
Я потом вычисляю цену первого открытого ордера на этой свече, потом смотрю разницу между ценой открытия и текущей ценой и если она меньше определённого значения, то закрываю ордер. Когда ордера открываются на разных свечах, то всё правильно работает, а когда на одной свече, то ордер не закрывается при выполнении условия...
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.01.2013, 09:58   #777 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
Я потом вычисляю цену первого открытого ордера на этой свече, потом смотрю разницу между ценой открытия и текущей ценой и если она меньше определённого значения, то закрываю ордер. Когда ордера открываются на разных свечах, то всё правильно работает, а когда на одной свече, то ордер не закрывается при выполнении условия...
Так зачем ты это ищешь?
PHP код:
int fir_or_time OrderOpenTime(); 
int i iBarShift(NULL,0,fir_or_time); 
Напиши вместо этого.
PHP код:
double Or_Op_Pr=OrderOpenPrice(); 

Последний раз редактировалось eevviill; 05.01.2013 в 10:36. Причина: php
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (05.01.2013)
Старый 05.01.2013, 10:55   #778 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Так зачем ты это ищешь?
PHP код:
int fir_or_time OrderOpenTime(); 
int i iBarShift(NULL,0,fir_or_time); 
Напиши вместо этого.
PHP код:
double Or_Op_Pr=OrderOpenPrice(); 
Всё верно, у меня так и сделано было. Но я торгую отложками и бывают проскальзывания, так что реальный OrderOpenPrice() не всегда точно соответствует заданной по отложке. А это значит, что в тестере сов может сработать по одному, а на реале по другому. Это меня не устраивает, поэтому я и провожу разные вычисления, чтобы обойти проскальзывание
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.01.2013, 11:09   #779 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
Всё верно, у меня так и сделано было. Но я торгую отложками и бывают проскальзывания, так что реальный OrderOpenPrice() не всегда точно соответствует заданной по отложке. А это значит, что в тестере сов может сработать по одному, а на реале по другому. Это меня не устраивает, поэтому я и провожу разные вычисления, чтобы обойти проскальзывание
Ну тогда в перебор можно ввести ещё один фильтр
i
PHP код:
f(OrderType()==OP_BUY || OrderType()==OP_SELL)  
 {  
...


Последний раз редактировалось eevviill; 05.01.2013 в 11:09. Причина: php
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.01.2013, 11:36   #780 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Ну тогда в перебор можно ввести ещё один фильтр
i
PHP код:
f(OrderType()==OP_BUY || OrderType()==OP_SELL)  
 {  
...

Не, это не то. У меня так и есть. Мне нужно, чтобы именно по свече, на которой произошло открытие первого ордера, шёл бы отсчёт. А сейчас выходит, что если на этой свече открылось два ордера, то сов вообще не ведёт расчёты...
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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