Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 48 из 87 ПерваяПервая ... 38464748495058 ... ПоследняяПоследняя
  1. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от SergP Посмотреть сообщение
    это придёться фукцию Start() в while(true) загонять.. а это черевато... и усложняет прогу,в плане слежения за котироваками и выставления ордеров
    А так:
    if(TimeSeconds(prevtime)!=1)
    {
    StartProfit();
    }
    prevtime=TimeCurrent();

    А StartProfit() выкладывает такие данные ежесекундно - см. вложение:
     
  2. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от religare777 Посмотреть сообщение
    А так:
    if(TimeSeconds(prevtime)!=1)
    {
    StartProfit();
    }
    prevtime=TimeCurrent();

    А StartProfit() выкладывает такие данные ежесекундно - см. вложение:
    дык.... прога то выполняется только тогда, когда приходит котировка.... или нужно сразу после Start() писать
    while(true)
    {
    ......
    }:D

    а ты хочешь именно отсутствие котировок сечь
  3. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от Sevrer Посмотреть сообщение
    Ты сначала узнай, а дает ли твой брокер историю минуток за последний месяц. В основном брокеры дают минутки за последние неделю или две.

    Теперь по существу:
    Исторические данные начинают подгружаться как только ты к ним обратишься например функцией iClose() или аналогичной, НО, сколько загрузится истории и, тем более, когда, терминал не в курсе, а потому вернет сейчас то значение, которое ему известно. При этом та же функция через пару тиков может вернуть другое значение, т.к. часть истории уже подгрузилась.
    Похоже эта функция возвращает только наличие исторических данных по определенному бару:


    if(iClose(Symbol(),PERIOD_M1,10000)>0) Print("история загружена");
    if(iClose(Symbol(),PERIOD_M1,10000)==0) Print("история не загружена");

    возвращает наличие данных о закрытии 10000 бара от текущего. Я правильно понял? Тогда, если я не нажимаю загрузить историю в архиве котировок, функция возвращает "история не загружена" все равно. Или я неправильно использую эту функцию или она только проверочная, т.е. никакую загрузку не делает.
  4. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Обращение к отсутствующему бару может, хоть и не обязательно, запустить подгрузку истории. Точная логика мне неизвестна, но если после такого обращения GetLastError() установится в ERR_HISTORY_WILL_UPDATED, то при следующей попытке доступной истории станет больше, пока будет что выкачивать с датацентра.
  5. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    Обращение к отсутствующему бару может, хоть и не обязательно, запустить подгрузку истории. Точная логика мне неизвестна, но если после такого обращения GetLastError() установится в ERR_HISTORY_WILL_UPDATED, то при следующей попытке доступной истории станет больше, пока будет что выкачивать с датацентра.
    Проверено: никакой подгрузки не делает. Нужно вручную всё делать, а мне-то нужно всего лишь история минуток за последние 1-2 недели, даже не обязательно месяц.
  6. 1,279
    Комментарии
    15
    Темы
    1292
    Репутация Pro
    Аватар для Sevrer  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от religare777 Посмотреть сообщение
    Проверено: никакой подгрузки не делает. Нужно вручную всё делать, а мне-то нужно всего лишь история минуток за последние 1-2 недели, даже не обязательно месяц.
    А у меня делает. Я даже вижу как у меня внешний вид индикатора меняется.
  7. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от Sevrer Посмотреть сообщение
    А у меня делает. Я даже вижу как у меня внешний вид индикатора меняется.
    Возможно. Но после некоторого времени, если график открыт. А сколько времени должно пройти - не понятно! Открыл сразу несколько графиков - 4 из них раздуплились и советник заработал, а на одном история так и не подгрузилась. Посмотрим. Все равно спасибо за совет!
  8. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Добрый день!
    Как программно переключаться между окнами тайм-фрейма?
    Т.е. находясь на M1, открыть М30.
    С уважением,
    Александр
  9. 1,279
    Комментарии
    15
    Темы
    1292
    Репутация Pro
    Аватар для Sevrer  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от religare777 Посмотреть сообщение
    Добрый день!
    Как программно переключаться между окнами тайм-фрейма?
    Т.е. находясь на M1, открыть М30.
    С уважением,
    Александр
    Если речь идет действительно о переключении ТФ, то такое возможно только в МТ5, в МТ4 такой возможности просто нет.
    EQU мне тут конечно возразит, т.к. одна возможность все таки есть, с помощью WinAPI, но это уже другая история.

    Ну а просто получить доступ к данным другого ТФ можно с помощью функций iClose, iOpen, iHigh, iLow и пр..
  10. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от Sevrer Посмотреть сообщение
    А у меня делает. Я даже вижу как у меня внешний вид индикатора меняется.
    А что за индикатор, я смог сваять только такое (см. изображение) и то из советника почему-то плохо обновляется.
    Заметил, что загрузка данных происходит быстрее, если отскроллировать назад PageUp и переключаться между тайм-фремами.
    Для скроллирования я нашел:
    void StartScrolling()
    {
    string TimeFinal="2010.5.15 15:00";
    int handle=WindowHandle(Symbol(),Period());
    int bar=0;
    datetime time=Time[bar];
    datetime time_final=StrToTime(TimeFinal);
    while (time>time_final) {
    PostMessageA(handle,WM_KEYDOWN,VK_PAGEUP,0);
    bar=WindowFirstVisibleBar();
    time=Time[bar];
    Sleep(10);
    }
    А вот как программно между тайм-фреймами переключаться - не знаю.
     

Вверх
РегистрацияX

чтобы писать, читать, комментировать