[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 176

 
eddy:
ну а как ты сам определаешь последний? по времени. ну так и в коде смотри какой ордер самый последний по времени


Я уже разобрался сам. А вот твой последний совет я так и не понял. Разве можно вытянуть все ордера и посмотреть какой был позже всех по времени? Тоесть ты предлагаеш вытянуть все ордера и сравнить время закрытия всех ордеров? Покажи код как такое сделать.

Я решил все так:

int z;
int _bar;

int start()

{

z=OrdersHistoryTotal()-1;
OrderSelect(z,SELECT_BY_POS,MODE_HISTORY);
if(TimeCurrent() - OrderCloseTime() > 1&& TimeCurrent() - OrderCloseTime() < 7)
{
if(OrderProfit()> 0)
PlaySound("profit.wav");
if(OrderProfit()== 0)
PlaySound("zero.wav");
if(OrderProfit()< 0)
PlaySound("loss.wav");
}

Оказывается если вместо z подставить 1 то будет выбирать самый первый ордер( ну то который ранее всего).Логично что если взять номер самого последнего то будет выбирать самый последний поэтому взял OrdersHistoryTotal() (возвращает количество ордеров в истории) и подставить вместо индекса. Но как оказалось OrdersHistoryTotal() возвращает почему то на 1 больше чем есть на самом деле. У меня в истории было 6 ордеров а OrdersHistoryTotal() выдавал цыфру в 7 ордеров. Поэтому прописал z=OrdersHistoryTotal()-1; . Только я же не знал раньше что подставлять в index чтоб выбрало последний. Пришлось самому додумыватся потому что никто ниче так и не подсказал.

 
Reaktiv:

if(TimeCurrent() - OrderCloseTime() > 1&& TimeCurrent() - OrderCloseTime() < 7)

это неправильно в корне, и не всегда будет работать даже в тестере.
 
sergeev:
это неправильно в корне, и не всегда будет работать даже в тестере.

Ну так покажите пожалуйста как правильно.А то знаете в учебнике много каких примеров нет.
 
Reaktiv:

Ну так покажите пожалуйста как правильно.А то знаете в учебнике много каких примеров нет.

любое решение зависит от поставленных целей.

если вы хотите найти последний ордер в истории это одно, а если определить как закрылся последний ордер вашего эксперта, то другое.

 
sergeev:

любое решение зависит от поставленных целей.

если вы хотите найти последний ордер в истории это одно, а если просто выдать как закрылся последний ордер вашего эксперта, то другое.


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

тогда схема должна быть такой

1. В момент успешного OrderSend вы должны запомнить тикет ордера (GlobalVariableSet)

2. На каждом тике проверять тикет этого запомненного ордера (GlobalVariableGet) на закрытость (OrderCloseTime)

3. Если ордер закрыт, то выдать соответствующий звук по профиту и удалить запомненный тикет (GlobalVariableDel)

4. Если вы таки желаете делать проверку на 1-7 секунд, то эту проверку включить в анализ можно, но не стоит забывать, что тики могут прийти с задержкой в 10 секунд и более и вы пропустите сигнал.

 
sergeev:

тогда схема должна быть такой

1. В момент успешного OrderSend вы должны запомнить тикет ордера (GlobalVariableSet)

2. На каждом тике проверять тикет этого запомненного ордера (GlobalVariableGet) на закрытость (OrderCloseTime)

3. Если ордер закрыт, то выдать соответствующий звук по профиту и удалить запомненный тикет (GlobalVariableDel)

4. Если вы таки желаете делать проверку на 1-7 секунд, то эту проверку включить в анализ можно, но не стоит забывать, что тики могут прийти с задержкой в 10 секунд и более и вы пропустите сигнал.



Так а OrderSend должен отправлять советник или без разници? А то система построена на том что я сам вручную открываю сделки. А сам советник после открытия сделки модифицирует ордер(ставит стопы) и потом при закритии играет музыку. А насчет того что тики могут идти с задержокй и в 10 сек то тут понятно. Я не собираюсь использовать советник например в такое время как сейчас. Использую советник на евробаксе где то с 9 до 18 по Москве.Там маловероятна такая задержка.
 
Reaktiv:

А сам советник после открытия сделки модифицирует ордер(ставит стопы)

тогда в вашем случае вот этот пункт и будет точкой взятия тикета ордера.
 
sergeev:
тогда в вашем случае вот этот пункт и будет точкой взятия тикета ордера.

спасибо
 
Reaktiv:
я хотел сделать так чтоб музыка играла если с момента закрытия ордера прошло от 1 до 7 секунд.
зачем? можно просто по закрытию ордера проиграть 1 раз
Причина обращения: