Текущий период графика (как узнать?)

Задавайте общие вопросы о функциях программы.
Ответить
Сообщение
Автор
Sharx
Сообщения: 36
Зарегистрирован: Ср мар 18, 2009 9:03 am

Текущий период графика (как узнать?)

#1 Сообщение Sharx » Пт мар 27, 2009 1:15 pm

Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Текущий период графика (как узнать?)

#2 Сообщение Terranin » Вт мар 31, 2009 4:53 pm

Sharx писал(а):Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо
Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
Asta la vista
Mike

Sharx
Сообщения: 36
Зарегистрирован: Ср мар 18, 2009 9:03 am

Re: Текущий период графика (как узнать?)

#3 Сообщение Sharx » Пт апр 03, 2009 7:31 am

Terranin писал(а):
Sharx писал(а):Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо
Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
У меня такая задача:
1. Рисовать линию от фрактала(0) до фрактала(1) не через буфер, а напрямую через содание обекта TrendLine (что то вроде зигзага)
2. Хотел чтобы при переключении таймфрейма, допустим с M5 на H1 линия перечечивалась по фракталам H1.

Сдесь скорее стоит задача Как получить текущий просматриваемый таймфрейм.

Можно ли это осуществить?
(ps в МТ4 при переключении таймфреймов, вызывается функция Start() 'куда приходят тики', в которой пресчитываются данные с учетом нового, полученого Period())

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Текущий период графика (как узнать?)

#4 Сообщение Terranin » Пт апр 03, 2009 3:09 pm

Sharx писал(а):
Terranin писал(а):
Sharx писал(а):Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо
Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
У меня такая задача:
1. Рисовать линию от фрактала(0) до фрактала(1) не через буфер, а напрямую через содание обекта TrendLine (что то вроде зигзага)
2. Хотел чтобы при переключении таймфрейма, допустим с M5 на H1 линия перечечивалась по фракталам H1.

Сдесь скорее стоит задача Как получить текущий просматриваемый таймфрейм.

Можно ли это осуществить?
(ps в МТ4 при переключении таймфреймов, вызывается функция Start() 'куда приходят тики', в которой пресчитываются данные с учетом нового, полученого Period())
В Forex Tester индикаторы привязаны к конкретному таймфрейму, поэтому при переключении видимых таймфреймов для них ничего не меняется и ничего не пересчитывается. Если нужно видеть индикатор на таймфрейме m5 и h1 нужно повесить 2 индикатора на эти 2 таймфрейма. А внутри индикатора уже смотреть на каком таймфрейме он висит с помощью Timeframe.
Asta la vista
Mike

Sharx
Сообщения: 36
Зарегистрирован: Ср мар 18, 2009 9:03 am

Re: Текущий период графика (как узнать?)

#5 Сообщение Sharx » Пт апр 03, 2009 5:04 pm

Terranin писал(а):
Sharx писал(а):
Terranin писал(а): Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
У меня такая задача:
1. Рисовать линию от фрактала(0) до фрактала(1) не через буфер, а напрямую через содание обекта TrendLine (что то вроде зигзага)
2. Хотел чтобы при переключении таймфрейма, допустим с M5 на H1 линия перечечивалась по фракталам H1.

Сдесь скорее стоит задача Как получить текущий просматриваемый таймфрейм.

Можно ли это осуществить?
(ps в МТ4 при переключении таймфреймов, вызывается функция Start() 'куда приходят тики', в которой пресчитываются данные с учетом нового, полученого Period())
В Forex Tester индикаторы привязаны к конкретному таймфрейму, поэтому при переключении видимых таймфреймов для них ничего не меняется и ничего не пересчитывается. Если нужно видеть индикатор на таймфрейме m5 и h1 нужно повесить 2 индикатора на эти 2 таймфрейма. А внутри индикатора уже смотреть на каком таймфрейме он висит с помощью Timeframe.
Жаль :cry:

но всеравно Спасибо

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

Re: Текущий период графика (как узнать?)

#6 Сообщение Николай Тарасов » Вт ноя 30, 2010 1:35 pm

Terranin писал(а):
Sharx писал(а):Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо
Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
Михаил, скажите, а как текущий таймфрейм можно задать в скрипте?
На запись:

Код: Выделить всё

// points index 
  index1 := iBarShift(Symbol, Timeframe, time1, false);
у меня компилятор выдаёт: [Error] TIRmTargets.dpr(83): Undeclared identifier: 'Timeframe'
Хотя, к проекту скрипта я прикрепил и 'ScriptInterfaceUnit', и 'TechnicalFunctions'.

* * *
Кстати, не проще ли вам ввести константу "0" (ноль) для обозначения текущего таймфрейма (как в МТ4)?
Я желаю всем счастья.

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Текущий период графика (как узнать?)

#7 Сообщение Terranin » Вт ноя 30, 2010 6:11 pm

Николай Тарасов писал(а):
Terranin писал(а):
Sharx писал(а):Текущий период графика (как узнать?)
в MQL4 это можно узнать функцией
Period();

Заранее спасибо
Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
Михаил, скажите, а как текущий таймфрейм можно задать в скрипте?
На запись:

Код: Выделить всё

// points index 
  index1 := iBarShift(Symbol, Timeframe, time1, false);
у меня компилятор выдаёт: [Error] TIRmTargets.dpr(83): Undeclared identifier: 'Timeframe'
Хотя, к проекту скрипта я прикрепил и 'ScriptInterfaceUnit', и 'TechnicalFunctions'.

* * *
Кстати, не проще ли вам ввести константу "0" (ноль) для обозначения текущего таймфрейма (как в МТ4)?
Скрипты писались со стратегий и там нет такой возможности, потому что стратегия не привязана к таймфрейму или какому-то графику отдельному. Там валюта и таймфрейм задавались с помощью процедуры SetCurrencyAndTimeframe , и после этого и так было ясно какой таймфрейм используется потому что сами его и задавали. Но в принципе можно добавить такую возможность в следующем обновлении.
Asta la vista
Mike

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

Re: Текущий период графика (как узнать?)

#8 Сообщение Николай Тарасов » Чт дек 30, 2010 6:33 am

Terranin писал(а): ... в принципе можно добавить такую возможность в следующем обновлении.
Спасибо. Будем ждать.
А пока из положения, думаю, можно выйти как-то так.
Как рассчитать количество дней и часов между двумя TDateTime?
Ниже приведён примерчик универсального определения периода между TDateTime. За основу взята функция DataDiff из RxLib и добавлено определение разности часов.

Код: Выделить всё

procedure DateTimeDiff(Date1, Date2: TDateTime; var Hours, Days, Months, Years: Word);
var
  DtSwap: TDateTime;
  Day1, Day2, Month1, Month2, Year1, Year2: Word;
  Hour1, Min1, Sec1, MSec1, Hour2, Min2, Sec2, MSec2: Word;
begin
  if Date1 > Date2 then begin
    DtSwap := Date1;

    Date1 := Date2;
    Date2 := DtSwap;
  end;
  DecodeDate(Date1, Year1, Month1, Day1);
  DecodeDate(Date2, Year2, Month2, Day2);
  Years := Year2 - Year1;
  Months := 0;
  Days := 0;
  Hours:= 0;
  if Month2 < Month1 then begin
    Inc(Months, 12);
    Dec(Years);
  end;
  Inc(Months, Month2 - Month1);
  if Day2 < Day1 then begin
    Inc(Days, DaysPerMonth(Year1, Month1));
    if Months = 0 then begin

      Dec(Years);
      Months := 11;
    end
    else Dec(Months);
  end;
  Inc(Days, Day2 - Day1);

  DecodeTime(Date1, Hour1, Min1, Sec1, MSec1);
  DecodeTime(Date2, Hour2, Min2, Sec2, MSec2);
  if Hour2 < Hour1 then begin
    Inc(Hours, 24);
    Dec(Days);
  end;
  Inc(Hours, Hour2 - Hour1);
end;
В качестве домашнего задания: сделать расчёт минут, секунд и т.д.
---
Источник: "Подборка книг по Delphi, Pascal" на http://www.RuTracker.org, справка "Delphi FAQ" (файл JBDelFAQ.hlp).
Я желаю всем счастья.

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

#9 Сообщение Николай Тарасов » Пт дек 31, 2010 2:38 am

Как в скрипте узнать Timeframe текущего графика

Ха! А можно сделать всё гораздо проще.
Чтобы в скрипте узнать Timeframe текущего графика достаточно на нём перебрать несколько последовательных баров (минимум 3-4 бара) и взять минимальное (или самое модное, если хотите) расстояние между ними в минутах.
Поскольку учёт времени в Forex Tester2 производится в днях (как в MS_Excel), то число минут между барами вычисляется элементарно:

Код: Выделить всё

var
  tf: integer = 1;
begin
  tf := Trunc(Abs(ScriptInterfaceUnit.Time(0)-ScriptInterfaceUnit.Time(1))*24*60+5/9);
end;
Множитель "24*60=1440" – это количество минут в сутках.

Вероятно, позднее можно будет написать соответствующую функцию TimeFr().

Код: Выделить всё

function
TimeFr(quota: integer) result: integer;
...
PS
Понятно, что это временный выход из положения - до выхода улучшенной версии FT2.
Я желаю всем счастья.

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

Re: Текущий период графика (как узнать?)

#10 Сообщение Николай Тарасов » Вс янв 02, 2011 12:41 am

Terranin писал(а):
Николай Тарасов писал(а):
Terranin писал(а): Для индикатора это можно узнать функцией Timeframe, для стратегий узнать нельзя потому что стратегия не привязана к таймфрейму и валюте, там Вы сами задаете текущую валюту и таймфрейм функцией SetCurrencyAndTimeframe.
Михаил, скажите, а как текущий таймфрейм можно задать в скрипте?
На запись:

Код: Выделить всё

// points index 
  index1 := iBarShift(Symbol, Timeframe, time1, false);
у меня компилятор выдаёт: [Error] TIRmTargets.dpr(83): Undeclared identifier: 'Timeframe'
Хотя, к проекту скрипта я прикрепил и 'ScriptInterfaceUnit', и 'TechnicalFunctions'.

* * *
Кстати, не проще ли вам ввести константу "0" (ноль) для обозначения текущего таймфрейма (как в МТ4)?
Скрипты писались со стратегий и там нет такой возможности, потому что стратегия не привязана к таймфрейму или какому-то графику отдельному. Там валюта и таймфрейм задавались с помощью процедуры SetCurrencyAndTimeframe , и после этого и так было ясно какой таймфрейм используется потому что сами его и задавали. Но в принципе можно добавить такую возможность в следующем обновлении.
Итак, прошу любить и жаловать - функция для расчёта Timeframe текущего графика (не только в скрипте):

Код: Выделить всё

  function TimeFr(): integer;
  // Поиск Timeframe по минимальному шагу баров, а не по самому модному, 
  // т.к. все бары в ForexTester_2.6 рассчитываются из минуток (M1).
  // Минимальное число точек выборки (квота)  - 4, т.к. между праздниками
  // и выходным теоретически возможен всего один рабочий день.
  var
    i, quota, time_frame, time_step :integer;
  begin
    time_frame := Trunc(Abs(ScriptInterfaceUnit.Time(0)-
      ScriptInterfaceUnit.Time(1))*24*60+5/9);
    quota := 4;
    if quota < Bars-2 then quota := Bars-2;
    for i:=0 to quota do
      begin
        time_step := Trunc(Abs(ScriptInterfaceUnit.Time(i)-
          ScriptInterfaceUnit.Time(i+1))*24*60+5/9);
        if time_step < time_frame then time_frame := time_step;
      end;
    Result := time_frame;
  end;
Примечание.
// Поиск Timeframe по минимальному шагу баров, а не по самому модному,
// т.к. все бары в ForexTester_2.6 рассчитываются из минуток (M1).
// Минимальное число точек выборки (квота) - 4, т.к. между праздниками
// и выходным теоретически возможен всего один рабочий день.
Я желаю всем счастья.

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

#11 Сообщение Николай Тарасов » Чт янв 20, 2011 1:21 pm

Друзья, скажите, пожалуйста, как можно код программы с русскими комментариями
адекватно
(без искажений кодировки русского шрифта) перенести в MS Word?

Пример (см. слово "Границы"):

1) код в Delphi7:

Код: Выделить всё

… 
  // Limits - Границы 
  alfa, betta, gamma, delta: TDateTime; // limit1..4 
… 
2) код после копирования его в буфер (Ctrl+C) и вставки в MS Word (Ctrl+V):

Код: Выделить всё

… 
  // Limits - Ãðàíèöû
  alfa, betta, gamma, delta: TDateTime; // limit1..4 
… 
Заранее благодарю.


PS:
Русификация Delphi7 не помогла.


PS2:
Подправляя данный пост обратил внимание, что слово "Границы" во втором примере записано особым образом (кодом):
"Г" - '&''#''195;'
"р" - '&''#''240;'
"а" - '&''#''224;'
"н" - '&''#''237;'
"и" - '&''#''232;'
"ц" - '&''#''246;'
"ы" - '&''#''251;'

Апострофы я вставил, чтобы стали видны не символы, а их коды.

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

Теперь мой вопрос стал более определённым - как правильно спецсимволы конвертировать
в русский шрифт, и какими средствами это делать?
Я желаю всем счастья.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#12 Сообщение FT Support » Пт янв 21, 2011 2:45 pm

Здравствуйте, Николай,

Похоже что-то не так с Вашим вордом :)
попробуйте сначала скопировать текст в блокнот а потом оттуда в ворд, или как вариант можно использовать какие-нибудь конвертеры (например прикреплённую программку)
Вложения
TCode_UnicodeEncoder.zip
(277.83 КБ) 882 скачивания

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

#13 Сообщение Николай Тарасов » Пт янв 21, 2011 5:01 pm

FT Support писал(а):Здравствуйте, Николай,

Похоже что-то не так с Вашим вордом :)
попробуйте сначала скопировать текст в блокнот а потом оттуда в ворд, или как вариант можно использовать какие-нибудь конвертеры (например прикреплённую программку)
Спасибо большое, Александр!
Очень полезный конвертор (подробности здесь: http://alexboiko.narod.ru).
Всё работает как надо.
Теперь можно не перепечатывать куски кода на русском.



PS:
Я думаю, что дело не в моём MS Word, MS "Блокнот" или MS Internet Explorer (даже не знаю, что ещё можно было бы попробовать).
Скорей всего, что-то не так с буфером обмена, т.е. с MS Windows XP.
:)
Хотя, внутри Delphi7, буфер работает нормально.

Возможно, так проявляется 'Punto Switcher' - программа автоматического переключения раскладки клавиатуры от ООО "Яндекс".
Я желаю всем счастья.

Аватара пользователя
Николай Тарасов
Сообщения: 144
Зарегистрирован: Чт авг 27, 2009 4:39 pm
Откуда: Екатеринбург
Контактная информация:

#14 Сообщение Николай Тарасов » Пт янв 21, 2011 7:22 pm

Кстати говоря, Александр.
Ваш редактор сообщений (здесь, на форуме) тоже кочевряжится, и ни в какую не желает отражать сообщения, содержащие ссылки на русские интернет-странички.

Вот пример:
Таблицу "Цвета HTML" смотрите здесь: http://ru.wikipedia.org/wiki/Цвета_в_Web
Чтобы сообщение было видно, мне пришлось эмитировать, что это ссылка, отказавшись от явного указания, что это URL-код.
Я желаю всем счастья.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#15 Сообщение FT Support » Вт янв 25, 2011 8:28 am

Да, видимо когда разрабатывался этот форум русскоязычные ссылки ещё не были распространены.

Ну я думаю что это не такая большая потеря для посетителей нашего форума, ведь ссылку всегда можно просто скопировать в буфер и вставить в браузер

Ответить