Полезные функции от KimIV - страница 63

 
KimIV >>:

не было... написал...

Функция ClosePosBySortLots().

Данная функция выполняет закрытие позиций в порядке сортировки по размерам лотов. То есть с помощью данной функции можно закрывать позиции в порядке возрастания или убывания размера лота. Функция ClosePosBySortLots() принимает следующие необязательные параметры:

  • sy - Наименование торгового инструмента. "" - любой инструмент, NULL - текущий инструмент. Значение по умолчанию - "".
  • op - Тип торговой операции. Допустимые значения -1 - любая позиция, OP_BUY - покупки, OP_SELL - продажи. Значение по умолчанию -1.
  • mn - MagicNumber, уникальный идентификатор торговой оперции. Значение по умолчанию -1 - любой магик.
  • sd - Направление сортировки размеров лотов. Допустимые значения MODE_ASCEND - по возрастанию, MODE_DESCEND - по убыванию. Значение по умолчанию - MODE_DESCEND.

ЗЫ. Во вложении скрипт для тестирования функции ClosePosBySortLots().

Большое спасибо Игорь. Буду за тебя молиться:-)

 

Privat

rsi

Спасибо за примеры!

Расшифруйте если не трудно вот это :

var=Close[0]
С чем это едят?
 

эээ... прекращайте тут... извиняюсь... удалю... созидание всегда приветствуется!

а сцылко на функции берите из файло в аттаче...

Файлы:
f_kimiv.rar  12 kb
 
WroC писал(а) >>

Расшифруйте если не трудно вот это :

var=Close[0]

С чем это едят?

Переменной по имени var присваивается значение ценового уровня закрытия текущего бара (нулевой номер). Но так как формирование текущего бара ещё не закончено, то Close[0] - это то же самое, что и Bid, тоись текущая цена.

 

KimIV


А я все пытался как-то через marketinfo оказыается все еще проще ....

 
if (ExistPositions(NULL, OP_BUY, Magic)) {
 po=PriceOpenLastPos(NULL, OP_BUY, Magic);
 if (!ExistOrders (NULL, OP_SELLSTOP, Magic+1)
 && !ExistPositions(NULL, OP_SELL , Magic+1)) {
 pp=po-offSet*Point;
 if (StopLoss>0) sl=pp+StopLoss*Point; else sl=0;
 if (TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
 SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);

Доброго времени суток.
Игорь есть ли у вас функция для реализации тактики локирования?
На 45 странице вы привели пример, который можно было бы использовать для этого.

Но подобный подход ограничивает количество открытых ордеров до 1.
Если рассмотреть ситуацию на примере, то выглядеть это будет так
LockStep=20 от открытой позиции
LockStopLoss=10
1500 - open Buy\1480 - open sellstop

1470 - open buy\1450 - open sellstop

1460 - close sellstop 1450\open sellstop 1450
1490 - close sellstop 1480\open sellstop 1450
по заданной функции будет открыто два ордера sellstop 1450

P.S. Большое спасибо, за ваш труд. На самом деле информации много и она очень помогает, большую часть взял себе на вооружение.



 
demsan писал(а) >>
Игорь есть ли у вас функция для реализации тактики локирования?

Нет, отдельной такой функции нет. Так что Вам придётся комбинировать из существующих и может быть дописать что-то своё. Посоветую Вам организовать такую связку: одна пара Buy/SellStop - один магик. Следующая пара - следующий магик и т.д.

 

Функция StringLower().

Данная функция выполняет преобразование строки в нижний регистр. Все ПРОПИСНЫЕ (большие) символы становятся строчными (маленькими). Функция StringLower() принимает только один обязательный параметр - это входящая строка.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>64 && c<91) n=c+32;     // A-Z -> a-z
    if (c>191 && c<224) n=c+32;   // А-Я -> а-я
    if (c==168) n=184;            //  Ё  ->  ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}

ЗЫ. Во вложении скрипт для тестирования функции StringLower().

Файлы:
 

Функция StringUpper().

Данная функция выполняет преобразование строки в ВЕРХНИЙ регистр. Все строчные (маленькие) символы становятся ПРОПИСНЫМИ (большими). Функция StringUpper() принимает только один обязательный параметр - это входящая строка.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}

ЗЫ. Во вложении скрипт для тестирования функции StringUpper().

Файлы:
 

Функция StringToArrayDouble().

Данная функция выполняет расщепление строки на составляющие её вещественные числа и каждое число добавляется в массив отдельным элементом. Сколько вещественных чисел окажется в строке, столько же элементов и будет добавлено в массив. В качестве разделителя распознаётся точка с запятой. Функция StringToArrayDouble() возвращает количество элементов массива, а принимает следующие обязательный параметры:

  • st - Строка вещественных чисел через точку с запятой.
  • ad - Массив вещественных чисел.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble(string st, double& ad[]) {
  int    i=0, np;
  string stp;

  ArrayResize(ad, 0);
  while (StringLen(st)>0) {
    np=StringFind(st, ";");
    if (np<0) {
      stp=st;
      st="";
    } else {
      stp=StringSubstr(st, 0, np);
      st=StringSubstr(st, np+1);
    }
    i++;
    ArrayResize(ad, i);
    ad[i-1]=StrToDouble(stp);
  }
  return(ArraySize(ad));
}

ЗЫ. Во вложении скрипт для тестирования функции StringToArrayDouble().

Файлы: