Использование функции Print

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
Smile
Сообщения: 27
Зарегистрирован: Вт авг 08, 2006 1:06 pm

Использование функции Print

#1 Сообщение Smile » Вт авг 08, 2006 1:12 pm

Печать типа Integer:

Print(String(IntTostr(a))); где a - переменная типа integer, значение которой нужно вывести в журнал

Печать типа Double:
Print(String(FloatToStrF(Price, ffFixed, 10, 4))); где Price - переменная типа Double, значение которой нужно вывести в журнал

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

Re: Использование функции Print

#2 Сообщение Terranin » Вт авг 08, 2006 2:01 pm

Smile писал(а):Печать типа Integer:

Print(String(IntTostr(a))); где a - переменная типа integer, значение которой нужно вывести в журнал

Печать типа Double:
Print(String(FloatToStrF(Price, ffFixed, 10, 4))); где Price - переменная типа Double, значение которой нужно вывести в журнал
Ну во первых не надо делать string() достаточно Print(IntToStr(a));
Потом в Дельфи есть замечательная функция format -

вывести integer, longword, word, byte (целое)
Print(format('a=%d, b=%d', [a, b]));
> a=10, b=20

вывести double (с плавающей точкой)
Print(format('c=%.4f но d=%.2f', [c, d]));
> c=1.1375 но d=1.22

вывести строку
Print(format('text=%s', [s]));
> text=Hello

Smile
Сообщения: 27
Зарегистрирован: Вт авг 08, 2006 1:06 pm

#3 Сообщение Smile » Ср авг 09, 2006 1:11 pm

Не знал... Спасибо, теперь буду знать

AndyMEN
Сообщения: 1
Зарегистрирован: Пн июл 24, 2006 7:51 am

#4 Сообщение AndyMEN » Чт авг 10, 2006 6:27 pm

Terranin

Как можно заставить команду Print или Format печатать не только в журнал но в сами графики?

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

#5 Сообщение Terranin » Пт авг 11, 2006 1:22 pm

AndyMEN писал(а):Terranin

Как можно заставить команду Print или Format печатать не только в журнал но в сами графики?
Никак. Для графиков скорее всего будет механизм объектов, когда создается строка и обновляется.

Mike
Сообщения: 38
Зарегистрирован: Пт мар 16, 2007 2:03 pm

#6 Сообщение Mike » Пт июн 08, 2007 11:10 pm

AndyMEN писал(а):Terranin

Как можно заставить команду Print или Format печатать не только в журнал но в сами графики?
Подобный вопрос: Как можно информацию из журнала "впихнуть" скажем в историю счета (например добавить поле в историю счета или заменить какое-либо поле на своё)? И можно ли так вообще сделать? Или как вытащить инфу из журнала?

Спасибо!

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

#7 Сообщение Terranin » Сб июн 09, 2007 5:20 pm

Mike писал(а):
AndyMEN писал(а):Terranin

Как можно заставить команду Print или Format печатать не только в журнал но в сами графики?
Подобный вопрос: Как можно информацию из журнала "впихнуть" скажем в историю счета (например добавить поле в историю счета или заменить какое-либо поле на своё)? И можно ли так вообще сделать? Или как вытащить инфу из журнала?

Спасибо!
Журнал пишется в файл \Logs\ForexTester.log
Asta la vista
Mike

Mike
Сообщения: 38
Зарегистрирован: Пт мар 16, 2007 2:03 pm

#8 Сообщение Mike » Ср июн 20, 2007 11:17 am

Михаил, подскажите плиз!

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

Print(format('ширина =%.2f', [raznica]));
По йенозависимым парам получаем результат(например):

1.19, а нужно 119.00

Как получить именно такой формат 000.00 ?

Спасибо.

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

#9 Сообщение Terranin » Ср июн 20, 2007 1:04 pm

Mike писал(а):Михаил, подскажите плиз!

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

Print(format('ширина =%.2f', [raznica]));
По йенозависимым парам получаем результат(например):

1.19, а нужно 119.00

Как получить именно такой формат 000.00 ?

Спасибо.
Похоже что-то считается неправильно если выходит такое число. %.2f значит вывести с 2мя знаками после запятой, а 1.19 там будет или 119.00 это зависит от самого числа.
Asta la vista
Mike

income
Сообщения: 12
Зарегистрирован: Сб фев 16, 2008 3:27 pm

#10 Сообщение income » Сб фев 23, 2008 7:11 pm

Terranin писал(а):
Mike писал(а):Михаил, подскажите плиз!

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

Print(format('ширина =%.2f', [raznica]));
По йенозависимым парам получаем результат(например):

1.19, а нужно 119.00

Как получить именно такой формат 000.00 ?

Спасибо.
Похоже что-то считается неправильно если выходит такое число. %.2f значит вывести с 2мя знаками после запятой, а 1.19 там будет или 119.00 это зависит от самого числа.
Вычитаем из текущего дневного хая - текущий дневной лоу:

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

library WidthChannelFDAX ;

uses
  SysUtils, Classes, StrategyInterfaceUnit, TechnicalFunctions, DateUtils, Math;

var
  Currency: PChar = nil;
  TimeFrame: integer;
  LotSize: double;

 OrderHandle: integer;

 LastTime: TDateTime;
 CurrTime: TDateTime;

 r: double;
 
 {-----Init strategy----------------------------------------------------------}
procedure InitStrategy; stdcall;
begin
  StrategyShortName('Width ChannelFDAX');
  StrategyDescription('Ширина канала по времени FDAX');

  RegOption('Currency', ot_Currency, Currency);
  ReplaceStr(Currency, 'GBPUSD');

  RegOption('LotSize', ot_Double, LotSize);
  SetOptionDigits('LotSize', 1);
  lotSize := 0.1;

    end;

{-----Done strategy----------------------------------------------------------}
procedure DoneStrategy; stdcall;
begin
  FreeMem(Currency);
end;

{-----Reset strategy---------------------------------------------------------}
procedure ResetStrategy; stdcall;
begin
  OrderHandle := -1;
  LastTime := 0;

end;
{-----Process single tick----------------------------------------------------}
procedure GetSingleTick; stdcall;
var
h: double;
l: double;
begin
  // проверяем нашу валюту
  if Symbol <> Currency then
    exit;
  // устанавливаем валюту и таймфрейм
  SetCurrencyAndTimeFrame(Symbol, Timeframe);
  // проверяем время последнего бара

   CurrTime := iTime(Currency, PERIOD_M5, 0);

  if Time(0) <> LastTime then
    begin
     LastTime := Time(0);
   if (HourOf(Time(0)) = 14) and (MinuteOf(CurrTime) = 00) then
   begin
   h := iHigh(Currency, PERIOD_D1, 0);
   l := iLow(Currency, PERIOD_D1, 0);
   r := h - l;
   Print(format('ширина канала =%.2f', [r]));

end;
   end;
  end;
  
  exports

InitStrategy,
DoneStrategy,
ResetStrategy,
GetSingleTick;

end.

и выводит он нам: 0.00, а как считается? - 7467.2-7407.0(это котировки ДАКСа) = 60.2
Вот это и надо вывести: 60.2, или я неправильно накодил...?он постоянно мне выдает нули...что делать?

Подскажите пожалуйста?

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

#11 Сообщение Terranin » Сб фев 23, 2008 7:57 pm

Выведите все значения, валюту, hi, low и результат и посмотрите что показывает.

Print(format('%s, %.4f, %.4f, %.4f, ширина канала =%.2f', [Currency, h, l, r, r]));
Asta la vista
Mike

income
Сообщения: 12
Зарегистрирован: Сб фев 16, 2008 3:27 pm

#12 Сообщение income » Сб фев 23, 2008 8:11 pm

Terranin писал(а):Выведите все значения, валюту, hi, low и результат и посмотрите что показывает.

Print(format('%s, %.4f, %.4f, %.4f, ширина канала =%.2f', [Currency, h, l, r, r]));
FDAXFU, 7461,0000, 7461,0000, 0,0000, ширина канала =0,00

вот что показывает, получается что у хай и лоу одинаковая цена, как это может быть??

З.Ы. Кстати для фунта аналогично написанное работает правильно!

income
Сообщения: 12
Зарегистрирован: Сб фев 16, 2008 3:27 pm

#13 Сообщение income » Сб фев 23, 2008 8:29 pm

income писал(а):
Terranin писал(а):Выведите все значения, валюту, hi, low и результат и посмотрите что показывает.

Print(format('%s, %.4f, %.4f, %.4f, ширина канала =%.2f', [Currency, h, l, r, r]));
FDAXFU, 7461,0000, 7461,0000, 0,0000, ширина канала =0,00

вот что показывает, получается что у хай и лоу одинаковая цена, как это может быть??

З.Ы. Кстати для фунта аналогично написанное работает правильно!
теперь меняю в строке CurrTime := iTime(Currency, PERIOD_H1, 0);период на Н1 или D1 тогда все работаета, только зачем то по три раза печатает с интервалом по 15 минут:
2007.09.12 10:15:00 ширина канала =19,50
2007.09.12 10:30:00 ширина канала =19,50
2007.09.12 10:45:00 ширина канала =19,50

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

#14 Сообщение Terranin » Сб фев 23, 2008 8:53 pm

income писал(а):
income писал(а):
Terranin писал(а):Выведите все значения, валюту, hi, low и результат и посмотрите что показывает.

Print(format('%s, %.4f, %.4f, %.4f, ширина канала =%.2f', [Currency, h, l, r, r]));
FDAXFU, 7461,0000, 7461,0000, 0,0000, ширина канала =0,00

вот что показывает, получается что у хай и лоу одинаковая цена, как это может быть??

З.Ы. Кстати для фунта аналогично написанное работает правильно!
теперь меняю в строке CurrTime := iTime(Currency, PERIOD_H1, 0);период на Н1 или D1 тогда все работаета, только зачем то по три раза печатает с интервалом по 15 минут:
2007.09.12 10:15:00 ширина канала =19,50
2007.09.12 10:30:00 ширина канала =19,50
2007.09.12 10:45:00 ширина канала =19,50
Значит что-то не то с загруженными котировками. Программе нужны минутные котировки как база для генерации тиков. Свеча не меняется вот и лепит там одни и теже данные.
Asta la vista
Mike

income
Сообщения: 12
Зарегистрирован: Сб фев 16, 2008 3:27 pm

#15 Сообщение income » Сб фев 23, 2008 8:59 pm

действительно проблемы с котировками (минуток нету)этого долбанного МТ, бл....
ну в принципе все работает сейчас как надо, ширину выдает, только котировки обновлю.

Спасибо за оперативную помощь!

Нашел минутки, - теперь все работает правильно и один раз печатает ширину! :)

Ответить