[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 299
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//-----------------------------------------------------------------------------+
// Киму Респект и уважуха !!! |
//+----------------------------------------------------------------------------+
Это,несомненно, была самая нагрузочная часть кода))))
Так. Я вот ниччч-чегошеньки не понимаю. Довёл до ума секундный ТФ. Всё должно работать как часы. Но не работает. Нет, работать-то работает, но не так как ожидается. Тысячу раз всё перепроверял. Ни синтактических, ни алгоритмических ошибок сам не вижу. Попробую объяснить, полный код прикрепляю. Итак:
Здесь в начале start() поставил обработчик по количеству пройденных с момента последнего запуска start() секунд. Повторяющиеся участки вынес в пользовательские функции. Новое значение time=TimeCurrent() присваивается там же, в пользовательских функциях.
Функция работает в двух режимах: в первой ветке, AtFirst=true она только ловит тик, с предварительным обнулением массивов-накопителей, а во второй ветке, AtFirst=false, она работает именно как накопитель тиков. То есть мы либо обнуляем и урезаем накопитель и ловим бид-аск в нулевую ячейку, либо удлинняем накопитель и ловим бид-аск. Алерт ставил только для отладки. Условие обнуления накопителя распишу дальше.
Функция "рисования" свечи (занесения свечи в .hst, открытый в автономном чарте). Аналогично - алерты ставил для отладки. Первый алерт сигналит при двух пойманных тиках в одну секунду (размер массива равен двум, и по идее объём должен быть равен двум), а второй при биде, равном аску в пойманном тике (аналогичному алерту в накопителе: но работают они почему-то несинхронно), и объём свечи. Это всё по идее, на деле при занесённой в файл (по алерту) например двойке (или 0х00 00 00 00 00 00 00 40, double 2.0) там почему-то всё равно оказывается один (0х00 00 00 00 00 00 F0 3F, double 1.0 в формате BigEndian). Тот алерт в накопителе я обычно закомменчиваю, сигналит часто, с этими двумя работаю.
Функция "рисования" прочерка в случае, если в какую секунду тика не было. Работает всё по следующему алгоритму:
Δtime=0: ловим (копим) тики.
Δtime=1: рисуем свечу по пойманному до этого тику, потом ловим тик (с предварительным обнулением накопителя).
Δtime>1: рисуем свечу по пойманному до этого тику, рисуем прочерки по линии Close[0] в количестве Δtime-1, ловим тик (с предварительным обнулением накопителя). Накопитель во всех случаях обнуляем тогда, когда свеча по нему уже нарисована и значит нам аккумулятор больше не нужен. Это бывает при Δtime>0.
Прогоняем:
Стрелочкой подрисовал моменты, где бид по идее равен аску, и объём должен быть по идее равен единице. Я не захватил низ с объёмами, там всё равно нифига не видно, мелко. Но они все вровень, то есть либо ноль, либо один, ни один до двух не поднимается (хотя алерт сигналит). Два тика в секунду - всё равно при наведении мышки железно высвечивается volume=1, а бид равен аску тоже железно высвечивается volume=0. Почему? Я понимаю что где-то ошибка, но скорее всего, ошибку не замечаю или не там смотрю. Прикрепляю код, в своей части всё хорошо раскомментировал, за отступами везде проследил, инклюдники убрал, только выбрал из них используемые функции, чтобы компилилось быстрее. Единственное замечание - в оффлайне, т.е. с TimeLocal, в отличие от оригинального сборщика тиков, не работает, потому что в if(tickTimeLocal==true) я там от балды написал (т.к. мне это больно не надо было). Пробовал перевести в советника по совету Тараса, - свечи тогда не высвечиваются в автономном чарте (хотя линия текущей котировки нормально двигается).
ваши портянки.
Здраствуйте
Появился такой вопрос. Допустим сегодня понедельник. Мне надо узнать цену закрытия в пятницу. Могу ли я так писать
Вопрос такой потому появился, что на тестере вижу бары суботы и восккресья. Но в эти дни торговля неведеться. Выше написана строка даст цену закрытия пятницы или воскресения ?Здраствуйте
Появился такой вопрос. Допустим сегодня понедельник. Мне надо узнать цену закрытия в пятницу. Могу ли я так писать
Вопрос такой потому появился, что на тестере вижу бары суботы и восккресья. Но в эти дни торговля неведеться. Выше написана строка даст цену закрытия пятницы или воскресения ?Даст цену пятницы! Если сервер закрывает не позже 24.00 в пятницу и начинает не раньше 0.00 после воскресенья!
Пользуйтесь индикатором DailyPivotPoints!
Не, я решительно ничего не понимаю. Явно уже пишу
на алерте равном 2 снимаю индикатор с минуток, провожу мышкой по свече... Volume=1.
Смотрел RateInfo в hst через FileInsight (типа дебагера), думаю может там int, а не double в Volume - нет, таки-double...
Добрый вечер.
Спасибо за ответ на мой вопрос))
Подскажите плз, если открываешь ордер на покупку то так OrderSend (Symbol(),OP_BUY,Lot,Ask,3,0,0,"Покупка",0,0,Green);
а если на продажу OrderSend (Symbol(),OP_SELL,Lot,Ask,3,0,0,"Продажа",0,0,Red);
разница в синем цвете??? или еще нужно и красный цвет менять??? т.е. где OP_BUY там цена Bid
где OP_SELL там цена Ask
и если все верно и менять ничего не надо, то почему на тестере все гуд, на деме все гуд, а на РЕАЛЕ "Ошибка открытия ордера 129" хелп плз.
Добрый вечер.
Спасибо за ответ на мой вопрос))
Подскажите плз, если открываешь ордер на покупку то так OrderSend (Symbol(),OP_BUY,Lot,Ask,3,0,0,"Покупка",0,0,Green);
а если на продажу OrderSend (Symbol(),OP_SELL,Lot,Ask,3,0,0,"Продажа",0,0,Red);
разница в синем цвете??? или еще нужно и красный цвет менять??? т.е. где OP_BUY там цена Bid
где OP_SELL там цена Ask
и если все верно и менять ничего не надо, то почему на тестере все гуд, на деме все гуд, а на РЕАЛЕ "Ошибка открытия ордера 129" хелп плз.
Добрый вечер.
Спасибо за ответ на мой вопрос))
Подскажите плз, если открываешь ордер на покупку то так OrderSend (Symbol(),OP_BUY,Lot,Ask,3,0,0,"Покупка",0,0,Green);
а если на продажу OrderSend (Symbol(),OP_SELL,Lot,Ask,3,0,0,"Продажа",0,0,Red);
...На продажу:
Рекомендую перед высланием ордера обновлять котировки:
RefreshRates(); OrderSend (...);
И обратите внимание, что слипадж у вас =3, для 4-значных котировок будет =3 пункта, а для 5-значных будет рассчитывать как 0,3 пункта. Поэтому если советник будет работать с 5-значными котировками, то ставте слипадж = 30.Не, я решительно ничего не понимаю. Явно уже пишу
на алерте равном 2 снимаю индикатор с минуток, провожу мышкой по свече... Volume=1.
Смотрел RateInfo в hst через FileInsight (типа дебагера), думаю может там int, а не double в Volume - нет, таки-double...
Посмотрел Ваш код.... слишком вы все запутали)))
Я не вполне понимаю, зачем аккумулировать тики, ведь нам достаточно хранить в памяти (или даже не хранить, ведь текущий бар надо писать в HST - иначе график не будет обновляться) параметры текущего бара - шесть чисел TOHLCV, и при поступлении тиков обновлять их по мере необходимости, а по заданному условию (TimeCurrent()-O>1) делать отсечку баров.
Попробуйте переработать код таким образом, он сократится раз в 8, я гарантирую это (проверено:)