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

 
hoz:


 Суть я общую уловил. Вот, что вышло:

N - количество минут пройденное после открытия дневного бара. Пока что я не понял как его получить, так что написал чисто переменной.  По идее верно всё.

 sergeev:

 А вот про связать запоминание удачной операции к времени попрошу уточнить. Я не совсем понял.


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

P.S. И N вам определять не надо, просто делаете вашу проверку  if(TimeCurrent() >= iTime(Symbol(),1440,0) ) до тех пор, пока нужные вам действия не будут выполнены(установка ордера).

 
rigonich:

Флаг -- это переменная, обычно типа bool которая устанавливается в какое либо состояние в зависимости от истинности проверяемого условия.(здесь -- есть лли позиция с заданной ценой открытия).

понял, а что такое ИНДЕКС ПОЗИЦИИ ? это вроде не тикер, и не тип....
 
lottamer:

понял, а что такое ИНДЕКС ПОЗИЦИИ ? это вроде не тикер, и не тип....


Это индекс , определяющий положение ордера в массиве,  в котором хранятся данные по ордерам, имеющимся в терминале.

То естьто, что подчеркнуто( при SELECT_BY_POS)  bool OrderSelect(int index, int select, int pool=MODE_TRADES)


 
 
rigonich:


Это индекс , определяющий положение ордера в массиве,  в котором хранятся данные по ордерам, имеющимся в терминале.

То естьто, что подчеркнуто( при SELECT_BY_POS)  bool OrderSelect(int index, int select, int pool=MODE_TRADES)


 

 


а как это применить на практике, если нужно закодировать условие "если последние две сделки были лосями....."  ??
 
lottamer:

а как это применить на практике, если нужно закодировать условие "если последние две сделки были лосями....."  ??


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

Для работы с ордерами организуются циклы перебора ордеров. 

 
rigonich:


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

P.S. И N вам определять не надо, просто делаете вашу проверку  if(TimeCurrent() >= iTime(Symbol(),1440,0) ) до тех пор, пока нужные вам действия не будут выполнены(установка ордера).


 Но если поставить так:

if(TimeCurrent() >= iTime(Symbol(),1440,0)

 Так будет действителен сигнал постоянно после открытия бара и ... до бесконечности. А зачем мне это? Главное, чтоб открылся один ордер на открытии бар, а не пачка.

 
hoz:

 Но если поставить так:

 Так будет действителен сигнал постоянно после открытия бара и ... до бесконечности. А зачем мне это? Главное, чтоб открылся один ордер на открытии бар, а не пачка.


И ... до бесконечности -- это частный случай, если необходимое вам условие -- установка ордера -- не выполнится ни сегодня, ни завтра...

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

 
rigonich:


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

Для работы с ордерами организуются циклы перебора ордеров. 


как начать такой цикл я знаю...

 for(int i=0; i<total; i++)

{

if  (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 

а вот что дальше? как подвести к тому чтобы некая переменная давала TRUE-когда 2 последних сделки лосевые, и FALSE когда - прибыльные ?

 

ИЛИ такой вариант.

при закрытии сделок по стопу - где-то должен включаться счетчик флажков.... но как уловить момент закрытия? 

 
rigonich:


Это индекс , определяющий положение ордера в массиве,  в котором хранятся данные по ордерам, имеющимся в терминале.

То естьто, что подчеркнуто( при SELECT_BY_POS)  bool OrderSelect(int index, int select, int pool=MODE_TRADES)


 

 


я правильно понимаю, что последняя МНОЮ закрытая сделка будет иметь индекс 1. А после закрытия следующий, индекс 2...и так далее с каждой новой закрытой позицией?  А как на счет суммации по дням? вчерашние учитываются? или все начинается заново каждый день?
 
lottamer:


как начать такой цикл я знаю...

 for(int i=0; i<total; i++)

{

if  (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 

а вот что дальше? как подвести к тому чтобы некая переменная давала TRUE-когда 2 последних сделки лосевые, и FALSE когда - прибыльные ?

 

ИЛИ такой вариант.

при закрытии сделок по стопу - где-то должен включаться счетчик флажков.... но как уловить момент закрытия? 


Есть несколько вариантов решений таких задач. пожалуй, самый простой, перебираете в цикле все ордера, ищете, какой был закрыт последним, смотрите, по стопу или профиту закрылся ваш ордер, запоминаете его тикет, запускаете цикл по новой, если выбран ордер с запомненным вами тикетом, пропускаете его,  находите одер закрытый предпоследним...

P.S. и не MODE_TRADES ,а MODE_HISTORY. 

Причина обращения: