В заданные моменты времени

 

Рассмотрим алгоритм открытия рыночных ордеров 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

 

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