В качестве задаваемых параметров обычно всегда присутствуют следующие:
1. Шаг сетки (пнт.)
2. Кол-во ордеров сетки
3. Отступ от цены до первых ордеров сетки (пнт.)
4. Величина SL (пнт.)
5. Величина TP (пнт.)
Пункт 3 означает, что первым считается ордер ближайший к текущей цене, а таких ордеров два по месту расположения - выше цены и ниже цены.
Рассмотрим случай, когда не подразумевается увеличение (уменьшение) размера лота в зависимости от уровня сетки.
Удобно создать функцию, которую потом можно будет каждый раз для новой разработки кода просто вставлять в код, а не писать в очередной раз (как много раз указывалось для правильного стиля программирования).
Код такой функции приведен ниже. Однако для её работы требуются ряд уже написанных функций стандартных операций (рассмотрим позже).
- Код: выделить все
void f_SetStopGrid(double q, int n, int de, int sl, int tp, int ot, int si)
{
double dblSL, dblTP, dblY;
int int_Pos = f_GetNumberOfPositions("0", -1, intMagic);
int int_Ord = f_GetNumberOfOrders("0", -1, intMagic);
if(int_Pos ==0 && int_Ord == 0)
{
for(int i = 1; i <= n; i++)
{
// установка байстоп ордеров:
dblY = NormalizeDouble(Ask + (ot + de * (i - 1)) * _Point, _Digits);
dblSL = f_SL("0", sl, OP_BUYSTOP, dblY);
dblTP = f_TP("0", tp, OP_BUYSTOP, dblY);
f_SetOrder("0", OP_BUYSTOP, q, dblY, dblSL, dblTP, si, intMagic, "", 0);
// установка селлстоп ордеров:
dblY = NormalizeDouble(Bid - (ot + de * (i - 1)) * _Point, _Digits);
dblSL = f_SL("0", sl, OP_SELLSTOP, dblY);
dblTP = f_TP("0", tp, OP_SELLSTOP, dblY);
f_SetOrder("0", OP_SELLSTOP, q, dblY, dblSL, dblTP, si, intMagic, "", 0);
}
}
}
В качестве параметров в функцию f_SetStopGrid() передаются:
q - Размер торгового лота;
n - Кол-во ордеров сетки;
de - Шаг сетки (пнт.);
sl - Величина SL (пнт.) {если 0, то SL не выставляется};
tp - Величина TP (пнт.) {если 0, то TP не выставляется};
ot - Отступ от цены до 1-ых ордеров сетки (пнт.);
si - Проскальзывание цены (пнт.);
Также используется переменная intMagic типа int, которая должна (может) быть задана в качестве внешней переменной или глобальной переменной на уровне данного кода.
Далее в необходимом месте кода происходит вызов данной функции:
- Код: выделить все
f_SetStopGrid(dblQ, intN, intDe, intSL, intTP, intOt, intSI);