//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 20.10.2008 |//| Описание : Возвращает цену TakeProfit последней закрытой позиций или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double TakeProfitLastClosePos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=-1;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderTakeProfit();
}
}
}
}
}
}
}
return(r);
}
int LevelProfit - 損益分岐点に移動するために、ポジションが到達しなければならないポイントでの利益のレベル。
int LevelWLoss - 損益分岐点レベル、ポイント単位で、利益がLevelProfitレベルに達した後にストップが転送される。
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.09.2008 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 31.10.2008 |//| Описание : Выполняет удаление элемента массива с заданным индексом. |//| Возвращает размер нового массива или -1, |//| если не удалось ничего удалить. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| i - индекс элемента |//+----------------------------------------------------------------------------+int ArrayDeleteInt(int& m[], int i) {
int j, k=ArraySize(m);
if (i>=0 && i<k) {
for (j=i; j<k; j++) m[j]=m[j+1];
k=ArrayResize(m, k-1);
return(k);
} elsePrint("ArrayDeleteInt(): Неверный индекс элемента массива! i=", i);
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 31.10.2008 |//| Описание : Выполняет удаление элемента массива с заданным индексом. |//| Возвращает размер нового массива или -1, |//| если не удалось ничего удалить. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| i - индекс элемента |//+----------------------------------------------------------------------------+int ArrayDeleteDouble(double& m[], int i) {
int j, k=ArraySize(m);
if (i>=0 && i<k) {
for (j=i; j<k; j++) m[j]=m[j+1];
k=ArrayResize(m, k-1);
return(k);
} elsePrint("ArrayDeleteDouble(): Неверный индекс элемента массива! i=", i);
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 31.10.2008 |//| Описание : Выполняет удаление элемента массива с заданным индексом. |//| Возвращает размер нового массива или -1, |//| если не удалось ничего удалить. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| i - индекс элемента |//+----------------------------------------------------------------------------+int ArrayDeleteString(string& m[], int i) {
int j, k=ArraySize(m);
if (i>=0 && i<k) {
for (j=i; j<k; j++) m[j]=m[j+1];
k=ArrayResize(m, k-1);
return(k);
} elsePrint("ArrayDeleteString(): Неверный индекс элемента массива! i=", i);
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 31.10.2008 |//| Описание : Выполняет вставку элемента массива с заданным индексом. |//| Возвращает размер нового массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов типа double |//| e - значение элемента |//| i - индекс элемента (-1 - добавить в конец массива) |//+----------------------------------------------------------------------------+int ArrayInsertDouble(double& m[], double e, int i=-1) {
int j, k=ArraySize(m);
ArrayResize(m, k+1);
if (i>=0 && i<k) {
for (j=k; j>i; j--) m[j]=m[j-1];
m[i]=e;
} else m[k]=e;
return(k+1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 04.11.2008 |//| Описание : Выполняет пузырьковую сортировку элементов двумерного массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| a - массив элементов |//| r - колонка сортировки ( 0 - первая (с индексом 0)) |//| m - направление сортировки (MODE_ASCEND - по возрастанию, |//| MODE_DESCEND - по убыванию) |//+----------------------------------------------------------------------------+void BubbleSort2(double& a[][], int r=0, int m=MODE_ASCEND) {
double t;
int e, i, j;
int k=ArrayRange(a, 1); // Количество колонокint n=ArrayRange(a, 0); // Количество строкif (r<0) r=0;
if (r>k) r=k;
for (i=n-1; i>0; i--) {
for (j=0; j<i; j++) {
if (m==MODE_ASCEND) {
// по возрастаниюif (a[j][r]>a[j+1][r]) {
for (e=0; e<k; e++) {
t=a[j][e];
a[j][e]=a[j+1][e];
a[j+1][e]=t;
}
}
} else {
// по убываниюif (a[j][r]<a[j+1][r]) {
for (e=0; e<k; e++) {
t=a[j][e];
a[j][e]=a[j+1][e];
a[j+1][e]=t;
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.10.2008 |//| Описание : Возвращает тип последнего удалённого ордера или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int GetTypeLastDeleted(string sy="", int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal(), r=-1;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if (OrderType()>1 && OrderType()<6 && t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderType();
}
}
}
}
return(r);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.03.2008 |//| Описание : Возвращает индекс наибольшего бара или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| ty - тип элементов поиска ( 0 - H-L, 1 - O-C) |//| co - число элементов таймсерии ( 0 - все элементы) |//| in - индекс начального бара ( 0 - текущий бар) |//+----------------------------------------------------------------------------+int iBarLargest(string sy="", int tf=0, int ty=0, int co=0, intin=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (in< 0) in=0;
if (co<=0) co=iBars(sy, tf)-in;
double r, rb=0; // размер бараint i, nb=-1; // счётчик и номер бараfor (i=co+in; i>=in; i--) {
if (ty>0) r=MathAbs(iOpen(sy, tf, i)-iClose(sy, tf, i));
else r=iHigh(sy, tf, i)-iLow(sy, tf, i);
if (rb<r) {
rb=r;
nb=i;
}
}
return(nb);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает расчётный номер бара от начала суток. |//| : Нумерация баров начинается с 1 (единица). |//+----------------------------------------------------------------------------+//| Параметры: |//| tf - таймфрейм (0 - текущий таймфрейм) |//| dt - дата и время открытия бара (0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayCalc(int tf=0, datetime dt=0) {
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayCalc(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
double ms=MathMod(dt/60, 1440); // количество минут от начала сутокint bd=MathFloor(ms/tf)+1; // номер бара от начала сутокreturn(bd);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="", int tf=0, datetime dt=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd=0; // номер бара от начала сутокwhile(TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return(bd);
}
NameDayOfWeek()関数
パラメータとして渡された数字による曜日の名前を返す。
ndw - 曜日番号.必須パラメータです。
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает наименование дня недели |//+----------------------------------------------------------------------------+//| Параметры: |//| ndw - номер дня недели |//+----------------------------------------------------------------------------+string NameDayOfWeek(int ndw) {
if (ndw==0) return("Воскресенье");
if (ndw==1) return("Понедельник");
if (ndw==2) return("Вторник");
if (ndw==3) return("Среда");
if (ndw==4) return("Четверг");
if (ndw==5) return("Пятница");
if (ndw==6) return("Суббота");
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.05.2008 |//| Описание : Возвращает нормализованное значение торгуемого лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| lo - нормализуемое значение лота. |//| ro - способ округления ( False - в меньшую, |//| True - в большую сторону) |//| sy - наименование инструмента ("" или NULL - текущий символ) |//+----------------------------------------------------------------------------+double NormalizeLot(double lo, bool ro=False, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 21.08.2008 |//| Описание : Возвращает нормализованное под размер тика значение цены. |//+----------------------------------------------------------------------------+//| Параметры: |//| np - нормализуемое значение цены. |//| sy - наименование инструмента ("" или NULL - текущий символ) |//+----------------------------------------------------------------------------+double NormalizePrice(double np, string sy="") {
if (sy=="" || sy=="0") sy=Symbol();
double pp, ts=MarketInfo(Symbol(), MODE_TICKSIZE);
int di=MarketInfo(Symbol(), MODE_DIGITS);
if (ts>0) pp=NormalizeDouble(np/ts, 0)*ts;
else {
if (di>0) pp=NormalizeDouble(np*di, 0)/di; else pp=np;
}
return(pp);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.08.2008 |//| Описание : Возвращает номер недели месяца по дате |//+----------------------------------------------------------------------------+//| Параметры: |//| dt - дата, время (0 - сейчас по времени торгового сервера) |//+----------------------------------------------------------------------------+int WeekOfMonth(datetime dt=0) {
if (dt<=0) dt=TimeCurrent();
datetime d;
int i, kd=TimeDay(dt), nn=1;
for (i=2; i<=kd; i++) {
d=StrToTime(TimeYear(dt)+"."+TimeMonth(dt)+"."+i);
if (TimeDayOfWeek(d)==1) nn++;
}
return(nn);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.12.2008 |//| Описание : Закрытие позиций в порядке сортировки по размерам лотов. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| sd - Направление сортировки лотов (MODE_ASCEND - возрастание, |//| MODE_DESCEND - убывание) |//+----------------------------------------------------------------------------+void ClosePosBySortLots(string sy="", int op=-1, int mn=-1, int sd=MODE_DESCEND) {
double a[][2]; // Массив лотов и тикетовint i, k=OrdersTotal(); // Счётчик и количество ордеровint p=0; // Количество позицийif (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
p++;
ArrayResize(a, p);
a[p-1][0]=OrderLots();
a[p-1][1]=OrderTicket();
}
}
}
}
}
// вдруг позиций нету, тогда и закрывать нечегоif (p>0) {
ArraySort(a, WHOLE_ARRAY, 0, sd);
for (i=0; i<p; i++) {
if (OrderSelect(a[i][1], SELECT_BY_TICKET)) {
// проверим незакрытость на всякий случай,// может какая-то позиция уже закрылась по стопу/тейкуif (OrderCloseTime()==0) ClosePosBySelect();
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Добавляет к строке S столько лидирующих нулей "0", |//| : чтобы длина строки S стала равна K. |//+----------------------------------------------------------------------------+//| Параметры: |//| s - строка |//| k - длина строки S |//+----------------------------------------------------------------------------+string AddLeadingZero(string s, int k) {
while(StringLen(s)<k) s=StringConcatenate("0", s);
return(s);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Преобразует два/три целых числа в строку в формате времени |//+----------------------------------------------------------------------------+//| Параметры: |//| h - часы |//| m - минуты |//| s - секунды (0 - не использовать) |//+----------------------------------------------------------------------------+string toTime(int h=0, int m=0, int s=0) {
string st="";
if (h==0) st="00:";
else st=StringConcatenate(AddLeadingZero(h, 2), ":");
if (m==0) st=StringConcatenate(st, "00");
else st=StringConcatenate(st, AddLeadingZero(m, 2));
if (s!=0) st=StringConcatenate(st, ":", AddLeadingZero(s, 2));
return(st);
}
TakeProfitLastClosePos()関数を使用します。
TakeProfit(利食い): 最後に決済したポジションの利食い 価格、または-1を 返します。TakeProfitLastClosePos() 関数には、次のオプション・パラメータがあります。
関数 MovingInWL()。
オープンポジションのStopLoss 価格水準をBreakevenに移動させます。MovingInWL() 関数は、以下のオプションパラメータを受け付ける。
また、MovingInWL() 関数は、グローバル変数(スクリプトやExpert Advisorの外部パラメータ)を持っています。
SimpleTrailing()関数。
TrailingStop アルゴリズムを使って、オープンポジションのStopLoss 価格レベルを移動させます。関数SimpleTrailing() は、以下のオプションパラメータを受け付けます。
さらに、SimpleTrailing() 関数はグローバル変数(スクリプトまたはExpert Advisorの外部パラメータ)を含意します。
ArrayZ()関数。
この関数は,配列で参照渡しされた数値系列の Z カウントを計算し,返す。
ArrayDeleteInt()関数
指定されたインデックスの配列要素の 削除を実行する。新しい配列のサイズを返し、何も削除されなかった場合は-1 を 返す。ArrayDeleteInt()関数は、以下の必須パラメータを受け付ける。
ArrayDeleteDouble()関数
配列の指定されたインデックスの要素を削除する。新しい配列のサイズを返し、何も削除できなかった場合は-1 を 返す。ArrayDeleteDouble()関数は、以下の必須パラメータを受け付ける。
ArrayDeleteString()関数
指定されたインデックスの配列要素の 削除を実行する。新しい配列のサイズを返すか、何も削除できなかった場合は-1 を 返す。ArrayDeleteString()関数は、以下の必須パラメータを受け付ける。
ArrayInsertDouble()関数
指定されたインデックスの配列の要素を挿入する。新しい配列の要素数(サイズ)を返す。挿入は次のように行います。まず、配列のサイズを1つ増やします。そして,挿入する要素以上のインデックスを持つすべての要素を1つずつ配列の末尾に移動させ,挿入する要素のためのスペースを確保します.最後に、必要なセルに値が書き込まれる。ArrayInsertDouble() 関数は、以下のパラメータを持ちます。
BubbleSort2()関数です。
この関数は,2次元配列の要素を任意の列に分割してバブル化する。また、ソート方向も指定できます。BubbleSort2() 関数は、以下のパラメータを受け取ります。
GetTypeLastDeleted()関数。
この関数は最後に削除された注文の型、または- 1を返します。EA操作ロジックを直前に削除された注文の型に関連付ける必要がある場合があります。例えば、BuyStopを 削除したばかりならそうすべきですが、BuyLimit なら別のことをすべき、などです。GetTypeLastDeleted()関数には、以下のオプションパラメータを指定することができる。
iBarLargest()関数を使用します。
この関数は、最大のバーのインデックスまたは -1 を返す。バーの大きさは、入力パラメータty- 検索項目の種類によって決まる2つの方法のうちの1つによって、この関数によって測定される。本体サイズだけでも、シャドウと合わせても。iBarLargest() 関数には、以下のオプションパラメータを指定できます。
iBarOfDayCalc()関数を使用します。
この関数は、計算された日の先頭からのバーの数を返します。バーには1から順番に番号が振られています。つまり、ある日の中で最も開始時間の短いバーが1番、次のバーが2番...となります。入退場時間の最適化に有効な機能です。詳細が気になる人がいたら、質問してください。できる限りお答えします。iBarOfDayCalc() 関数は、以下のオプションのパラメータを受け取ります。
関数 iBarOfDayReal()。
この関数は、日の初めからの実際の小節番号を返します。バーには1から順に番号が振られています。つまり、ある一日のうちで最も開始時間の短いバーが1番、次のバーが2番、といった具合です。この機能の実用的な使い道は、まだ見つかっていないんです。しかし、私はそれを持つように書いている :-)関数iBarOfDayCalc() と一緒に。iBarOfDayReal() 関数には、以下のオプションパラメータを指定できます。
NameDayOfWeek()関数
パラメータとして渡された数字による曜日の名前を返す。
関数 NormalizeLot()。
この関数は、取引中のロットの正規化された値を返します。 正規化の他に、ロットサイズをディーリングセンターが設定した制限に適合させます(ロットの最小値、最大値、ロット変更ステップをチェックします)。関数NormalizeLot() は、以下のパラメータを受け付ける。
NormalizePrice()関数。
MarketInfo(MODE_TICKSIZE || MODE_DIGITS)関数の値を用いて正規化した価格値を返します。NormalizePrice()関数は、以下のパラメータを受け取ります。
WeekOfMonth()関数を使用します。
この関数は、その月の週を日付別に返します。オプションのパラメータを1つだけ受け付けます。
関数 ClosePosBySortLots()。
ロットサイズ順にポジションをクローズする機能です。つまり、この機能を使えば、ロット数の昇順または降順でポジションを決済することができます。関数ClosePosBySortLots() は、以下のオプションパラメータを受け付けます。
AddLeadingZero()関数です。
この関数は、文字列の長さがある値に等しくなるように、先頭(左)のゼロ "0" をいくつでも追加します。AddLeadingZero() 関数は、以下の必須パラメータを受け付ける。
関数 toTime()。
この関数は,2つ/3つの整数を 時刻形式の文字 列に変換する。この関数に2つの数値を渡すと、最初の数値が時間として、2番目の数値が分として使用されます。フォーマット文字列は "HH:MM "が返される。数字が3つある場合、3つ目の数字は秒に置き換えられ、この関数は「HH:MM:SS」文字列を返します。toTime() 関数には、以下のオプションパラメータを指定することができる。