//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции |
//+-------------------------------------------------------------------------------------+
int OpenBuy()
{
g_ticket = -1;
string myNote = "сов баянул";
g_ticket = OrderSend(Symbol(),OP_BUYLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Blue);
if(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
return(g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции |
//+-------------------------------------------------------------------------------------+
int OpenSell()
{
g_ticket = -1;
string myNote = "сов шортанул";
g_ticket = OrderSend(Symbol(),OP_SELLLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Red);
if(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
return(g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
double sl = 0, tp = 0;
if(signal == SIGNAL_BUY && FindOrders() == 0) // Если сигнал на покупку и открытых ордеров нет...
{
g_ticket = OpenBuy(); // открываем лимитный ордер на покупку
if(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true) // Если ордер есть и он выбран..
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits); // Получаем значение стоп-лосса для выбранного ордера
if(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
}
else if(signal == SIGNAL_SELL && FindOrders() == 0) // Если сигнал на продажу и открытых ордеров нет..
{
g_ticket = OpenSell(); // Открываем лимитный ордер на продажу
if(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true) // Если ордер есть и он выбран..
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits); // Получаем значение стоп-лосса для выбранного ордера
if(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
}
if(sl != 0 || tp != 0) // Если полученные значения sl и tp не равныы 0, то..
{
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // Модифицируем ордер
return(true);
}
return(true);
}