Ответ
 
Опции темы
06.06.2013, 01:02
Аватар для ale002
ale002 ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,502 раз(а) / Репутация: 2528
Сообщение от tommy27 Посмотреть сообщение
значения у них отличаются на несколько порядков. Как привести их к значениям одного порядка?
Ну, можно в % их выводить, тада размерность у всех будет одинаковая. Получитсо осциллятор. За 100% брать изменение за скока-то баров (bars). Тада цена одного пункта в % будет:

rate = 100 / (ArrayMaximum(buffer, bars) - ArrayMinimum(buffer, bars))

А значение, котор надо рисовать в каждой точке:

line_buffer[0] = (buffer[0] - ArrayMinimum(buffer, bars)) * rate
ale002 вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
tommy27 (06.06.2013)
06.06.2013, 05:57
Аватар для tommy27
tommy27 ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,186 раз(а) / Репутация: 3191
  • Отправить сообщение для tommy27 с помощью Skype™
Сообщение от ale002 Посмотреть сообщение
Ну, можно в % их выводить, тада размерность у всех будет одинаковая. Получитсо осциллятор. За 100% брать изменение за скока-то баров (bars).
Спасибо, попробую так.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
puretrade.ru
tommy27 вне форума Ответить с цитированиемОтветить с цитированием  
06.06.2013, 07:11
Регистрация: 13.03.2009 / Сообщений: 2,320
Поблагодарили 1,944 раз(а) / Репутация: 2019
Сообщение от tommy27 Посмотреть сообщение
Здравствуйте, помогите решить такую проблему: хочу чтоб в одном индикаторе отображались евробакс, индекс доллара и индекс евро, ток значения у них отличаются на несколько порядков. Как привести их к значениям одного порядка? Просто множители добавить - думаю не по феншую как то...
Почему же, вполне. Множитель это самый простой вариант. А за основу множителя можно взять какой нибудь индикатор волатильности, например ATR или Standard Deviation. Тайм фрейм им задать побольше, например D1, и период побольше, например год.
Можно конечно, как в wpr, сваять ценовой канал и отображать положение цены в %. Но это уже будут совсем другие показания. По сути это WPR разных инструментов в одном окне. Для этой реализации вполне можно применить iWPR()

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ale002 (06.06.2013), tommy27 (07.06.2013)
07.06.2013, 13:00
Аватар для tommy27
tommy27 ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,186 раз(а) / Репутация: 3191
  • Отправить сообщение для tommy27 с помощью Skype™
Спасибо, на выходных поэкспериментирую.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
puretrade.ru
tommy27 вне форума Ответить с цитированиемОтветить с цитированием  
07.06.2013, 16:49
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
07.06.2013, 17:32
Аватар для ale002
ale002 ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,502 раз(а) / Репутация: 2528
Сообщение от hoz Посмотреть сообщение
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
Это абстрактный вопрос, бо от многого зависит. Напишите 2 варианта того что хотите - 1 switch, другой if. Поместите в цикл итераций на мильён, перед циклом запомните в переменную время, после цикла выведите затраченное время на чарт или в файл. Потом в цикле замените switch на if - увидите разницу
ale002 вне форума Ответить с цитированиемОтветить с цитированием  
07.06.2013, 17:32
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от hoz Посмотреть сообщение
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
Вжик.
switch() исполняется так же как
if(case1) {case 1 block}
else if(case2) {case 2 block}
else if...
else {default block}

Последний раз редактировалось qqmber; 07.06.2013 в 17:40.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
07.06.2013, 18:09
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Дело в том, что я написал функцию, которая получает цену открытия:

PHP код:
double fGet_TradePrice(int fi_price,    // Цена: 0 - Bid; 1 - Ask
                       
string fs_symbol)   // валютная пара
{
   
double ld_price 0.0;
   
   switch (
fi_price)
   {
         case 
0:
         if (
fs_symbol == Symbol())
         {
             
RefreshRates();
             
ld_price Bid;
         }
         else
             
ld_price MarketInfo(fs_symbolMODE_BID);
         
         case 
1:
         if (
fs_symbol == Symbol())
         {
             
RefreshRates();
             
ld_price Ask;
         }
         else
             
ld_price MarketInfo(fs_symbolMODE_ASK);
   }

    if (
ld_price != 0)
        return (
ld_price);


По сути, мне интересно мнение со стороны, грамотно ли я реализовал данную функцию? Щяс пытаюсь понять в каких местах лучше, а на сколько часто использовать RefreshRates(), а так же некоторые проверки рыночных условий. Так как раньше писал всё для тестера.

Последний раз редактировалось hoz; 07.06.2013 в 18:11.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
08.06.2013, 06:54
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от hoz Посмотреть сообщение
По сути, мне интересно мнение со стороны, грамотно ли я реализовал данную функцию? Щяс пытаюсь понять в каких местах лучше, а на сколько часто использовать RefreshRates(), а так же некоторые проверки рыночных условий. Так как раньше писал всё для тестера.
break; в конце каждого блока case нужен.
С пивом потянет. Не самое короткое решение, но работать будет.
Единственно, в самом конце нет смысла проверять if (ld_price != 0) , если этот if и не выполнится, функция все равно вернет 0 по умолчанию.
RefreshRates() надо вызвать если перед текущим куском кода есть времязатратные вычисления. В частности, уместно внутри функции, когда неизвестно сколько времени прошло с момента запуска start().

Последний раз редактировалось qqmber; 08.06.2013 в 07:08.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ale002 (08.06.2013), hoz (08.06.2013)
08.06.2013, 07:55
Аватар для ale002
ale002 ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,502 раз(а) / Репутация: 2528
А можно всё сократить

PHP код:
double fGet_TradePrice(int fi_pricestring fs_symbol) {
    
RefreshRates();
    if(
fi_price) return(MarketInfo(fs_symbolMODE_ASK));
    return(
MarketInfo(fs_symbolMODE_BID));

ale002 вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
chillm (11.06.2013)
08.06.2013, 07:57
Аватар для luka_russki
luka_russki Интересующийся
Регистрация: 23.03.2010 / Сообщений: 13
Поблагодарили 0 раз(а) / Репутация: 1
http://ru.wikipedia.org/wiki/%D0%9E%D1%81%D1%86%D0%B8%D0%BB%D0%BB%D1%8F%D1%82%D 0%BE%D1%80_%D0%9C%D0%B0%D0%BA%D0%BA%D0%BB%D0%B5%D0 %BB%D0%BB%D0%B0%D0%BD%D0%B0

Привет всем! Кто-нибудь может писать этот индикатор?
luka_russki вне форума Ответить с цитированиемОтветить с цитированием  
08.06.2013, 08:05
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от ale002 Посмотреть сообщение
А можно всё сократить

PHP код:
double fGet_TradePrice(int fi_pricestring fs_symbol) {
    
RefreshRates();
    if(
fi_price) return(MarketInfo(fs_symbolMODE_ASK));
    return(
MarketInfo(fs_symbolMODE_BID));

Не пойдет. Здесь вам не С, if(int) нельзя.
Ну и хорошо бы возвращать 0 если передан fi_price>1.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
08.06.2013, 09:01
Аватар для ale002
ale002 ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,502 раз(а) / Репутация: 2528
Сообщение от qqmber Посмотреть сообщение
Не пойдет. Здесь вам не С, if(int) нельзя.
А вы проверьте. Можно ваще оба условия в одном операторе проверять:

PHP код:
#property indicator_separate_window

int start(){
    
Alert(fGet_TradePrice(OP_BUYSymbol()), " Bid="Bid" Ask="Ask);
    return(
0);
}

double fGet_TradePrice(int fi_pricestring fs_symbol) { 
    
RefreshRates();
    return(
fi_price MarketInfo(fs_symbolMODE_ASK) + (!fi_price) * MarketInfo(fs_symbolMODE_BID));


Цитата:
Ну и хорошо бы возвращать 0 если передан fi_price>1.
Это да, для самодисциплины. А так - избыточный код, как я понял эта переменная не вычисляется, а вбита в вызове функции явно - тока 0 и 1
ale002 вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (08.06.2013)
08.06.2013, 13:46
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от ale002 Посмотреть сообщение
А вы проверьте. Можно ваще оба условия в одном операторе проверять:
Так можно. И RefreshRates() тут лишний.
Заметьте кстати, что на маркет исполнении эти вычисления вовсе не нужны. Сервер сам все посчитает.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
08.06.2013, 14:22
Аватар для ale002
ale002 ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,502 раз(а) / Репутация: 2528
Сообщение от qqmber Посмотреть сообщение
И RefreshRates() тут лишний.
Конкретно тут - да, но у него же вроде эксперт, к тому же мультивалютный. Может там и надо
ale002 вне форума Ответить с цитированиемОтветить с цитированием  
08.06.2013, 19:05
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
break; в конце каждого блока case нужен.
Точно! Как-то я так проворонил...

Сообщение от qqmber Посмотреть сообщение
С пивом потянет. Не самое короткое решение, но работать будет.
Пово не пью, НО и длинным то его особо не назовёшь. Если тянуть сразу через MarketInfo(), тогда будет короче, но разве есть в этом смысл? Я слышал, что так по скорость исполнения медленнее будет, ежели сразу брать рыночную цену БИД или АСК.

Сообщение от qqmber Посмотреть сообщение
Единственно, в самом конце нет смысла проверять if (ld_price != 0) , если этот if и не выполнится, функция все равно вернет 0 по умолчанию.
Это ещё почему?

Сообщение от qqmber Посмотреть сообщение
RefreshRates() надо вызвать если перед текущим куском кода есть времязатратные вычисления. В частности, уместно внутри функции, когда неизвестно сколько времени прошло с момента запуска start().
Хм. НО тут опять же загвоздка. Может быть косяк там и там.
Во-первых, в случае, если вызывать функцию MarketInfo() в начале какой-то функции, и там будет расчёт с одной рыночной ценой, например, (если иметь в виду цену), а дальше, когда MarketInfo() обновит цену цена может измениться, и стать другой. Хотя изначальный расчёт был по другой цене. Таким образом будет логическая ошибка. Это ж как-то нужно решать?
hoz вне форума Ответить с цитированиемОтветить с цитированием  
09.06.2013, 11:54
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
Единственно, в самом конце нет смысла проверять if (ld_price != 0) , если этот if и не выполнится, функция все равно вернет 0 по умолчанию.

Это понятно, с утра посмотрел, очевидно.. писал ночью изначально код, накосячил.. вопрос снимаю этот.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
09.06.2013, 12:28
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от hoz Посмотреть сообщение
Пово не пью, НО и длинным то его особо не назовёшь. Если тянуть сразу через MarketInfo(), тогда будет короче, но разве есть в этом смысл? Я слышал, что так по скорость исполнения медленнее будет, ежели сразу брать рыночную цену БИД или АСК.
Формально да, медленнее из-за расходов на вызов функции, но это такие микросекунды, которые вряд ли могут повлиять.
Цитата:
Хм. НО тут опять же загвоздка. Может быть косяк там и там.
Во-первых, в случае, если вызывать функцию MarketInfo() в начале какой-то функции, и там будет расчёт с одной рыночной ценой, например, (если иметь в виду цену), а дальше, когда MarketInfo() обновит цену цена может измениться, и стать другой. Хотя изначальный расчёт был по другой цене. Таким образом будет логическая ошибка. Это ж как-то нужно решать?
Тут конечно от алгоритма зависит, но работать со старыми ценами когда уже есть новые это обычно плохая идея.
Кроме того, у вас ведь мультивалютник, судя по коду, и я бы не стал ту пару, на графике которой стоит эксперт, обрабатывать как-то особенно. А ведь именно так и получится, если с ней работать через Bid/Ask а с остальными через MarketInfo().
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
09.06.2013, 12:57
Аватар для hoz
hoz Активный участник
Регистрация: 01.04.2011 / Сообщений: 530
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
Кроме того, у вас ведь мультивалютник

Вообще-то нет. Я пишу сову, которая торгует пока что на одном инструменте. Просто когда код разрастается, начинаешь понимать, что всё сложнее его читать из-за количества строк. Т.е. читать то просто, но искать что где находится уже не комфортно. Потому я щяс прилаживаю усилия, всё-таки написать функции и выкинуть их в библиотеки. А так же научится всё это структурировать. Просто уже мозг устал гортать экраны того или иного эксперта. Есс-но, пишу заранее, чтоб функции были универсальными, как для мультивалютника, то и для одного инструмента.

Сообщение от qqmber Посмотреть сообщение
судя по коду, и я бы не стал ту пару, на графике которой стоит эксперт, обрабатывать как-то особенно. А ведь именно так и получится, если с ней работать через Bid/Ask а с остальными через MarketInfo().

Да, вы правы! Тока прошу заметить, что у нас не будет такого! Мы же сразу проверим, какой символ. Если символ текущего окна, то... Ну а если другой, то уже.. через MarketInfo() тянуть..

Последний раз редактировалось hoz; 09.06.2013 в 13:36.
hoz вне форума Ответить с цитированиемОтветить с цитированием  
11.06.2013, 11:37
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Вопрос такой: мой советник в тестере работает как-то непонятно. Если тестируешь за прошлый день, то результаты такие, какие и ожидаешь(как и реально он работал в этот день), а стоит поставить тест на две недели, как может получиться так, что за прошлый день сов закрыл сделку совсем по другому, чем если тестировать только за этот день. Подскажите, почему же так?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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