прошу совета))

 

всем доброго времени суток))) у меня снова вопрос к опытным программистам

пишу советник, который открывает позиции при пересечении индикаторных линий.

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

вопрос: как прописать в код условие, чтобы советник открывал только ОДИН ордер при ПЕРВОМ формировании торговых критериев, и даже в случае, если критерии на открытие ордера до сих пор в силе, больше ордеров не открывал

 
При открытии в некую переменную заносите время открытия текущей свечи Time[0]. Перед открытием надо проверять совпадение этой переменной с текущим значением Time[0].
 

Поставить флаг после исполнения сделки. По условию флага открывать сделку. Прописать условия возврата флага в исходное положение.

int Flag=0;

if(ордер открылся)флаг=1;

if (н-р,новый бар) флаг=0;

 

спасибо

 
zfs писал(а) >>

Поставить флаг после исполнения сделки. По условию флага открывать сделку. Прописать условия возврата флага в исходное положение.

int Flag=0;

if(ордер открылся)флаг=1;

if (н-р,новый бар) флаг=0;


можно и так поступить...

res=-1;

res=OrderSend();

if(res>0) flag=OrderOpenTime();

if(Time[0]<=flag) не открывать ордер...

 

Вышеописанные способы вполне рабочие, но при выключении электропитания они не сработают. Например, отрубился дома свет - комп выключился. Через три минуты свет включился. Мы запускаем комп и терминал. Советник снова ставит ордер, а ставить-то не должен. Поэтому есть способ лучше. Проверяем наличие торгового сигнала. Если сигнал есть, то устанавливаем флаг наличия сигнала. Затем, если ордеров рыночных нет, то проходим по всем ордерам истории. Если в ней есть ордер, время открытия которого больше или равно Time[0], то снимаем флаг наличия сигнала.

P.S.

Не нужно говорить о источниках бесперебойного питания - простая ситуация человек работает на Н1 или Н4. UPS даёт возможность поработать ещё минут 15. Но не час и не 4 часа.

P.P.S.

Можно так же задействовать перемнные глобального уровня и в них хранить флаги - тогда не придётся ходить по истории ордеров

 
drknn >>:

Вышеописанные способы вполне рабочие, но при выключении электропитания они не сработают. Например, отрубился дома свет - комп выключился. Через три минуты свет включился. Мы запускаем комп и терминал. Советник снова ставит ордер, а ставить-то не должен. Поэтому есть способ лучше. Проверяем наличие торгового сигнала. Если сигнал есть, то устанавливаем флаг наличия сигнала. Затем, если ордеров рыночных нет, то проходим по всем ордерам истории. Если в ней есть ордер, время открытия которого больше или равно Time[0], то снимаем флаг наличия сигнала.

P.S.

Не нужно говорить о источниках бесперебойного питания - простая ситуация человек работает на Н1 или Н4. UPS даёт возможность поработать ещё минут 15. Но не час и не 4 часа.

P.P.S.

Можно так же задействовать перемнные глобального уровня и в них хранить флаги - тогда не придётся ходить по истории ордеров.

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

а вообще, от всего не застрахуешься... :)

 
drknn >>:Не нужно говорить о источниках бесперебойного питания - простая ситуация человек работает на Н1 или Н4. UPS даёт возможность поработать ещё минут 15. Но не час и не 4 часа.

Ноутбук - 4-6 часов,

Нэтбук - 8-10 часов и более,

VPS - не ограничено как по эл/эн так и по интернет-каналу.