Как узнать "цвет свечи" (направление) другой пары

 

Подскажите как узнать цвет свечи другого символа (валютной пары)

Такая потребность нужна, так как отслеживаю пары входящие в индекс. Только по раздельности

 
Natalya Smirnova:

Подскажите как узнать цвет свечи другого символа (валютной пары)

Такая потребность нужна, так как отслеживаю пары входящие в индекс. Только по раздельности

gbpchf.candle(H1)[TimeCurrent()].color :-)

шутка конечно...

1. сначала узнать где там соответствующая свеча. Потому как не факт что она есть и время соответствует. barShift=iBarShift(otherSymbol,PERIOD,time);

2. получить данные по этому смещению. CopyRates(....)

2.1. убедиться что они получены или заставить терминал их подкачать и вернуться к пп2

3. Сравнить rates[i].open и rates[i].close - это искомый цвет. Но учесть что open и close могут быть некорректны (может сверкануть 0 или EMPTY_VALUE). 

 
Maxim Kuznetsov #:

gbpchf.candle(H1)[TimeCurrent()].color :-)

шутка конечно...

1. сначала узнать где там соответствующая свеча. Потому как не факт что она есть и время соответствует. barShift=iBarShift(otherSymbol,PERIOD,time);

2. получить данные по этому смещению. CopyRates(....)

2.1. убедиться что они получены или заставить терминал их подкачать и вернуться к пп2

3. Сравнить rates[i].open и rates[i].close - это искомый цвет. Но учесть что open и close могут быть некорректны (может сверкануть 0 или EMPTY_VALUE). 

Благодарю Вас за алгоритм.
Спасибо за уделенное внимание к моему вопросу!
 
Maxim Kuznetsov #:

gbpchf.candle(H1)[TimeCurrent()].color :-)

шутка конечно...

1. сначала узнать где там соответствующая свеча. Потому как не факт что она есть и время соответствует. barShift=iBarShift(otherSymbol,PERIOD,time);

2. получить данные по этому смещению. CopyRates(....)

2.1. убедиться что они получены или заставить терминал их подкачать и вернуться к пп2

3. Сравнить rates[i].open и rates[i].close - это искомый цвет. Но учесть что open и close могут быть некорректны (может сверкануть 0 или EMPTY_VALUE). 

Скажите
double Close2_1 = iClose(_Symbol,PERIOD_CURRENT,i+2);
double Open2_1 = iOpen(_Symbol,PERIOD_CURRENT,i+1);
вот так не будет ошибкой?
 
Natalya Smirnova #:
Скажите вот так не будет ошибкой?

Здесь Вы взяли значения цены Close для текущего символа и текущего таймфрейма. А ведь хотели получить данные с другого символа. Тогда, как минимум, нужно делать хотя бы так:

iClose("GBPJPY", PERIOD_H1, i + 2);

Тогда, если советник (индикатор) запущен на EURUSD и M5, то для такой программы это будет действительно "другой символ".

Но при таком подходе нужно соблюсти хотя бы такие меры предосторожности: проверить возвращенное значение и код последней ошибки. Потому как данные другого символа могут быть еще не готовы в окружении терминала.

 
Natalya Smirnova #:
Скажите вот так не будет ошибкой?

будет :-) Open и Close свечей берутся с одинаковым индексом (чтобы они относились к одной свече)

а так у вас проверка на геп..Close2_1-Open2_1=GAP, а не цвет свечки

 
Ihor Herasko #:

Здесь Вы взяли значения цены Close для текущего символа и текущего таймфрейма. А ведь хотели получить данные с другого символа. Тогда, как минимум, нужно делать хотя бы так:

Тогда, если советник (индикатор) запущен на EURUSD и M5, то для такой программы это будет действительно "другой символ".

Но при таком подходе нужно соблюсти хотя бы такие меры предосторожности: проверить возвращенное значение и код последней ошибки. Потому как данные другого символа могут быть еще не готовы в окружении терминала.

double Close2_1 = iClose(Para1,PERIOD_CURRENT,i+2);
double Open2_1 = iOpen(Para1,PERIOD_CURRENT,i+1);

double Close2_1 = iClose(Para2,PERIOD_CURRENT,i+2);
double Open2_1 = iOpen(Para2,PERIOD_CURRENT,i+1);

Вот так я имела ввиду

 
Maxim Kuznetsov #:

будет :-) Open и Close свечей берутся с одинаковым индексом (чтобы они относились к одной свече)

а так у вас проверка на геп..Close2_1-Open2_1=GAP, а не цвет свечки

double Close2_1 = iClose(Para1,PERIOD_CURRENT,i+1);
double Open2_1 = iOpen(Para1,PERIOD_CURRENT,i+1);

if ((Close2_1 - Open2_1) > 0)
{
Print("Зеленая");
}
Или я ошибаюсь?
 
Natalya Smirnova #:
Или я ошибаюсь?

вот теперь почти что нет, почти не ошиблись (теперь у вас везде i+1, одинаково)

но если строите индексы или соотносите с другими парами, надо помнить что этот самый пресловутый "i" у всех разный. 

 
Maxim Kuznetsov #:

вот теперь почти что нет, почти не ошиблись (теперь у вас везде i+1, одинаково)

но если строите индексы или соотносите с другими парами, надо помнить что этот самый пресловутый "i" у всех разный. 

Что-то я запуталась... если я пишу:

for(int i=0; i<ShowBars; i++)
     {
double Close1 = iClose(Para1,PERIOD_CURRENT,i+1);
double Open1 = iOpen(Para1,PERIOD_CURRENT,i+1);

double Close2 = iClose(Para2,PERIOD_CURRENT,i+1);
double Open2 = iOpen(Para2,PERIOD_CURRENT,i+1);

double Close3 = iClose(Para3,PERIOD_CURRENT,i+1);
double Open3 = iOpen(Para3,PERIOD_CURRENT,i+1);

if ((Close1 - Open1) > 0) && 
((Close2 - Open2) > 0)&&
((Close3 - Open3) > 0)
{
Print("Все Зеленые");
}
}

i - для всех будет одинакова?

Т.е. цикл будет для всех i - одинаковое число передавать?

Или я ошибаюсь?

 
Natalya Smirnova #:

Что-то я запуталась... если я пишу:

i - для всех будет одинакова?

Т.е. цикл будет для всех i - одинаковое число передавать?

Или я ошибаюсь?

ошибаетесь. 

например в 10:00 у вас свеча H1 с индексом i=1, на EURUSD будет начинаться в 9:00 , на GBPCHF скорее тоже, а например NZDCAD в 8:00...рядовая ситуация, по 24 раза в день. С металлами так ещё хуже того

ещё раз - чтобы узнать "цвет" свечи 10:00 разных символов - сначала для каждой пары выяснить индекс. iBarShift .

Причина обращения: