Здравствуйте! Помогите пожалуйста с написанием функции в MT4. Мне известен баланс счета(AccountBalance), известно сколько сделок у меня откроется(например 9),известен риск (например 3% от AccountBalance), мне нужно расчитать лот первой сделки, если каждый следующий лот будет увеличиваться в два раза и все сделки будут перекрывать друг друга одна за другой.
Подскажите пожалуйста, что я не правильно делаю? Вариант 2 не работает.
double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
Arseniy Barudkin: Здравствуйте! Помогите пожалуйста с написанием функции в MT4. Мне известен баланс счета(AccountBalance), известно сколько сделок у меня откроется(например 9),известен риск (например 3% от AccountBalance), мне нужно расчитать лот первой сделки, если каждый следующий лот будет увеличиваться в два раза и все сделки будут перекрывать друг друга одна за другой.
Вот что получилось. Подскажите пожалуйста в чем ошибка. Заранее спасибо!
Элементарно. Ошибка - функция GetLots(). Вся функция.
Подскажите пожалуйста, что я не правильно делаю? Вариант 2 не работает.
double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0);// Выясняем Размер первого измерения (число строк)renge_A_two==ArrayRange(A, 1);// Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
Выделил: должно быть присвоение - "=", а у Вас сравнение - "==".
Всем привет ! Учусь писать роботов в mt4, решил начать с бинарных опционов . Пишу самого простого советника и компилятор выдает кучу предупреждений с которыми я разобраться не как не могу ( Помогите : " О гуру MQL4" =)))))) Заранее спасибо!)
Вот код советника.
//+------------------------------------------------------------------+ //| Bolinger_Bands_traider.mq4 | //| Copyright 2017, Penrov Nikolay | //| vk.com/buzamonolit | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, Petrov Nikolay" #property link "vk.com/buzamonolit" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ extern int Bolinger_Bands = 20; // Период Полос Боллинджера extern double Delta = 0.0003; // На каком расстоянии открывать ордер
string Symb; // Название финанс. инструмента int Total; // Количество ордеров
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Initialize_Objects(0); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
// Учёт ордеров Symb=Symbol(); // Название фин.инстр. Total=0; // Количество ордеров for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий { // Анализ ордеров: if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм if (OrderType()>1) // Попался отложенный { Alert("Обнаружен отложенный ордер. Эксперт не работает."); return(0); // Выход из start() } Total++; // Счётчик рыночн. орд if (Total>1) // Не более одного орд { Alert("Несколько рыночных ордеров. Эксперт не работает."); return(0); // Выход из start() } } }
int Initialize_Objects(int Win) // Пользовательс ф-ия { // ..создания объекта ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // Создание объекта ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // Привязка к углу ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // Координата Х if (Win==0) ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);// Координата Y else ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);// Координата Y
ObjectCreate("Obj_Label2",OBJ_LABEL, Win, 0,0); // Создание объекта ObjectSet("Obj_Label2", OBJPROP_CORNER, 0); // Привязка к углу ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // Координата Х if (Win==0) ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Координата Y else ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Координата Y
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0); // Создание объекта ObjectSet("Obj_Label3", OBJPROP_CORNER, 0); // Привязка к углу ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // Координата Х if (Win==0) ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Координата Y else ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Координата Y
А вот предупреждения. Не могу понять , что ему не нравится(
possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 35 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 227 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 77 43 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 78 43 implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 85 71 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 23 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 91 implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 99 72 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 23 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91 0 error(s), 11 warning(s), compile time: 204 msec 1 12
Может подскажете как правильно написать. Я хотел вычислить с помощью цикла путем перебора от максимального лота.
А где логика? Вы ставите на первый ордер максимальный разрешенный лот, а потом увеличиваете его для каждого следующего ордера. Вам это не кажется, мягко говоря, не очень разумным?
Далее, вы уменьшаете в цикле лот первого ордера каким-то совсем уже не поддающимся логике методом, а лоты остальных ордеров, которые были "вычислены" до этого, так и остаются, без изменений, притом, за пределы этой фукции эти значения не выходят никак. Зачем тогда они?
Не говоря уж о том, что инкремент цикла не может быть вещественным числом, это счётчик, целое число должно быть. А вы ставите в качестве счётчика значение лота и вычитаете из него каждую итерацию по единичке. Это крупная ошибка, очень серьёзная.
Доработайте логику сначала в голове, а потом уже пытайтесь воплотить её в код.
А вот предупреждения. Не могу понять , что ему не нравится(
possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 35 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 227 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 77 43 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 78 43 implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 85 71 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 23 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 91 implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 99 72 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 23 implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91 0 error(s), 11 warning(s), compile time: 204 msec 1 12
Выведите одну строку с номером 51, т.к. здесь не посчитать, чтобы понять ошибку "possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24"
Остальное: "implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91" говорит о том что надо:
переведите числовые значения в текстовую строку там где создаем объект - текстовую строку, например
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Вот что получилось. Подскажите пожалуйста в чем ошибка. Заранее спасибо!
Здравствуйте!
Пишу сюда, т.к. на mq4 никого вроде как нет.
Подскажите пожалуйста, что я не правильно делаю? Вариант 2 не работает.
Здравствуйте! Помогите пожалуйста с написанием функции в MT4. Мне известен баланс счета(AccountBalance), известно сколько сделок у меня откроется(например 9),известен риск (например 3% от AccountBalance), мне нужно расчитать лот первой сделки, если каждый следующий лот будет увеличиваться в два раза и все сделки будут перекрывать друг друга одна за другой.
Вот что получилось. Подскажите пожалуйста в чем ошибка. Заранее спасибо!
Здравствуйте!
Пишу сюда, т.к. на mq4 никого вроде как нет.
Подскажите пожалуйста, что я не правильно делаю? Вариант 2 не работает.
Выделил: должно быть присвоение - "=", а у Вас сравнение - "==".
Всем привет !
Учусь писать роботов в mt4, решил начать с бинарных опционов . Пишу самого простого советника и компилятор выдает кучу предупреждений с которыми я разобраться не как не могу (
Помогите : " О гуру MQL4" =))))))
Заранее спасибо!)
Вот код советника.
//+------------------------------------------------------------------+
//| Bolinger_Bands_traider.mq4 |
//| Copyright 2017, Penrov Nikolay |
//| vk.com/buzamonolit |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Petrov Nikolay"
#property link "vk.com/buzamonolit"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
extern int Bolinger_Bands = 20; // Период Полос Боллинджера
extern double Delta = 0.0003; // На каком расстоянии открывать ордер
string Symb; // Название финанс. инструмента
int Total; // Количество ордеров
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Initialize_Objects(0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double price = Bid;
double CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0);
double CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0);
double PriceBol_High = price - CurrBol_High;
double PriceBol_Low = price - CurrBol_Low;
datetime NextClose = Time[0] + Period()*60*2;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;
int err;
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеров
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм
if (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return(0); // Выход из start()
}
Total++; // Счётчик рыночн. орд
if (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return(0); // Выход из start()
}
}
}
ObjectSetText("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 5) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label2", "Ордеров: " + Total + ", дельта " + DoubleToStr(Delta,5) + ", расст до MA:" + DoubleToStr(PriceBol_High, 5), 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label3", "Ордеров: " + Total + ", дельта " + DoubleToStr(Delta,5) + ", расст до MA:" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen );
// анализ цены и открытие ордеров
if ((MathAbs(PriceBol_Low) < Delta) && (price > CurrBol_Low) && (Open[0] > CurrBol_Low+Delta) && (Total<1))
{
if (OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0,"BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print ("Opened OK");
else
{
err=GetLastError();
Print("error(",err,")");
return(0);
}
Print ("CALL @ " + price + " " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
if ((MathAbs(PriceBol_High) < Delta) && (price < CurrBol_High) && (Open[0] < CurrBol_High-Delta) && (Total<1))
{
if (OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0,"BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) Print ("Opened OK");
else
{
err=GetLastError();
Print("error(",err,")");
return(0);
}
Print ("PUT @ " + price + " " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
//----
return(0);
}
//+------------------------------------------------------------------+
int Initialize_Objects(int Win) // Пользовательс ф-ия
{ // ..создания объекта
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // Создание объекта
ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // Привязка к углу
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // Координата Х
if (Win==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);// Координата Y
else
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);// Координата Y
ObjectCreate("Obj_Label2",OBJ_LABEL, Win, 0,0); // Создание объекта
ObjectSet("Obj_Label2", OBJPROP_CORNER, 0); // Привязка к углу
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // Координата Х
if (Win==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Координата Y
else
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Координата Y
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0); // Создание объекта
ObjectSet("Obj_Label3", OBJPROP_CORNER, 0); // Привязка к углу
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // Координата Х
if (Win==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Координата Y
else
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Координата Y
return(0); // Выход из польз.ф-ии
}
А вот предупреждения. Не могу понять , что ему не нравится(
possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 35
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 227
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 77 43
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 78 43
implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 85 71
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 23
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 91
implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 99 72
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 23
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91
0 error(s), 11 warning(s), compile time: 204 msec 1 12
Элементарно. Ошибка - функция GetLots(). Вся функция.
Может подскажете как правильно написать. Я хотел вычислить с помощью цикла путем перебора от максимального лота.
Может подскажете как правильно написать. Я хотел вычислить с помощью цикла путем перебора от максимального лота.
А где логика? Вы ставите на первый ордер максимальный разрешенный лот, а потом увеличиваете его для каждого следующего ордера. Вам это не кажется, мягко говоря, не очень разумным?
Далее, вы уменьшаете в цикле лот первого ордера каким-то совсем уже не поддающимся логике методом, а лоты остальных ордеров, которые были "вычислены" до этого, так и остаются, без изменений, притом, за пределы этой фукции эти значения не выходят никак. Зачем тогда они?
Не говоря уж о том, что инкремент цикла не может быть вещественным числом, это счётчик, целое число должно быть. А вы ставите в качестве счётчика значение лота и вычитаете из него каждую итерацию по единичке. Это крупная ошибка, очень серьёзная.
Доработайте логику сначала в голове, а потом уже пытайтесь воплотить её в код.
А вот предупреждения. Не могу понять , что ему не нравится(
possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 35
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 76 227
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 77 43
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 78 43
implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 85 71
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 23
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 93 91
implicit conversion from 'string' to 'number' Bolinger_Bands_traider.mq4 99 72
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 23
implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91
0 error(s), 11 warning(s), compile time: 204 msec 1 12
Выведите одну строку с номером 51, т.к. здесь не посчитать, чтобы понять ошибку "possible loss of data due to type conversion Bolinger_Bands_traider.mq4 51 24"
Остальное: "implicit conversion from 'number' to 'string' Bolinger_Bands_traider.mq4 107 91" говорит о том что надо:
переведите числовые значения в текстовую строку там где создаем объект - текстовую строку, например
Period()
должно быть
DoubleToString(Period(),0)
переведите числовые значения в текстовую строку там где создаем объект - текстовую строку, например
Period()
должно быть
DoubleToString(Period(),0)
А с каких это пор период - типа Double?