функции открытия ордеров

Но для теста нужно чтобы советник мог открывать позиции по сигналу. добавим функции открытия ордеров BUY и SELL, а так же функцию формирования сигнала ind(); Функция открытия ордера BUY


функция открытия ордера buy

//возвращает тикет(порядковый номер ордера)

//входные параметры:

//лот

// стоп лосс и тейк профит(в пунктах)

int openbuy(double l;int s;int t)

{

int tik;   //тикет

double ask=MarketInfo(Symbol(),MODE_ASK);

double bid=MarketInfo(Symbol(),MODE_BID);

//проверяем размерность лота

//минимально допустимый размер лота

double min=MarketInfo(Symbol(),MODE_MINLOT);

//максимально допустимый размер лота

double max=MarketInfo(Symbol(),MODE_MAXLOT);

//если размер лота >max или max

{

//фиксируем ошибку в журнале

Print("Ошибка! Недопустимый размер лота! лот=",l);

//дублируем сообщение на экране

Comment("Ошибка! Недопустимый размер лота! лот=",l);

//выход

tik=-1;

return(tik);

}

// нормализуем значение лота

l=NormalizeDouble(l,2);

//проверяем значения стопов

//минимальный уровень стопов в пунктах

int stop=MarketInfo(Symbol(),MODE_STOPLEVEL);

//спред в пунктах

int spread=MarketInfo(Symbol(),MODE_SPREAD);

stop=stop+spread;

//если лосс или тейк меньше допустимого

if((s<=stop&&s!=0)||(t<=stop&&t!=0))

{

//фиксируем ошибку в журнале

Print("Стопы слишком близко к рынку стор лосс=",s, "Тейк профит =",t," Ask= ",ask);

//дублируем сообщение на экране

Comment("Стопы слишком близко к рынку стор лосс=",s, "Тейк профит =",t," Ask= ",ask);

//выход

tik=-1;

return(tik);

}

//вычисляем значения стопов

double s1=0,t1=0;

if(s!=0)s1=bid-s*Point;

if(t!=0)t1=ask+t*Point;

//нормализуем стопы

s1=NormalizeDouble(s1,Digits);

t1=NormalizeDouble(t1,Digits);

//пытаемся открыть позицию

tik=OrderSend(Symbol(),OP_BUY,l,ask,slip,s1,t1,"",magic,0,Red); if(tik<0)

{

Comment(GetLastError());  //ошибка

Print(GetLastError());

} return(tik);

}


 аналогичная ф-я для SELL


 //возвращает тикет(порядковый номер ордера)

//входные параметры:

//лот

// стоп лосс и тейк профит(в пунктах)

int opensell(double l;int s;int t)

{ int tik;  //тикет

double ask=MarketInfo(Symbol(),MODE_ASK);

double bid=MarketInfo(Symbol(),MODE_BID);

//проверяем размерность лота

//минимально допустимый размер лота

double min=MarketInfo(Symbol(),MODE_MINLOT);

//максимально допустимый размер лота

double max=MarketInfo(Symbol(),MODE_MAXLOT);

//если размер лота >max или max)

{

//фиксируем ошибку в журнале

Print("Ошибка! Недопустимый размер лота! лот=",l);

//дублируем сообщение на экране

Comment("Ошибка! Недопустимый размер лота! лот=",l);

//выход

tik=-1;

return(tik);

}

// нормализуем значение лота

l=NormalizeDouble(l,2);

//проверяем значения стопов

//минимальный уровень стопов в пунктах

int stop=MarketInfo(Symbol(),MODE_STOPLEVEL);

//спред в пунктах

int spread=MarketInfo(Symbol(),MODE_SPREAD);

stop=stop+spread;

//если лосс или тейк меньше допустимого

if((s<=stop&&s!=0)||(t<=stop&&t!=0))

{

//фиксируем ошибку в журнале

Print("Стопы слишком близко к рынку стор лосс=",s, "Тейк профит =",t," Ask= ",ask);

//дублируем сообщение на экране

Comment("Стопы слишком близко к рынку стор лосс=",s, "Тейк профит =",t," Ask= ",ask);

//выход

tik=-1;

return(tik);

}

//вычисляем значения стопов

double s1=0,t1=0;

if(s!=0)s1=ask+s*Point;

if(t!=0)t1=bid-t*Point;

//нормализуем стопы

s1=NormalizeDouble(s1,Digits);

t1=NormalizeDouble(t1,Digits);

//пытаемся открыть позицию

tik=OrderSend(Symbol(),OP_SELL,l,bid,slip,s1,t1,"",magic,0,Red);

if(tik<0)

{

Comment(GetLastError());

Print(GetLastError());

}

return(tik);

}


Функцию ind() пока оставим пустой


string ind()

{

string s="";

return(s);

}


Комментарии (0)

Нет комментариев. Ваш будет первым!

Яндекс.Метрика