
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Разобрались и исправили. Спасибо.
Спасибо за исправление, почти хорошо, почему почти...
В хелпе написано
start_time [in] Время бара, соответствующее первому элементу.
А первый элемент 0.
А вот с последним элементом порядок.
Если так задумано, исправте хелп.
Спасибо за исправление, почти хорошо, почему почти...
В хелпе написано
start_time [in] Время бара, соответствующее первому элементу.
А первый элемент 0.
А вот с последним элементом порядок.
Если так задумано, исправте хелп.
Ситуация такова, что start_time и stop_time в варианте от даты до даты могут быть любыми - в любом случае они образуют диапазон. Попробуем поточнее отобразить это в документации
Т.е. Вы хотитете сказать, что функции Copy* будут в случае от даты до даты возвращать все элементы кроме стартового? Таким образом мне необходимо записать выражение так:
для меня этот вопрос очень важен.
Обращаю Ваше внимание на то, что при переходе на новый день происходит такая весчь:
После обновления все становится на место.
Понаблюдайте формирование перехода на новый день, я часто замечаю такой сдвиг, и самое интересное в момент формирования первого бара следующего дня обновление графика не приносит результата. (может я неправ но мне кажется мое предыдущее сообщение тоже имеет к этому отношение).
Билд 252.
Главное Меню: <ГРАФИКИ> - <ГРАФИЧЕСКИЕ ИНСТРУМЕНТЫ> вылезают таймфреймы.
К сожалению, последняя версия CAccountInfo не попала в билд.
В прикрепленном файле, Вы найдете метод FreeMarginCheck (правда пока только для SYMBOL_CALC_MODE_FOREX).
Если возникнут замечания и(или) соображения, прошу писать.
Обнаружил, что метод FreeMarginCheck требует доработки.
1. Рассмотрим case SYMBOL_CALC_MODE_FOREX:
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
margin=bid*volume*contract_size/leverage;
margin=free_margin-margin;
break;
Если значения двух слагаемых SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) и Currency() оказываются равными, то переменная bid получает значение 0, а переменная margin получает значение free_margin.
Для исправления ситуации сделал так:
case SYMBOL_CALC_MODE_FOREX:
bid=1.0;
if (SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
}
margin=bid*volume*contract_size/leverage;
margin=free_margin-margin;
break;
Можно узнать когда нормально заработают функции Copy*()?
В каждом новом билде они перестают работать, неужели их никто не использует?
Спасибо за исправление, почти хорошо, почему почти...
В хелпе написано
start_time [in] Время бара, соответствующее первому элементу.
А первый элемент 0.
А вот с последним элементом порядок.
Если так задумано, исправте хелп.
Из Вашего примера не понятно, каким образом получено значение time1. Попытка воспроизвести ситуацию не удалась.
Обнаружил, что метод FreeMarginCheck требует доработки.
Обнаружил, что метод FreeMarginCheck требует доработки.
2. Другая проблема заключается в следующем. Вновь расссмотрим case SYMBOL_CALC_MODE_FOREX:
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
Если у переменной symbol в качестве базовой валюты окажется валюта, не имеющая прямой котировки (например, CADJPY), то SymbolInfoDouble(work,SYMBOL_BID) выдаст значение 0.
2.1. Кроме того, не понятно, почему при вычислении второй переменной (bid) используется цена BID. Ведь нам необходимо обеспечить приобретение валюты, в которой вычисляются залоговые средства, за счёт валюты депозита, т.е. "валюту маржи купить, валюту депозита - продать". И если в конкретной валютной паре валюта депозита находится на втором месте, то для осуществления указанной операции придётся использовать цену ASK.
Для исправления ситуации сделал так:
double course;
//---
switch(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE))
{
case SYMBOL_CALC_MODE_FOREX:
course=1.0;
//---Проверим, не является ли валюта депозита базовой валютой у текущей валютной
//пары. Если является, то значение переменной course останется равным 1.0
if(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
//---Проверим, существует ли валютная пара, базовая валюта которой совпадает с
//базовой валютой текущей пары, а валюта котировки совпадает с валютой депозита
//(т.е., если депозит в USD, то проверяем наличие прямой котировки).
if(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
course=SymbolInfoDouble(work,SYMBOL_ASK);
//---При невыполнении указанного выше условия меняем последовательность символов
//валют в переменной work и получаем валютную пару, базовая валюта которой
//совпадает с валютой депозита, а валюта котировки совпадает с базовой валютой
//текущей пары (если депозит в USD, то получаем валютную пару с обратной котировкой).
else
{
work=Currency()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN);
course=1/SymbolInfoDouble(work,SYMBOL_BID);
}
}
margin=course*volume*contract_size/leverage;
margin=free_margin-margin;
break;