Спасибо. Ясное дело, я в хэлпе смотрел, понимаю с трудом этот
грёбаный ордерселект. Вот специально кодик черканул для себя,
чтоб понять что там к чему. Объясните если не сложно на пальцах
и извините за тупость
Смысл операции OrderSelect() в том, чтоб могли корректно работать торговые
функции.
Сначала надо OrderSelect(), а потом, например, OrderSend().
В первом цикле for() в приведенном коде сделано наоборот.
Вот пример использования OrderSelect(). Функция анализирует состояние
терминала.
OrderSelect() выполнена один раз, а далее - несколько обращений к ордеру
без какой бы то ни было ссылки на него.
intAG_Terminal_scr(){//=============================================================================================== Предопределения ====ArrayCopy(Mas_Ord_Old, Mas_Ord_Tek); // Сохраняем предыдущую историюKol=0;
for(i=0; i<=6; i++)Mas_Tip[i]=0; // Обнуление массива типов ордеровArrayInitialize(Mas_Ord_Tek,0); // Обнуление массива//================================================================================================ Анализ ордеров ====for(i=1; i<=OrdersTotal(); i++)// По всем ордерам терминала{if((OrderSelect(i-1, SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()))// Если есть следующий и наша вал.пара{Kol++; // Считаем общее количество ордеров//--------------------------------------------------------------------------- Формирование нового массива ордеров ----Mas_Ord_Tek[Kol][1] = NormalizeDouble(OrderOpenPrice() ,Digits); // Курс открытия ордераMas_Ord_Tek[Kol][2] = NormalizeDouble(OrderStopLoss() ,Digits); // Курс SLMas_Ord_Tek[Kol][3] = NormalizeDouble(OrderTakeProfit(),Digits); // Курс ТРMas_Ord_Tek[Kol][4] = OrderTicket(); // Номер ордераMas_Ord_Tek[Kol][5] = OrderLots(); // Количество лотов// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tip_Ord = OrderType()+1; // +1 - это дело вкусаMas_Tip[Tip_Ord]++; // Попутно считаем кол. ордеров разн. типовMas_Ord_Tek[Kol][6]=Tip_Ord; // Тип ордера//--------------------------------------------------------------------------------------------------------------------}}Mas_Ord_Tek[0][0] = Kol; // Сохраняем в нулевую ячеечку//====================================================================================================================return(1);
}
--------------
В OrderSend() нормализовать биды и аски не нужно. Это не ошибка, прото
в этом нет необходимости.
Речь шла о корректном срабатывании оператора сравнения при
его работе с действительными числами.
Дело в том, что 1.5000 не всегда такое. Оно иногда отбражается так,
а на самом деле 1.49999(9). Я не знаю сколько там девяток.
Или может оказаться, что это число 1.500001.
После нормализации эти числа строгие до указанного количества
знаков. Попутно - это не всегда 4. Смотри в словаре Digits.
Спасибо. Смысл функции мне ясен. Функция выбирает ордер из всех
какие были или есть по 2-м признакам- либо по тикету, либо по позиции.
SELECT_BY_POS - позиция ордера среди открытых и отложенных ордеров
- вот это не понимаю- что за позиция? То есть открыли пару ордеров,
пару закрыли, если выбрано MODE_TRADES , то те, что открыты или висят
расставлены по времени установки, а позиция- это номер ордера
в этом списке??? Извините за тупость, ну никак не доходит...
И ещё-
В первом цикле for() в приведенном коде сделано наоборот.
Так там же OrderSend!!! Как его можно Select перед тем, как Send??? Я его селектнул после
того, как сэнднул, чтобы посмотреть какой ему тикет присвоили.
А вот почему закрываются они через 1- не могу понять. Мне кажется,
что в результате моего кода сначала должны открыться 5 ордеров,
а потом- все по очереди закрыться.
Print("i = ",i);
o=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
Print("i after select = ",i);
а результат
01:50:27 2006.01.17 00:00 template EURUSD,H4: i = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: i after select = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: close #5 sell 0.10 EURUSD at 1.2114
sl: 10.0000 tp: 1.0000 at price 1.2117
01:50:27 2006.01.17 00:00 template EURUSD,H4: result close = 1
Вот это не понимаю!!! Почему #5 закрылся, а не #2???
Не ленивый я, просто туговат...
- вот это не понимаю- что за позиция? То есть открыли пару ордеров,
пару закрыли, если выбрано MODE_TRADES , то те, что открыты или висят
расставлены по времени установки, а позиция- это номер ордера
в этом списке??? Извините за тупость, ну никак не доходит...
И ещё-
позиция - порядковый № ордера в терминале (НЕ тикет, а именно
№ в списке)
Так там же OrderSend!!! Как его можно Select перед тем, как Send???
согласен =)
Я его селектнул после того, как сэнднул, чтобы посмотреть какой
ему тикет присвоили
для этого можно посмотреть, что вернула ф-ция ОрдерСенд:
int ticket = OrderSend(......);
Вот это не понимаю!!! Почему #5 закрылся, а не #2???
Не ленивый я, просто туговат...
Потому что у ордера с тикетом №5 ПОЗИЦИЯ №2!
Если выбирать по тикету, этого не будет ;)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Код я не смотрел, но дело было, скорее всего, именно в этом ;)
Нельзя быть таким ленивым ;)
Нельзя быть таким ленивым ;)
И вот результат блин
1 2006.01.17 00:00 sell 1 0.10 1.2114 10.0000 1.0000 0.00 10000.00
2 2006.01.17 00:00 sell 2 0.10 1.2114 10.0000 1.0000 0.00 10000.00
3 2006.01.17 00:00 sell 3 0.10 1.2114 10.0000 1.0000 0.00 10000.00
4 2006.01.17 00:00 sell 4 0.10 1.2114 10.0000 1.0000 0.00 10000.00
5 2006.01.17 00:00 sell 5 0.10 1.2114 10.0000 1.0000 0.00 10000.00
6 2006.01.17 00:00 close 1 0.10 1.2117 10.0000 1.0000 -3.00 9997.00
7 2006.01.17 00:00 close 3 0.10 1.2117 10.0000 1.0000 -3.00 9994.00
8 2006.01.17 00:00 close 5 0.10 1.2117 10.0000 1.0000 -3.00 9991.00
9 2006.01.17 04:00 sell 6 0.10 1.2102 10.0000 1.0000 0.00 9991.00
10 2006.01.17 04:00 sell 7 0.10 1.2102 10.0000 1.0000 0.00 9991.00
11 2006.01.17 04:00 sell 8 0.10 1.2102 10.0000 1.0000 0.00 9991.00
12 2006.01.17 04:00 sell 9 0.10 1.2102 10.0000 1.0000 0.00 9991.00
13 2006.01.17 04:00 sell 10 0.10 1.2102 10.0000 1.0000 0.00 9991.00
14 2006.01.17 04:00 close 2 0.10 1.2105 10.0000 1.0000 9.00 10000.00
15 2006.01.17 04:00 close 6 0.10 1.2105 10.0000 1.0000 -3.00 9997.00
16 2006.01.17 04:00 close 8 0.10 1.2105 10.0000 1.0000 -3.00 9994.00
17 2006.01.17 04:00 close 10 0.10 1.2105 10.0000 1.0000 -3.00 9991.00
18 2006.01.17 08:00 sell 11 0.10 1.2120 10.0000 1.0000 0.00 9991.00
19 2006.01.17 08:00 sell 12 0.10 1.2120 10.0000 1.0000 0.00 9991.00
20 2006.01.17 08:00 sell 13 0.10 1.2120 10.0000 1.0000 0.00 9991.00
21 2006.01.17 08:00 sell 14 0.10 1.2120 10.0000 1.0000 0.00 9991.00
22 2006.01.17 08:00 sell 15 0.10 1.2120 10.0000 1.0000 0.00 9991.00
23 2006.01.17 08:00 close 4 0.10 1.2123 10.0000 1.0000 -9.00 9982.00
24 2006.01.17 08:00 close 9 0.10 1.2123 10.0000 1.0000 -21.00 9961.00
25 2006.01.17 08:00 close 12 0.10 1.2123 10.0000 1.0000 -3.00 9958.00
26 2006.01.17 08:00 close 14 0.10 1.2123 10.0000 1.0000 -3.00 9955.00
27 2006.01.17 12:00 sell 16 0.10 1.2107 10.0000 1.0000 0.00 9955.00
28 2006.01.17 12:00 sell 17 0.10 1.2107 10.0000 1.0000 0.00 9955.00
29 2006.01.17 12:00 sell 18 0.10 1.2107 10.0000 1.0000 0.00 9955.00
30 2006.01.17 12:00 sell 19 0.10 1.2107 10.0000 1.0000 0.00 9955.00
31 2006.01.17 12:00 sell 20 0.10 1.2107 10.0000 1.0000 0.00 9955.00
32 2006.01.17 12:00 close 7 0.10 1.2110 10.0000 1.0000 -8.00 9947.00
33 2006.01.17 12:00 close 13 0.10 1.2110 10.0000 1.0000 10.00 9957.00
34 2006.01.17 12:00 close 16 0.10 1.2110 10.0000 1.0000 -3.00 9954.00
35 2006.01.17 12:00 close 18 0.10 1.2110 10.0000 1.0000 -3.00 9951.00
36 2006.01.17 12:00 close 20 0.10 1.2110 10.0000 1.0000 -3.00 9948.00
37 2006.01.17 16:00 sell 21 0.10 1.2065 10.0000 1.0000 0.00 9948.00
38 2006.01.17 16:00 sell 22 0.10 1.2065 10.0000 1.0000 0.00 9948.00
39 2006.01.17 16:00 sell 23 0.10 1.2065 10.0000 1.0000 0.00 9948.00
40 2006.01.17 16:00 sell 24 0.10 1.2065 10.0000 1.0000 0.00 9948.00
41 2006.01.17 16:00 sell 25 0.10 1.2065 10.0000 1.0000 0.00 9948.00
42 2006.01.17 16:00 close 11 0.10 1.2068 10.0000 1.0000 52.00 10000.00
43 2006.01.17 16:00 close 17 0.10 1.2068 10.0000 1.0000 39.00 10039.00
44 2006.01.17 16:00 close 21 0.10 1.2068 10.0000 1.0000 -3.00 10036.00
45 2006.01.17 16:00 close 23 0.10 1.2068 10.0000 1.0000 -3.00 10033.00
46 2006.01.17 16:00 close 25 0.10 1.2068 10.0000 1.0000 -3.00 10030.00
47 2006.01.17 20:00 sell 26 0.10 1.2080 10.0000 1.0000 0.00 10030.00
48 2006.01.17 20:00 sell 27 0.10 1.2080 10.0000 1.0000 0.00 10030.00
49 2006.01.17 20:00 sell 28 0.10 1.2080 10.0000 1.0000 0.00 10030.00
50 2006.01.17 20:00 sell 29 0.10 1.2080 10.0000 1.0000 0.00 10030.00
51 2006.01.17 20:00 sell 30 0.10 1.2080 10.0000 1.0000 0.00 10030.00
52 2006.01.17 20:00 close 15 0.10 1.2083 10.0000 1.0000 37.00 10067.00
53 2006.01.17 20:00 close 22 0.10 1.2083 10.0000 1.0000 -18.00 10049.00
54 2006.01.17 20:00 close 26 0.10 1.2083 10.0000 1.0000 -3.00 10046.00
55 2006.01.17 20:00 close 28 0.10 1.2083 10.0000 1.0000 -3.00 10043.00
56 2006.01.17 20:00 close 30 0.10 1.2083 10.0000 1.0000 -3.00 10040.00
57 2006.01.17 20:00 close at stop 29 0.10 1.2083 10.0000 1.0000 -3.00 10037.00
58 2006.01.17 20:00 close at stop 27 0.10 1.2083 10.0000 1.0000 -3.00 10034.00
59 2006.01.17 20:00 close at stop 24 0.10 1.2083 10.0000 1.0000 -18.00 10016.00
60 2006.01.17 20:00 close at stop 19 0.10 1.2083 10.0000 1.0000 24.00 10040.00
01:50:27 2006.01.17 00:00 template EURUSD,H4: open # 0
01:50:27 2006.01.17 00:00 template EURUSD,H4: open #1 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 00:00 template EURUSD,H4: ordt= 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: open # 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: open #2 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 00:00 template EURUSD,H4: ordt= 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: open # 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: open #3 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 00:00 template EURUSD,H4: ordt= 3
01:50:27 2006.01.17 00:00 template EURUSD,H4: open # 3
01:50:27 2006.01.17 00:00 template EURUSD,H4: open #4 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 00:00 template EURUSD,H4: ordt= 4
01:50:27 2006.01.17 00:00 template EURUSD,H4: open # 4
01:50:27 2006.01.17 00:00 template EURUSD,H4: open #5 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 00:00 template EURUSD,H4: ordt= 5
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrdersTotal = 5
01:50:27 2006.01.17 00:00 template EURUSD,H4: i = 0
01:50:27 2006.01.17 00:00 template EURUSD,H4: i after select = 0
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: close #1 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 at price 1.2117
01:50:27 2006.01.17 00:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: i = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: i after select = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: close #3 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 at price 1.2117
01:50:27 2006.01.17 00:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: i = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: i after select = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: close #5 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 at price 1.2117
01:50:27 2006.01.17 00:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: open # 0
01:50:27 2006.01.17 04:00 template EURUSD,H4: open #6 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 04:00 template EURUSD,H4: ordt= 2
01:50:27 2006.01.17 04:00 template EURUSD,H4: open # 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: open #7 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 04:00 template EURUSD,H4: ordt= 4
01:50:27 2006.01.17 04:00 template EURUSD,H4: open # 2
01:50:27 2006.01.17 04:00 template EURUSD,H4: open #8 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 04:00 template EURUSD,H4: ordt= 6
01:50:27 2006.01.17 04:00 template EURUSD,H4: open # 3
01:50:27 2006.01.17 04:00 template EURUSD,H4: open #9 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 04:00 template EURUSD,H4: ordt= 7
01:50:27 2006.01.17 04:00 template EURUSD,H4: open # 4
01:50:27 2006.01.17 04:00 template EURUSD,H4: open #10 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 ok
01:50:27 2006.01.17 04:00 template EURUSD,H4: ordt= 8
01:50:27 2006.01.17 04:00 template EURUSD,H4: OrdersTotal = 7
01:50:27 2006.01.17 04:00 template EURUSD,H4: i = 0
01:50:27 2006.01.17 04:00 template EURUSD,H4: i after select = 0
01:50:27 2006.01.17 04:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: close #2 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 at price 1.2105
01:50:27 2006.01.17 04:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: i = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: i after select = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: close #6 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 at price 1.2105
01:50:27 2006.01.17 04:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: i = 2
01:50:27 2006.01.17 04:00 template EURUSD,H4: i after select = 2
01:50:27 2006.01.17 04:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: close #8 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 at price 1.2105
01:50:27 2006.01.17 04:00 template EURUSD,H4: result close = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: i = 3
01:50:27 2006.01.17 04:00 template EURUSD,H4: i after select = 3
01:50:27 2006.01.17 04:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 04:00 template EURUSD,H4: close #10 sell 0.10 EURUSD at 1.2102 sl: 10.0000 tp: 1.0000 at price 1.2105
01:50:27 2006.01.17 04:00 template EURUSD,H4: result close = 1
...............................
И ещё- тут кто-то писал, и так и недописал- об нормализации асков и бидов. Так что- действительно надо писать так-
?????
Сначала надо OrderSelect(), а потом, например, OrderSend().
В первом цикле for() в приведенном коде сделано наоборот.
Вот пример использования OrderSelect(). Функция анализирует состояние терминала.
OrderSelect() выполнена один раз, а далее - несколько обращений к ордеру без какой бы то ни было ссылки на него.
--------------
В OrderSend() нормализовать биды и аски не нужно. Это не ошибка, прото в этом нет необходимости.
Речь шла о корректном срабатывании оператора сравнения при его работе с действительными числами.
Дело в том, что 1.5000 не всегда такое. Оно иногда отбражается так, а на самом деле 1.49999(9). Я не знаю сколько там девяток.
Или может оказаться, что это число 1.500001.
После нормализации эти числа строгие до указанного количества знаков. Попутно - это не всегда 4. Смотри в словаре Digits.
И ещё-
а результат
01:50:27 2006.01.17 00:00 template EURUSD,H4: i = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: i after select = 2
01:50:27 2006.01.17 00:00 template EURUSD,H4: OrderSelect = 1
01:50:27 2006.01.17 00:00 template EURUSD,H4: close #5 sell 0.10 EURUSD at 1.2114 sl: 10.0000 tp: 1.0000 at price 1.2117
01:50:27 2006.01.17 00:00 template EURUSD,H4: result close = 1
Не ленивый я, просто туговат...
зачем для ордерсенда ордерселект???
Он нужен для работы с ордером, и всё. Для отправки нового ордера ничего выбирать не надо ;)
И ещё-
int ticket = OrderSend(......);
Не ленивый я, просто туговат...
Если выбирать по тикету, этого не будет ;)
зы: OrderClose - это bool а не int =)
зачем для ордерсенда ордерселект???
Он нужен для работы с ордером, и всё. Для отправки нового ордера ничего выбирать не надо ;)