Краткое описание функций Wealth Lab. Часть 2
Функции Wealth-Lab. Часть 2
Функции технических индикаторов
Технические индикаторы позволяют проводить технический анализ. На основе этих функций можно создавать собственные индикаторы и стратегии.
Индикаторы имеют 2 синтаксические формы. Первая возвращает значение индикатора на конкретном баре, вторая – возвращает целочисленный указатель на весь ценовой ряд индикатора.
SMA
SMA( Bar: integer; Series: integer; Period: integer ): float;
SMASeries( Series: integer; Period: integer ): integer;
SMA возвращает индикатор Simple Moving Average (Простая скользящая средняя). SMA – это самая простая из всего разнообразия скользящих средних: это просто средняя цена за указанный период.
Расчет
SMA – средняя из значений ряда за указанный период времени.
Пример
{ An SMA Crossover system }
var BAR, hSlow, hFast, SlowPer, FastPer: integer;
SlowPer := 100;
FastPer := 40;
hSlow := SMASeries( #Close, SlowPer );
hFast := SMASeries( #Close, FastPer );
PlotSeries( hSlow, 0, 000, #Thick );
PlotSeries( hFast, 0, 502, #Thick );
for Bar := SlowPer to BarCount - 1 do
begin
if not LastPositionActive then
begin
if CrossOver( Bar, hFast, hSlow ) then
BuyAtMarket( Bar + 1, '');
end
else
begin
if CrossUnder( Bar, hFast, hSlow ) then
SellAtMarket( Bar + 1, LastPosition, '' );
end;
end;
Round
Round( Value: float ): integer;
Округляет значение числа с плавающей точкой до ближайшего целого, которое и возвращает как целочисленный тип integer. При этом Round использует т.наз. «банковское округление», которое означает что результат округления числа, находящегоя ровно межлу 2-мя целыми числами будет всегда четным числом.
Пример
{ n equals 2 and p equals -3 at the end of the example }
var x: float;
var n, p: integer;
x := 2.5;
n := Round( x );
x := -3.49;
p := Round( x );
ShowMessage( IntToStr(n) + #9 + IntToStr(p) );
Random
Random: float;
Возвращает случайное число между 1 и 0.
Пример
{ Get a random value between 100 and 200 }
var x: float;
x := Random * 100 + 100;
RSI
RSI( Bar: integer; Series: integer; Period: integer ): float;
RSISeries( Series: integer; Period: integer ): integer;
Возвращает индикатор RSI (индекс относительной силы), измеряющий силу тренда.
Значение индикатора колеблется в интервале от 0 to 100. Наиболее популярные периоды для расчета RSI – 9, 14 и 25. Создатель индекса У.Уилдер использовал 14 периодов. Чем меньше периодов используется для расчета, тем более волатильным становится индикатор.
Расчет
RSI = 100 – ( 100 / ( 1 + RS ) )
где,
RSI – индекс относительной силы
RS = (среднее значение положительных ценовых изменений за период) / (среднее значение отрицательных ценовых изменений за период)
Периоды обычно берутся размером в 14 баров.
Пример
{ This script colors each bar based on the RSI oversold/overbought level }
var X: float;
var RSIPANE, BAR, COL: integer;
RSIPane := CreatePane( 75, true, true );
SetPaneMinMax( RSIPane, 0, 100 );
PlotSeries( RSISeries( #Close, 14 ), RSIPane, 005, #Thin );
DrawLabel( 'RSI( Close, 14 )', RSIPane );
for Bar := 42 to BarCount - 1 do
begin
x := RSI( Bar, #Close, 14 );
if x #* [# 50 then
begin
x := x - 50;
x := x * 2;
x := x / 9;
col := Trunc( x ) * 100;
end
else
begin
x := 50 - x;
x := x * 2;
x := x / 9;
col := Trunc( x ) * 10;
end;
SetBarColor( Bar, col );
end;
EMA
EMA( Bar: integer; Series: integer; Period: integer ): float;
EMASeries( Series: integer; Period: integer ): integer;
EMA возвращает индикатор Exponential Moving Average (экспоненциальная скользящая средняя) для указанного периода. EMA аналогична SMA, в том что также рассчитывает среднюю за период. Однако EMA в отличие SMA придает больший вес наиболее последним значениям периода.
Расчет
EMA = ( K x ( C – P ) ) + P
где,
C = Текущая цена
P = Предыдущие периоды EMA (SMA используется для вычислений на первых периодах)
K = Экспоненциальная константа
Константа K для своего расчет опирается на число периодов для расчета средней: K = ( 1 / n) * 2, где n – период на котором строится EMA.
Пример
{ Dual EMA CrossOver System }
var BAR, P: integer;
{ UseUpdatedEMA( true ); } {Alternate smoothing exponent}
PlotSeries( EMASeries( #Close, 60 ), 0, 002, #Thick );
DrawLabel( 'EMA( Close, 60 )', 0 );
PlotSeries( EMASeries( #Close, 120 ), 0, 202, #Thin );
DrawLabel( 'EMA( Close, 120 )', 0 );
for Bar := 120 to BarCount - 1 do
begin
if not LastPositionActive then
begin
if CrossOver( Bar, EMASeries( #Close, 60 ), EMASeries( #Close, 120
) ) then
BuyAtMarket( Bar + 1, '' );
end
else
begin
if CrossUnder( Bar, EMASeries( #Close, 60 ), EMASeries( #Close, 120
) ) then
SellAtMarket( Bar + 1, LastPosition, '' );
end;
end;
StdDev
StdDev( Bar: integer; Series: integer; Period: integer ): float;
StdDevSeries( Series: integer; Period: integer ): integer;
Стандартное отклонение (Standart Deviation) – это статистическое измерение волатильности рынка. Индикатор характеризует размер колебаний цены относительно скользящего среднего.
Пример
{ Divide Standard Deviation by Average Price to arrive
at a normalized Volatility indicator }
var MYVOLATILITY, VOLPANE: integer;
MyVolatility := DivideSeries( StdDevSeries( #Close, 30 ),
SMASeries( #Close, 30 ) );
VolPane := CreatePane( 100, true, true );
PlotSeries( MyVolatility, VolPane, #Purple, #ThickHist );
BBandLower
BBandLower( Bar: integer; Series: integer; Period: integer; StdDev: float ): float;
BBandLowerSeries( Series: integer; Period: integer; StdDev: float ): integer;
Линии Bollinger Bands (Полосы Боллинджера) строятся как полоса вокруг скользящей средней. Ширина полосы пропорциональна стандартному отклонению от скользящей средней за указанный период времени.
Расчет
В начале считается и строится SMA, потом на тех же данных строится StdDev. Для построения верхней границы полосы используется SMA+ StdDev, для нижней – SMA-StdDev
Обычно используется следующие значения:
Краткосрочный период: 10 дневная SMA, полоса в 1.5 StdDev.
Среднесрочный период: 20 дневная SMA, полоса в 2 StdDev.
Долгосрочный период: 50 дневная SMA, полоса в 2.5 StdDev.
Пример
{ Flag bars that have penetrated the lower BBand }
var Bar: integer;
PlotSeries( BBandLowerSeries( #Close, 10, 1.50 ), 0, 205, #Thick );
for Bar := 10 to BarCount - 1 do
if PriceLow( Bar ) < BBandLower( Bar, #Close, 10, 1.50 ) then
SetBarColor( Bar, #Red );
BBandUpper
BBandUpper( Bar: integer; Series: integer; Period: integer; StdDev: float ): float;
BBandUpperSeries( Series: integer; Period: integer; StdDev: float ): integer;
См. BBandLower
Пример
{ Flag bars that have penetrated the upper BBand }
var Bar: integer;
PlotSeries( BBandUpperSeries( #Close, 10, 1.50 ), 0, 205, #Thick );
for Bar := 10 to BarCount - 1 do
if PriceHigh( Bar ) #* [# BBandUpper( Bar, #Close, 10, 1.50 ) then
SetBarColor( Bar, 050 );
Highest
Highest( Bar: integer; Series: integer; Period: integer ): float;
HighestSeries( Series: integer; Period: integer ): integer;
Возвращает наибольшее значение ценового ряда в рассматриваемом периоде.
Расчет
Просматривает указанное число последних баров и возвращает наибольшую цену за период.
Пример
{ Have we made a 100 bar high? }
var BAR: integer;
for Bar := 100 to BarCount - 1 do
if PriceHigh( Bar ) = Highest( Bar, #High, 100 ) then
AnnotateBar( 'NH', Bar, true, #Black, 8 );
Lowest
Lowest( Bar: integer; Series: integer; Period: integer ): float;
LowestSeries( Series: integer; Period: integer ): integer;
Возвращает наименьшее значение ценового ряда в рассматриваемом периоде.
Расчет
Просматривает указанное число последних баров и возвращает наименьшую цену за период.
Пример
{ Plot the most recent 40 bar low as dots on the chart }
PlotSeries( LowestSeries( #Low, 40 ), 0, #Maroon, #Dots );
DrawLabel( 'Lowest( Low, 40 )', 0 );
StochD
StochD( Bar: integer; Period: integer; Smooth: integer ): float;
StochDSeries( Period: integer; Smooth: integer ): integer;
StochD возвращает стохастический индикатор Stochastic %D. Это сглаженная на коэффициент Smooth версия Stochastic %K. Стохастик изменяется в диапазоне от 0 до 100. При этом значение 0% означает, что соответствующая ему цена закрытия была самой низкой за определенный период времени, а значение 100 наоборот говорит о том, что в этом месте имелась максимальная цена закрытия.
Сочетание %K and %D называют быстрым стохастиком. StochD можно использовать как основу для создания медленного стохастика %K. Чтобы создать медленного стохастика нужно взять скользящую среднюю StochD.
Расчет
n = Число периодов, обычно 5
S = Число сглаженных интервалов, обычно 3
%D = Медленный стохастик K, сглаженный за S периодов (не SMA сглаживание)
HH(Bar-j) = Наибольшая величина бара за Bar-j из n периодов
LL(Bar-j) = Наименьшая величина бара за Bar-j из n периодов
C(Bar-j) = Цена закрытия бара Bar-j
S?= Сумма за: от j = 0 до S – 1 периодов
Sum1 = S(C(Bar-j) – LL(Bar-j) )
Sum2 = S(HH(Bar-j) – LL(Bar-j) )
%D = 100 * Sum1 / Sum2
Пример
{ Simple system based on Slow Stochastic }
var STOCHPANE, SLOWK, SLOWD, BAR: integer;
StochPane := CreatePane( 120, true, true );
SlowK := StochDSeries( 10, 3 );
SlowD := SMASeries( SlowK, 3 );
PlotSeries( SlowK, StochPane, #Purple, #Thick );
PlotSeries( SlowD, StochPane, #Black, #Thin );
for Bar := 20 to BarCount - 1 do
begin
if not LastPositionActive then
begin
if CrossOver( Bar, SlowK, SlowD ) then
if GetSeriesValue( Bar - 1, SlowK ) < 20 then
BuyAtMarket( Bar + 1, '');
end
else
begin
if CrossOverValue( Bar, SlowK, 80 ) then
SellAtMarket( Bar + 1, LastPosition, '' );
end;
end;
StochK
StochK( Bar: integer; Period: integer ): float;
StochKSeries( Period: integer ): integer;
StochK возвращает стохастический осциллятор Stochastic Oscillator %K.
Стохастический осциллятор измеряет насколько цена близка к своим верхним или нижним границам. Индикатор изменяется в диапазоне от 0 до 100. При этом значение 0 означает, что соответствующая ему цена закрытия была самой низкой за определенный период времени, а значение 100 наоборот говорит о том, что в этом месте имелась максимальная цена закрытия.
Классическая интерпретация стохастика предполагает, что при достижении %K уровня более 70 обычно означает перекупленность, а ниже 30 – перепроданность.
Расчет
n = Число периодов, обычно 5
HHn = Наибольшая величина бара за n периодов
LLn = Наименьшая величина бара за n периодов
C = Цена закрытия текущего бара
%K = Stochastic K = 100 * ( C – LLn ) / ( HHn – LLn )
Пример
{ A system based on Fast Stochastic Extreme Levels }
var STOCHPANE, BAR, P: integer;
StochPane := CreatePane( 100, true, true );
PlotSeries( StochKSeries( 14 ), StochPane, 505, #Thick );
DrawLabel( 'StochK( 14 )', StochPane );
for Bar := 14 to BarCount - 1 do
begin
if CrossUnderValue( Bar, StochKSeries( 14 ), 20 ) then
BuyAtMarket( Bar + 1, '');
if CrossOverValue( Bar, StochKSeries( 14 ), 20 ) then
for P := 0 to PositionCount - 1 do
if PositionActive( P ) then
SellAtMarket( Bar + 1, P, '' );
end;
Sum
Sum( Bar: integer; Series: integer; Period: integer ): float;
SumSeries( Series: integer; Period: integer ): integer;
Возвращает сумму значений ценового ряда за определенный период. Это не является само по себе индикатором, но используется для создания других индикаторов как математическая функция суммирования значений ценового ряда.
Расчет
Простое сложение цен за период
Sum = ( P1 + P2 + … + Pn )
где,
Sum = сложение значения цен
P = цены: #Open, #Close, SMASeries, и т.д.
. . .
n = число баров в периоде
Пример
{ Plot 20 bar sum of Highs minus Lows }
var XUP, XDOWN: float;
var UPMINUSDOWN, BAR, UDPANE: integer;
UpMinusDown := CreateSeries;
for Bar := 20 to BarCount - 1 do
begin
xUp := Sum( Bar, #High, 20 );
xDown := Sum( Bar, #Low, 20 );
SetSeriesValue( Bar, UpMinusDown, xUp - xDown );
end;
UDPane := CreatePane( 70, false, true );
PlotSeries( UpMinusDown, UDPane, #Olive, #Thick );
WilderMA
WilderMA( Bar: integer; Series: integer; Period: integer ): float;
WilderMASeries( Series: integer; Period: integer ): integer;
WilderMA возвращает скользящую среднюю, рассчитанную по формуле У.Уайлдера (Welles Wilder) представленной в его книге «Новые концепции технических торговых систем» (New Concepts in Technical Trading). Этот индикатор похож на экспоненциальную скользящую среднюю. TВ сравнении с другими скользящими средними WildersMA сравнительно медленно реагирует на изменения цен. WildersMA рассчитанная на n периодах дает сходные значения с EMA, построенной на 2n периодах. Например, EMA на a 14 периодах имеет практически те же значения, что и WilderMA на 7-ми периодах.
Расчет
WilderMA для n периодов рассчитывается по следующей формуле:
Wilder MA = ( Previous Wilder MA * ( n – 1 ) + Price Series Value ) / n
где,
n = число периодов
Price Series Value = ценовый ряд, для которого нужно рассчитать среднюю
Пример
{ Compare a Simple and Exponential Moving Average with Wilder's MA }
var n: integer;
var s, s2: string;
n := 14;
s := '(Close, ' + IntToStr( n ) + ' )';
s2 := '(Close, ' + IntToStr( 2 * n ) + ' )';
PlotSeriesLabel( WilderMASeries( #Close, n ), 0, 090, #Thick,
'WilderMA' + s );
PlotSeriesLabel( SMASeries( #Close, n ), 0, 900, #Thin, 'SMA' + s );
PlotSeriesLabel( EMASeries( #Close, 2 * n ), 0, 005, #Thin, 'EMA' + s2
);
BOP
BOP( Bar: integer ): float;
BOPSeries: integer;
Индикатор Баланс сил (Balance of Market Power), созданный Игорем Лившиным, измеряет силу быков против силы медведей, оценивая способность каждого из них вытолкнуть цену к экстремальному уровню.
Расчет
Баланс сил рассчитывается по следующей формуле:
BOP = (C – O)/(H – L)
где,
C = Close, O = Open, H = High and L = Low
Пример
{ Plot a smoothed Balance of Power below Volume }
var BOPSmoothed, BOPPane: integer;
BOPSmoothed := SMASeries( BOPSeries, 20 );
BOPPane := CreatePane( 80, false, true );
PlotSeries( BOPSmoothed, BOPPane, 642, #Thick );
CCI
CCI( Bar: integer; Period: integer ): float;
CCISeries( Period: integer ): integer;
Индекс Товарного Канала (Commodity Channel Index), разработанный Ламбертом, определяет циклические движения торгуемых инструментов. Он предполагает, что все активы движутся циклически. Цикл – это интервал от минимума к минимуму или от максимума к максимуму. Ламберт рекомендовал в качестве основного параметра индекса 1/3 цикла. Высокие значения индекса (больше +100) указывают на то, что актив перекуплен, а слишком низкие значения (меньше -100) – что перепродан.
Расчет
Индекс товарного канала (CCI) вычисляется как разница между усредненной ценой за период и средней от той усредненной цены. Разница сопоставляется со средней разницей за период.
Результат умножается на костанту с тем чтобы большинство значений попадало в стандартный интервал от +/- 100.
CCI = ( AveP – SMA_of_AveP ) / ( 0.015 * Среднее отклонение )
где,
CCI = Commodity Channel Index
AveP = Средняя цена (Average Price) = (High + Low + Close) / 3
Константа 0.015 гарантирует 70-80% попадания CCI в интервал +/-100.
Пример
{ Color bars oversold/overbought based on CCI level }
var Bar, CCIPane: integer;
CCIPane := CreatePane( 80, true, true );
PlotSeries( CCISeries( 10 ), CCIPane, 505, #Histogram );
DrawLabel( 'CCI(10)', CCIPane );
for Bar := 10 to BarCount - 1 do
begin
if CCI( Bar, 10 ) #* [# 100 then
SetBarColor( Bar, #Red )
else if CCI( Bar, 10 ) < -100 then
SetBarColor( Bar, #Green );
end;
LastPositionActive
LastPositionActive: boolean;
Возвращает истину, если последняя позиция в настоящее время активна.
Пример
var BAR: integer; InstallStopLoss( 20 ); InstallProfitTarget( 7 ); for Bar := 40 to BarCount - 1 do begin ApplyAutoStops( Bar ); if not LastPositionActive then if CrossOverValue( Bar, RSISeries( #Average, 40 ), 25 ) then BuyAtLimit( Bar + 1, PriceHigh( Bar ), '' ); end;
Строковые функции
Выполняют различные манипуляции о строковыми данными: сравнение, извлечение данных, и т.д.
CharAt
CharAt( Value: string; Index: integer ): string;
Возвращает один строковый символ с позиции номер Index строки Value. Индекс первого символа в Value равен 1. Если Index неверен, то функция возвращает NULL
Пример
{ A re-useable vertical labeling routine }
procedure VerticalLabel( Bar: integer; str: string; AbovePrices:
boolean; Color, Size: integer );
begin
var n: integer;
if AbovePrices then
begin
for n := Length( str ) downto 1 do
AnnotateBar( CharAt( str, n ), Bar, AbovePrices, Color, Size );
end
else
for n := 1 to Length( str ) do
AnnotateBar( CharAt( str, n ), Bar, AbovePrices, Color, Size );
end;
const S1 = 'PEAK';
const S2 = 'TROUGH';
var Bar, PB, TB: integer;
{ Make extra room for peak label }
HidePaneLines;
CreatePane( 20, true, false );
Bar := BarCount - 1;
PB := PeakBar( Bar, #Close, 5 );
VerticalLabel( PB, S1, true, #Blue, 8 );
TB := TroughBar( Bar, #Close, 5 );
VerticalLabel( TB, S2, false, #Red, 8 );
Chr
Chr( ASCIICode: integer ): string;
Возвращает строковый символ указанного ASCIICode, который может быть целочисленной переменной или литеральной константой.
Также можно использовать нотацию “#asciicode”. В этом случае необходимо указать константу от 0 to 255 как показано на примере.
Пример
{ Print a list of the ASCII characters to the debug
window starting with printable characters }
var i: integer;
for i := 33 to 255 do
{ Separate the items by a Tab character, ASCII 9 }
Print( IntToStr( i ) + #9 + Chr( i ) );
CompareStr
CompareStr( s1: string; s2: string ): integer;
Функция сравнивает 2 строки: s1 и s2, является чувствительной к регистру. Если строки одинаковы – возвращает 0. Если первая строка больше второй (в алфавитном порядке), то функция возвращает положительное целое, если же меньше, то отрицательное целое.
Пример
var s1, s2: string; s1 := Input( 'Enter First String' ); s2 := Input( 'Enter Second String' ); ShowMessage( 'CompareStr Result is: ' + IntToStr( CompareStr( s1, s2 ) ) );
CompareText
CompareText( s1: string; s2: string ): integer;
Функция сравнивает 2 строки: s1 и s2, является не чувствительной к регистру. Если строки одинаковы – возвращает 0. Если первая строка больше второй (в алфавитном порядке), то функция возвращает положительное целое, если же меньше, то отрицательное целое.
Пример
var s1, s2: string; s1 := Input( 'Enter First String' ); s2 := Input( 'Enter Second String' ); ShowMessage( 'CompareText Result is: ' + IntToStr( CompareText( s1, s2 ) ) );
Copy
Copy( String: string; Index: integer; Count: Integer ): string;
Возвращает подстроку заданной строки String. Подстрока начинается с позиции указанной в параметре Index, а длина подстроки задается параметром Count.
Пример
function GetFirstWord( s: string ): string; var n: integer; begin Result := ''; n := Pos( ' ', s ); if n #* [# 2 then Result := Copy( s, 1, n - 1 ); end; DrawLabel( GetFirstWord( GetSecurityName ), 0 );
Delete
Delete( String: string; Index: integer; Count: integer);
Удаляет подстроку из указанной строки String. Удаление подстроки начинается с позиции, заданной параметром Index, а длина подстроки задается параметром Count.
Пример
var s: string;
s := 'Honest Abe Lincoln';
Delete( s, 8, 4 );
ShowMessage( s );
FloatToStr
FloatToStr( Value: float ): string;
Преобразовывает в строку заданное значение с плавающей точкой Value. Для преобразования с учетом формата строки используйте функцию FormatFloat.
Пример
{ Display the change over a one year period }
var X, X2, XCHANGE, XPCT: float;
x := PriceClose( BarCount - 251 );
x2 := PriceClose( BarCount - 1 );
xChange := x2 - x;
xPct := ( xChange / x ) * 100;
DrawLabel( 'Net Change over a past year: '
+ FloatToStr( xPct ) + '%', 0 );
FormatFloat
FormatFloat( FormatString: string; Value: float );
Преобразовывает в строку значение с плавающей точкой Value в соответствие с заданным форматом строки FormatString. Для формата строки обычно используются следующие символы:
- 0 – Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае вставляется 0.
- # – аналогично 0. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае ничего не вставляется.
- , – символ для разделителя тысяч. Добавляет символ разделения разрядов определенный в Windows Regional Options. Вне зависимости от позиции запятой в форматирующей строке группировка будет производиться только по тысячам.
- . – десятичная точка. Добавляет символ разделения целочисленной и дробной части определенный в Windows Regional Options. Использование более 1 точки в строке сгенерирует ошибку.
#Прочие симолы – прочие печатные символы, которые выводятся как буквы в тех позициях, где они появляются в строке формата. Например можно добавить символы валют ($, ?, и т.п.), или процентов (%), например ‘$#,##0.00′ or ’0.0%’
Пример
{ Print a closing value to the debug window }
var BAR: integer;
Print( FormatFloat( '#,##0.00', PriceClose( Bar ) ) );
GetToken
GetToken( String: string; TokenNum: integer; Delimiter: string ): string;
Разбирает строку String и возвращает подстроку после указанного символа разделителя TokenNum-того по счету. Сама строка не изменяется при вызове этой функции. Для функции в качестве параметра задается символ используемый в качестве разделителя (Delimiter) и порядковые номер этого маркера. 0 вернет подстроку после первого разделителя, 1 – после второго и т.д. Если лексема с заданным номером не найдена, то функция GetToken вернет нулевую строку (ASCII Code 0).
Пример
{ Return a token from a space-delimited string }
s := 'This is a line of tokens';
sToken := GetToken( s, 5, ' ' );
{ sToken now contains the string "tokens" }
Insert
Insert( Source: string; S: string; Index: Integer);
Вставляет подстроку Source, в строку S начиная с места, заданного параметром Index.
Пример
var s: string;
s := 'Honest Lincoln';
Insert( 'Abe ', s, 8 );
ShowMessage( s );
IntToStr
IntToStr( Value: integer ): string;
Преобразовывает целочисленное значение параметра Value в строку.
Пример
{ Display the total number of bars in the chart }
DrawLabel( 'The Chart has ' + IntToStr( BarCount ) + ' Bars', 0 );
Length
Length( String: string ): integer;
Возвращает длину строки String.
Пример
var s: string; s := 'Wealth-Lab'; n := Length( s ); //n is now 10
LowerCase
LowerCase( Value: string ): string;
Возвращает строку Value в строчных буквах.
Пример
{ Capitalize the first letter of the name only }
var S, FIRSTLETTER: string;
s := LowerCase( GetSecurityName );
if s = '' then
Exit;
FirstLetter := UpperCase( Copy( s, 1, 1 ) );
s := FirstLetter + Copy( s, 2, Length( s ) );
ShowMessage( s );
Ord
Ord( Value: string ): integer;
Возвращает ASCII code первого символа строки Value.Строка не должна быть пустой.
Пример
{ Create a table of printable characters }
var c: integer;
for c := 32 to 128 do
Print( IntToStr( c ) + #9 + Chr( c )
+ #9 + IntToStr( Ord( Chr( c ) ) ) );
Pos
Pos( SubString: string; String: string ): integer;
Возвращает номер позиции первого символа подстроки Substring, встретившегося в строке String.
Пример
var s: string; var n: integer; s := Input( 'Give me a string!' ); n := Pos( 'A', UpperCase( s ) ); if n = 0 then ShowMessage( 'The letter ''A'' is not present.' ) else ShowMessage( 'The letter ''A'' is at position ' + IntToStr( n ) + '.' );
StrToFloat
StrToFloat( Value: string ): float;
Преобразовывает строку Value в число одинарной точности с плавающей точкой.
Пример
{ Read a value from an external file and convert to floating point }
var f: integer;
var s: string;
var x: float;
f := FileOpen( 'MyFile.txt' );
s := FileRead;
x := StrToFloat( s );
StrToFloatDef
StrToFloatDef( Value: string; Default: float ): float;
Преобразовывает указанную строку Value в число с плавающей точкой. Если строка не может быть преобразована в число с плавающей точкой, функция возвращает значение параметра Default.
Пример
{ Let the user specify the Standard Deviations to use for Bollinger
Bands }
var S: string;
var X: float;
s := Input( 'Bollinger Band Std Dev?' );
x := StrToFloatDef( s, 1.5 );
PlotSeries( BBandLowerSeries( #Close, 10, x ), 0, 009, #Thin );
PlotSeries( BBandUpperSeries( #Close, 5, x ), 0, 009, #Thin );
StrToInt
StrToInt( Value: string ): integer;
Преобразовывает строку Value в целое число.
Пример
function ConvertDate( Date: string ): integer; begin var y, m, d: string; m := GetToken( Date, 0, '/' ); d := GetToken( Date, 1, '/' ); y := GetToken( Date, 2, '/' ); Result := StrToInt( y ) * 10000 + StrToInt( m ) * 100 + StrToInt( d ); end; const MyDate = '5/18/2005'; Print( 'ConvertDate returns: ' + IntToStr( ConvertDate( MyDate ) ) ); try Print( 'StrToDate returns: ' + IntToStr( StrToDate( MyDate ) ) ); except Print( '' ); Print( 'Your computer''s short date format is not mm/dd/yyyy' ); end;
StrToIntDef
StrToIntDef( Value: string; Default: integer ): integer;
Преобразовывает строку Value в целое число. Если строка не может быть преобразована в целое, то функция вернет значение параметра Default.
Пример
{ Let the user specify the period they want to use }
var S: string;
var N: integer;
s := Input( 'EMA Period?' );
n := StrToIntDef( s, 50 );
PlotSeries( EMASeries( #Close, n ), 0, 002, #Thick );
Trim
Trim( s: string ): string;
Возвращает копию указанной строки s, отсекая пробелы в начале и в конце строки.
Пример
{ Read a line from an external file }
var s: string;
var n: integer;
n := FileOpen( 'C:\MyFile.txt' );
s := FileRead( n );
s := Trim( s );
TrimLeft
TrimLeft( s: string ): string;
Возвращает копию указанной строки s, отсекая пробелы в начале строки.
Пример
{ Get second word of company name }
var s: string;
var n: integer;
s := GetSecurityName;
n := Pos( ' ', s );
if n #* [# 0 then
begin
s := Copy( s, n, Length( s ) );
s := TrimLeft( s );
end;
TrimRight
TrimRight( s: string ): string;
Возвращает копию указанной строки s, отсекая пробелы в конце строки.
Пример
{ Output contents of a file }
var s: string;
var f: integer;
f := FileOpen( 'C:\MyFile.txt' );
while not FileEOF( f ) do
Print( TrimRight( FileRead( f ) ) );
UpperCase
UpperCase( s: string ): string;
Возвращает копию строки s в прописных буквах.
Пример
{ Print the names of all your ChartBooks to the Debug window }
var F: integer;
f := FileOpen( 'Namespaces.txt' );
while not FileEOF( f ) do
Print( UpperCase( FileRead( f ) ) );
Sorry, the comment form is closed at this time.