Ответ
 
Опции темы
Старый 06.06.2013, 01:02   #1301 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от 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   #1302 (permalink)
◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
 
Аватар для tommy27
 
Регистрация: 16.10.2011
Адрес: Новосибирск
Сообщений: 1,054
Репутация: 3189
tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27
Сказал(а) спасибо: 2,326
Поблагодарили 3,184 раз(а) в 875 сообщениях
Поинты: 570
Отправить сообщение для tommy27 с помощью Skype™
Сообщение от ale002 Посмотреть сообщение
Ну, можно в % их выводить, тада размерность у всех будет одинаковая. Получитсо осциллятор. За 100% брать изменение за скока-то баров (bars).
Спасибо, попробую так.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
puretrade.ru
tommy27 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.06.2013, 07:11   #1303 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от 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   #1304 (permalink)
◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
 
Аватар для tommy27
 
Регистрация: 16.10.2011
Адрес: Новосибирск
Сообщений: 1,054
Репутация: 3189
tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27
Сказал(а) спасибо: 2,326
Поблагодарили 3,184 раз(а) в 875 сообщениях
Поинты: 570
Отправить сообщение для tommy27 с помощью Skype™
Спасибо, на выходных поэкспериментирую.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
puretrade.ru
tommy27 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.06.2013, 16:49   #1305 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.06.2013, 17:32   #1306 (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 Посмотреть сообщение
Подскажите, кто уверен, switch - быстрый оператор, или тормознутый? А то я слышал разные версии, но что-то сам лично не уверен.
Это абстрактный вопрос, бо от многого зависит. Напишите 2 варианта того что хотите - 1 switch, другой if. Поместите в цикл итераций на мильён, перед циклом запомните в переменную время, после цикла выведите затраченное время на чарт или в файл. Потом в цикле замените switch на if - увидите разницу
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.06.2013, 17:32   #1307 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от 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   #1308 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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   #1309 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от 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   #1310 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
А можно всё сократить

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   #1311 (permalink)
Интересующийся
 
Аватар для luka_russki
 
Регистрация: 23.03.2010
Сообщений: 13
Репутация: 1
luka_russki
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
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   #1312 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от 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   #1313 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от 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   #1314 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от ale002 Посмотреть сообщение
А вы проверьте. Можно ваще оба условия в одном операторе проверять:
Так можно. И RefreshRates() тут лишний.
Заметьте кстати, что на маркет исполнении эти вычисления вовсе не нужны. Сервер сам все посчитает.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.06.2013, 14:22   #1315 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от qqmber Посмотреть сообщение
И RefreshRates() тут лишний.
Конкретно тут - да, но у него же вроде эксперт, к тому же мультивалютный. Может там и надо
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.06.2013, 19:05   #1316 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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   #1317 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
Единственно, в самом конце нет смысла проверять if (ld_price != 0) , если этот if и не выполнится, функция все равно вернет 0 по умолчанию.

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

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

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

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

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

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

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


Опции темы

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

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



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


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