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

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

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

line_buffer[0] = (buffer[0] - ArrayMinimum(buffer, bars)) * rate
06.06.2013, 05:57
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,188 раз(а) / Репутация: 3193
  • Отправить сообщение для tommy27 с помощью Skype™
Ну, можно в % их выводить, тада размерность у всех будет одинаковая. Получитсо осциллятор. За 100% брать изменение за скока-то баров (bars).
Спасибо, попробую так.
06.06.2013, 07:11
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Здравствуйте, помогите решить такую проблему: хочу чтоб в одном индикаторе отображались евробакс, индекс доллара и индекс евро, ток значения у них отличаются на несколько порядков. Как привести их к значениям одного порядка? Просто множители добавить - думаю не по феншую как то...
Почему же, вполне. Множитель это самый простой вариант. А за основу множителя можно взять какой нибудь индикатор волатильности, например ATR или Standard Deviation. Тайм фрейм им задать побольше, например D1, и период побольше, например год.
Можно конечно, как в wpr, сваять ценовой канал и отображать положение цены в %. Но это уже будут совсем другие показания. По сути это WPR разных инструментов в одном окне. Для этой реализации вполне можно применить iWPR()
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
07.06.2013, 13:00
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,188 раз(а) / Репутация: 3193
  • Отправить сообщение для tommy27 с помощью Skype™
Спасибо, на выходных поэкспериментирую.
07.06.2013, 16:49
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
07.06.2013, 17:32
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,507 раз(а) / Репутация: 2533
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
Это абстрактный вопрос, бо от многого зависит. Напишите 2 варианта того что хотите - 1 switch, другой if. Поместите в цикл итераций на мильён, перед циклом запомните в переменную время, после цикла выведите затраченное время на чарт или в файл. Потом в цикле замените switch на if - увидите разницу
07.06.2013, 17:32
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
Вжик.
switch() исполняется так же как
if(case1) {case 1 block}
else if(case2) {case 2 block}
else if...
else {default block}

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

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

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

chillm 
08.06.2013, 07:57
Аватар для luka_russki
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

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

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

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

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

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

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

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

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

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

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

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


Опции темы

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

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



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


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