Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 701

 
borilunad:

Впервые попробовал написать открытие позиций в цикле, т.к. не исключаю открытия и по другим парам.

Но почему-то в цикле не открывает ничего! Неужели для открытия нужен особый цикл?! Правда, проверял только в тестере!

Я написал обычный:

Что не так для открытия ордеров, позиций? Благодарю за помощь!



Там пока нет ордеров цикл не запустится. А в чём смысл цикла вообще?
 
borilunad:

Впервые попробовал написать открытие позиций в цикле, т.к. не исключаю открытия и по другим парам.

Но почему-то в цикле не открывает ничего! Неужели для открытия нужен особый цикл?!

Я написал обычный:

Что не так для открытия ордеров, позиций? Благодарю за помощь!

Цикл выполняется быстрей чем освобождается торговый поток. Поэтому надо ставить ещё цикл задержку while(!IsTradeContextBusy()) Sleep(100);
 
valeryk:


Там пока нет ордеров цикл не запустится. А в чём смысл цикла вообще?


Спасибо! Я так и подумал! Значит, если, например, хочу открыть по первой паре, достачно без цикла, но с if(OrdersTotal == 0). А когда открыть другой ордер по этой же или по другой паре, нужен цикл, и будет работать! Сейчас попробую! 

Видно, придётся многое поменять в открытии, но в принципе понял, как надо! Спасибо!

 

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров
 
AlexeyVik:

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров

Спасибо! Но мне нужен цикл чтобы сов не видел других пар! С ошибками потом разберусь! Я даже обрадовался, когда в журнале появилась ошибка 130, значит заработало! Ошибки у меня обрабатываются во внешних функциях! Ещё раз спасибо!
 
borilunad:

Спасибо! Но мне нужен цикл чтобы сов не видел других пар! С ошибками потом разберусь! Я даже обрадовался, когда в журнале появилась ошибка 130, значит заработало! Ошибки у меня обрабатываются во внешних функциях! Ещё раз спасибо!
Вот в этом и есть пагубность логики. Сов не может не видеть других пар. Его можно и нужно заставить не обрабатывать УЖЕ ОТКРЫТЫЕ ордера других символов. А в функцию OrderSend(............) пишется конкретный Symbol() или в текстовом формате, например "EURUSD"... что впишешь то и будет открываться. Или пытаться открыть...
 
AlexeyVik:

Вообще-то какая-то пагубная логика. Я сначала посмотрел не внимательно... Зачем OrdersTotal() при открытии ордеров???

Ну если надо открыть несколько ордеров в цикле, то и цикл надо организовывать по количеству нужных ордеров. А если надо поддерживать это количество постоянно то потом действуют другие правила.

Например надо открыть 7 ордеров

Но это короткий вариант. По хорошему надо-бы вставить обработку ошибок при открытии ордеров

Хороший способ проверки возможности открыть до восьми ордеров за один тик. Нам их обещали, но пока никто не проверил
 
Vinin:

Хороший способ проверки возможности открыть до восьми ордеров за один тик. Нам их обещали, но пока никто не проверил

Ничё не понял...
 
AlexeyVik:

Ничё не понял...
Сейчас практически невозможно добиться занятости торгового потока. Число потоков увеличено. Вот Витя и сказал, что открыть в цикле на одном тике горсточку ордеров будет неплохой проверкой выполненного обещания от Метаквотов.
 
AlexeyVik:
Вот в этом и есть пагубность логики. Сов не может не видеть других пар. Его можно и нужно заставить не обрабатывать УЖЕ ОТКРЫТЫЕ ордера других символов. А в функцию OrderSend(............) пишется конкретный Symbol() или в текстовом формате, например "EURUSD"... что впишешь то и будет открываться. Или пытаться открыть...


Благодарю, но сейчас нет времени объяснять, что мне нужно, и почему не годятся стандартные решения!