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