Ответить
03.01.2013, 17:04
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Сообщение от: Алек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
Чужие программы не переделываю!
03.01.2013, 18:18
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
А чё у тебя время засовывается в дробную переменную?
Да, действительно, сделал
datetime fir_or_time = OrderOpenTime();
Всё равно не помогло
03.01.2013, 18:29
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
High[] - массив, iHigh() - функция, котор обрабатывает массив. Вывод, имхо, очевиден. iHigh нужно для мультивалютных расчетов

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

На предмет укоротить:
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.
03.01.2013, 18:51
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
eevviill. А почему ты считаешь,что таким образом выберется именно первый по времени ордер?
Первый по времени ордер функция не возвратит. eevviill исправил очевидный косяк в вышеприведённой функции, который бросается в глаза с ходу.
А чтоб найти первый по времени ордер, как я понимаю нужно делать ещё один цикл и сравнивать время открытиях их.... всё очевидно.
03.01.2013, 18:54
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Первый по времени ордер функция не возвратит. eevviill исправил очевидный косяк в вышеприведённой функции, который бросается в глаза с ходу.
А чтоб найти первый по времени ордер, как я понимаю нужно делать ещё один цикл и сравнивать время открытиях их.... всё очевидно.
И как же это в коде написать?
03.01.2013, 19:18
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 659
Поблагодарили 1,674 раз(а) / Репутация: 1676
Сообщение от: Алекc1234
И как же это в коде написать?
Ну так вот:
http://forexsystemsru.com/531699-post581.html
Заместо профита вставляй свою формулу.
03.01.2013, 19:20
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,504 раз(а) / Репутация: 2530
Ну почему же сразу мультивалютных... также и мультитаймфреймовых.. Мне как-раз МТФ и интересует.
Часто мультиТФ лучше заменить мультиПериодностью - чтобы не дёргать базу лишний раз

Цитата:
А на предмет производительности, когда " одно в другое " помещаю, есть разница?
Каждая лишняя скобка (это тоже оператор) и переменная отжирают чу-чу ресурсов. А по большому счёту в 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); 
04.01.2013, 10:17
Аватар для Rust
Rust Rust вне форума Активный участник
Регистрация: 21.05.2009 / Адрес: Тянь Шань / Сообщений: 14
Поблагодарили 10 раз(а) / Репутация: 10
Попадая в цикл, выхода из него нет. Происходит зацикливание. тольео полный перезапуск всего терминала поможет выйти из такого зацикливания.
ТОЧНО. Убрал его, так как он просто был лишним там.
Чуток поэкспериментировал ещё и всё затикало, - тик-так.
- с нормальной отчетностью о содеянном.
СПАСИБО Вам и будьте здоровы !
04.01.2013, 13:51
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
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.
04.01.2013, 14:39
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 659
Поблагодарили 1,674 раз(а) / Репутация: 1676
[QUOTE=eevviill;552922]Ну потому что очередь ордеров строится по временю их открытия.

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

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

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

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
[QUOTE=eevviill;552972]
Хмм. Не знал что если сортировку поменять то ордера будут по ней выбиратся. Сейчас проверю.
Я был прав.
04.01.2013, 18:09
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 659
Поблагодарили 1,674 раз(а) / Репутация: 1676
[QUOTE=eevviill;553015]
Я был прав.
Значит я заблуждался. Ну да ладно мое заблуждение мне не вредило. Где то я ж это вычитал.
05.01.2013, 09:15
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Ну потому что очередь ордеров строится по временю их открытия.

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, так работает, только есть одна странность. Как только на одной и той же свече открываются два ордера - сов начинает работать неправильно - не по программе. Если ордера открываются на разных свечах - то сов чётко видит первый ордер. Может, у кого-нибудь есть идеи, отчего так?
05.01.2013, 09:36
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
eevviill, так работает, только есть одна странность. Как только на одной и той же свече открываются два ордера - сов начинает работать неправильно - не по программе. Если ордера открываются на разных свечах - то сов чётко видит первый ордер. Может, у кого-нибудь есть идеи, отчего так?
Идей может быть много, а что ты имеешь ввиду под не правильно работает не понятно.
05.01.2013, 09:49
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Идей может быть много, а что ты имеешь ввиду под не правильно работает не понятно.
Я потом вычисляю цену первого открытого ордера на этой свече, потом смотрю разницу между ценой открытия и текущей ценой и если она меньше определённого значения, то закрываю ордер. Когда ордера открываются на разных свечах, то всё правильно работает, а когда на одной свече, то ордер не закрывается при выполнении условия...
05.01.2013, 09:58
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для 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
05.01.2013, 10:55
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Так зачем ты это ищешь?
PHP код:
int fir_or_time OrderOpenTime(); 
int i iBarShift(NULL,0,fir_or_time); 
Напиши вместо этого.
PHP код:
double Or_Op_Pr=OrderOpenPrice(); 
Всё верно, у меня так и сделано было. Но я торгую отложками и бывают проскальзывания, так что реальный OrderOpenPrice() не всегда точно соответствует заданной по отложке. А это значит, что в тестере сов может сработать по одному, а на реале по другому. Это меня не устраивает, поэтому я и провожу разные вычисления, чтобы обойти проскальзывание
05.01.2013, 11:09
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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


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

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

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


Опции темы

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

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



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


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