АвторСообщение





Пост N: 5
Зарегистрирован: 19.11.10
ссылка на сообщение  Отправлено: 05.11.11 15:38. Заголовок: Открытие ордеров.???


Вопрос состоит в следующем :
для обнаружения ордеров я использую цикл типа:
int total=OrdersTotal();
int b=0,s=0, n=0, bl=0,sl=0, bs=0,ss=0,b2=0,s2=0;
for (int i=total; i>=0; i--)
{if(OrderSelect(i, SELECT_BY_POS))
{if(OrderSymbol()==Symbol() )
{n++;
//-----------------------------------------------------------------------------------------------------
if (OrderType()==OP_BUY && OrderMagicNumber()==magic1){b++ ;}

}}}
и если нет ордеров заданного типа , то есть if ( b==0&&(дополнительное условие)) советник открывает ордер,
Вопрос : если b становится равным 1 то советник уже ордер не откроет. Как сделать что бы при каждом появлении условия открывался всего один ордер ????????

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 24 , стр: 1 2 3 All [только новые]


постоянный участник


Пост N: 223
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 05.11.11 20:40. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Вопрос : если b становится равным 1 то советник уже ордер не откроет. Как сделать что бы при каждом появлении условия открывался всего один ордер ????????



В вашем вопросе ответ уже содержится. Если советник откроет ордер заданного типа, то количество ордеров станет равно 1. То есть ордера такого типа больше открыты не будут.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 6
Зарегистрирован: 19.11.10
ссылка на сообщение  Отправлено: 05.11.11 21:10. Заголовок: Хорошо ! Я это поним..


Хорошо ! Я это понимаю ! Допустим я не буду использовать цикл. Как сделать что бы открывался только один ордер ??? Как задать условие ????

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 224
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 05.11.11 22:22. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Допустим я не буду использовать цикл. Как сделать что бы открывался только один ордер ??? Как задать условие ????



Если вы не станете использовать цикл, в котором будут посчитаны все позиции, то вы просто не будете располагать информацией о имеющихся позициях. Цикл в данном случае является обязательным.
Чтобы понять, как правильнее написать программу, отделите мух от котлет, т.е. торговые критерии (сигналы открытия, модификации или закрытия) от торговых приказов.
Торговый критерий определите отдельно, независимо от состояния депозита. Это одна функция. Другая функция - это определение состояния счета (подсчет имеющихся ордеров, вычисление допустимого объема будущего ордера и т.п.).
И только в третьей функции соединяете воедино полученные показатели. К примеру, у вас есть сигнал открытия рыночного ордера Buy. Значит, необходимо проверить, есть ли уже Buy нужного объема. Если есть, то пропустить сигнал. Если есть ордер, но объем мал, то добавить еще один Buy. Если Buy нет, а есть Sell, то закрыть Sell и открыть Buy. Это - "к примеру", т.к. в вашей стратегии может быть предусмотрен другой алгоритм.

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 915
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 06.11.11 00:01. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Вопрос : если b становится равным 1 то советник уже ордер не откроет. Как сделать что бы при каждом появлении условия открывался всего один ордер ????????

Не очень понятен вопрос.

Если допустить, что один ордер всё же будет открываться при каждом появлении условия, то .. ордера будут открываться ровно столько раз, сколько раз сработает условие. Если условие таково, что оно будет срабатывать на каждом тике, то на каждом тике будет открываться ордер. Тогда непонятно зачем вообще считать ордера (b++). И.. сколько же ордеров откроется? Неужели столько, что в сумме на весь депозит?

Если условие таково, что предполагается всего один однонаправленный ордер, то ордера не следует открывать, если ордер уже есть.

Одним словом, пока не понятна задача. Опишите подробнее.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 7
Зарегистрирован: 19.11.10
ссылка на сообщение  Отправлено: 06.11.11 09:41. Заголовок: Здравствуйте! Я сд..


Здравствуйте! Я сделал графический объект при перемещении которого открывается только один ордер .
Ордер открывается только один так как я использую цикл для подсчета ордеров и соответственно если b становится = 1
то второй ордер при перемещении объекта я уже открыть не могу. Если же я из условия убираю b==0 то при перетягивании графического объекта открывается 100 ордеров сразу...
Я видел что в афтографе 4 можно открывать много ордеров . Подскажите как сделать что бы при перетягивании значка каждый раз открывался только один ордер ???????

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 226
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 06.11.11 17:58. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Подскажите как сделать что бы при перетягивании значка каждый раз открывался только один ордер ???????



Теперь задача стала более понятной. Но от этого суть предыдущего моего высказывания не меняется. В данном случае торговым критерием у вас является факт перемещения значка. Количество открытых позиций, действительно, можно выбросить.
Множество позиций у вас открывается, видимо, по той причине, что вы реагируете на перемещение значка еще тогда, когда пользователь не отпустил его (значок еще на мышке). Для этого необходимо удостовериться в том, что значок более не перемещается. Критерием того, что пользователь отпустил значок, является возможность программного удаления значка. Значит, вы должны пытаться удалять значок во время его перемещения до тех пор, пока не сможете его удалить. Как только удаление значка стало возможным, открывайте позицию и возвращайте значок на его изначальное место. Таким образом, торговый критерий пропадет до нового перемещения значка.

Спасибо: 1 
ПрофильЦитата Ответить
Автор




Пост N: 917
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 06.11.11 21:19. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Ордер открывается только один так как я использую цикл для подсчета ордеров и соответственно если b становится = 1
то второй ордер при перемещении объекта я уже открыть не могу. Если же я из условия убираю b==0 то при перетягивании графического объекта открывается 100 ордеров сразу...

Написанное понятно.

Непонятно другое. Зачем считать открытые ордера? Ведь в цикле Вы делает именно это? Считаете уже открытые ордера?

Для того, чтобы открыть один ордер после некоторого внешнего воздействия (в Вашем случае смещения значка) не нужно считать уже открытые рыночные ордера. Нужно следить за состоянием управляющего значка:
1 - если значок в исходной позиции, ничего не делать;
2 - если значок сдвинут, нужно:
2.1 - запомнить, что значок был сдвинут
2.2 - вернуть значок на исходную позицию
2.3 - открыть один ордер
2.3.1 - как только ордер открыт, перестать пытаться открывать ордера
2.3.2.1 - если это не получилось, перейти к пункту 2.3 (вообще тут нужен и анализ ошибки)
2.3.2 - забыть, что значок был сдвинут

В предыдущем посте Scriptong описал порядок отслеживания факта сдвига управляющего значка (пункта 2).

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 8
Зарегистрирован: 19.11.10
ссылка на сообщение  Отправлено: 07.11.11 08:06. Заголовок: Scriptong пишет: ..


Scriptong пишет:

 цитата:
Для этого необходимо удостовериться в том, что значок более не перемещается. Критерием того, что пользователь отпустил значок, является возможность программного удаления значка. Значит, вы должны пытаться удалять значок во время его перемещения до тех пор, пока не сможете его удалить. Как только удаление значка стало возможным, открывайте позицию и возвращайте значок на его изначальное место. Таким образом, торговый критерий пропадет до нового перемещения значка.


Что то не получается не могу понять в чем проблема

if (ob !=ob1 ) // Сравниваем координаты обьекта с его родными координатами
{
if (ObjectDelete("op_buy")==true) //если обьект удален
{
OrderSend(Symbol(),OP_BUY ,Lot,Ask ,Slip,0,0,"Order BUY #",magic1,0,Green); //Открываем ордер
}
}

Всеравно продолжает открывать по 20-50 ордеров при перемещении значка....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 227
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 07.11.11 09:24. Заголовок: Не совсем так. Objec..


Не совсем так.
ObjectDelete всегда вернет true, если объект существует. Но это не означает, что объект успешно удален. После удаления объекта необходимо проверить, находится ли он на графике:

if (ob !=ob1 ) // Сравниваем координаты обьекта с его родными координатами
{
if (ObjectDelete("op_buy")==true && ObjectFind("op_buy") < 0) //если обьект удален
{
OrderSend(Symbol(),OP_BUY ,Lot,Ask ,Slip,0,0,"Order BUY #",magic1,0,Green); //Открываем ордер
}
else
{
// восстанавливаем объект, т.к. он не должен исчезать с курсора мыши
}
}

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 9
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 07.11.11 10:18. Заголовок: Scriptong пишет: Не..


Scriptong пишет:

 цитата:
Не совсем так.
ObjectDelete всегда вернет true, если объект существует. Но это не означает, что объект успешно удален. После удаления объекта необходимо проверить, находится ли он на графике:

if (ob !=ob1 ) // Сравниваем координаты обьекта с его родными координатами
{
if (ObjectDelete("op_buy")==true && ObjectFind("op_buy") < 0) //если обьект удален
{
OrderSend(Symbol(),OP_BUY ,Lot,Ask ,Slip,0,0,"Order BUY #",magic1,0,Green); //Открываем ордер
}
else
{
// восстанавливаем объект, т.к. он не должен исчезать с курсора мыши
}
}


Все равно открывается масса ордеров ...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 24 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет