Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05 Торг системы.doc
Скачиваний:
18
Добавлен:
15.03.2016
Размер:
679.94 Кб
Скачать

Удаление неисполненных отложенных ордеров по истечении некоторого времени

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

Обозначим время, в течение которого можно ожидать исполнения отложенного ордера – ExistTimeP (в периодах длительности свечи на графике). Тогда следующие операторы позволяют удалить старые, неисполненные, отложенные ордера:

vars:

ExistTimeP(60);

. . . . . . . .

//удалить старые отложенные ордера

//=====================================

for cnt = 1 to TotalTrades

{ // выберем ордера только для данной валюты

if OrderValue(cnt,VAL_SYMBOL)=Symbol then // инструмент совпадает?

{

if OrderValue(cnt,VAL_TYPE)>OP_SELL then // это отложенный ордер

{ // проверим время создания отложенного ордера

TimeTmp1=CurTime-OrderValue(cnt,VAL_OPENTIME);

if TimeTmp1 > ExistTimeP*Period*60 then

{ // удалить старый отложенный ордер

DeleteOrder(OrderValue(cnt,VAL_TICKET),Red);

exit;

};

};

}; // if OrderValue(cnt,VAL_SYMBOL)=Symbol

}; // for cnt = 1 to TotalTrades

//старые отложенные ордера удалены!!!

//=====================================

Алгоритм открытия ордеров Buy и Sell в заданные моменты времени

Рассмотрим алгоритм открытия рыночных ордеров Buy и Sell в зависимости от времени.

Предположим, что ордера открываются в течение часа:

- в 0 минут и 30 минут следует открыть ордер Buy

- в 15 минут и 45 минут следует открыть ордер Sell

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

- от 0 минут до 5 минут и от 30 минутдо 35 минут - следует открыть ордер Buy,

- от 15 минут до 20 минут и от 45 минут до 50 минут - следует открыть ордер Sell.

Введем следующие значения для переменной OpenNewOrder:

- если OpenNewOrder=1, то в программе автоматически следует открыть рыночный ордер Buy,

- если OpenNewOrder=2, то в программе автоматически следует открыть рыночный ордер Sell.

if Minute>=0 and Minute < 5 Minute>=30 and Minute < 35 or then

{

OpenNewOrder =1;

};

if Minute>=15 and Minute < 20 Minute>=45 and Minute < 50 or then

{

OpenNewOrder =2;

};

Чтобы обращение к проверке условия открытия ордера выполнялось только 1 раз в течение длительности свечи (периода времени выбранного графика), то следует использовать условие начала нового периода на графике (появления новой свечи):

vars:

PrevBarTime(0);

. . . . . . . .

if PrevBarTime <> Time then // обнаружена новая свеча

{

PrevBarTime = Time;

. . . . . . . .

//проверка условия открытия ордеров

. . . . . . . .

};

Обозначим количество лотов в ордере – Lots1,

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

Введем также значения величины проскальзывания при исполнения ордера в пунктах – Slippage0.

Обозначим:

Price1 – цена открытия ордера

StopLoss1 – значение для закрытия ордера по условию ограничения потерь

TakeProfit1– значение для закрытия ордера по условию получения достаточной прибыли.

На графике информацию об открытии ордера Buy отобразим синим цветом и построим вертикальную линию.

// откроем ордер Buy

if OpenNewOrder=1 then

{

// купим лот

Price1=Ask;

StopLoss1=Price1-StopLoss0*Point;

TakeProfit1=Price1+Profit0*Point;

SetOrder(OP_BUY,Lots1,Price1,Slippage1,StopLoss1,TakeProfit1,Blue); // исполняем

// нарусуем вертикальную линию при открытии позиции

MoveObject(""+CurTime,OBJ_VLINE,CurTime,Close,

CurTime,Close,Blue,1,STYLE_SOLID);

alert(Symbol," Открыт ордер Buy - Time=",

TimeHour(CurTime),":",TimeMinute(CurTime),":",TimeSeconds(CurTime),

" Trades=",SymbolTotalTrades);

exit;

};// if OpenNewOrder=1

// ===================================================================

При открытии ордера Sell особое внимание следует обратить на вычисление значений цены для условий закрытия ордера по StopLoss и TakeProfit.

На графике информацию об открытии ордера Sell отобразим красным цветом и построим вертикальную линию.

// откроем ордер Sell

if OpenNewOrder=1 then

{

// купим лот

Price1=Bid;

StopLoss1=Price1+StopLoss0*Point;

TakeProfit1=Price1-Profit0*Point;

SetOrder(OP_Sell,Lots1,Price1,Slippage1,StopLoss1,TakeProfit1,Red); // исполняем

// нарусуем вертикальную линию при открытии позиции

MoveObject(""+CurTime,OBJ_VLINE,CurTime,Close,

CurTime,Close,Red,1,STYLE_SOLID);

alert(Symbol," Открыт ордер Sell - Time=",

TimeHour(CurTime),":",TimeMinute(CurTime),":",TimeSeconds(CurTime),

" Trades=",SymbolTotalTrades);

exit;

};// if OpenNewOrder=2

// ===================================================================