С НОВЫМ ГОДОМ
Если можно поменяйте пожалуйста в этом советнике условия бай и селл .Надо чтобы покупка или продажа открывалась сразу согласно тому что цена изменится с начало дня например на 50 пунктов. То есть бай или селл открывались по той цене которая в данный момент. спасибо
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// First_day_price.mq4 Пример простого эксперта.
// Стратегия запрограммирована по тех.заданию заказчика.
// Сергей Ковалёв, Днепропетровск, sk@autograf.dp.ua, ICQ 64015987,
http://autograf.dp.ua //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 1 жж
// Внешние переменные
extern double Lot= 0.1; // Значение лотов
extern int SL = 100; // StopLoss (пунктов)
extern int TP = 50; // TakeProfit (пунктов)
extern int Delta_Price = 50; // Отклонение цены от цены откр. дня
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 2 жж
int start()
{
//================================================================================== 3 ==
string Symb = Symbol(); // Название финансового инструмента
int Spread = Ask - Bid; // Текущий размер спреда
int StopLevel = NormalizeDouble(MarketInfo(Symb, MODE_STOPLEVEL),0);// Текущ.StopLevel
if (SL > 0 && SL < StopLevel) // Если заказанный StopLoss меньше ..
SL = StopLevel; // допустимого, то увеличиваем
if (TP > 0 && TP < StopLevel) // Если заказанный TakeProfit меньше..
TP = StopLevel; // допустимого, то увеличиваем
//---------------------------------------------------------------------------------- 4 --
datetime Day_Opn_Time = iTime(Symb,PERIOD_D1,0);// Время открытия сегодняшнего дня
double Day_Opn = iOpen(Symb,PERIOD_D1,0);// Цена открытия сегодняшнего дня
double Day_High = iHigh(Symb,PERIOD_D1,0);// Максимум сегодняшнего дня
double Day_Low = iLow (Symb,PERIOD_D1,0);// Минимум сегодняшнего дня
int Crit = -1; // Пока считаем, что критериев для открытия нет
//================================================================================== 5 ==
int Total = OrdersTotal(); // Общее количество ордеров
for(int i=Total-1; i>=0; i--) // Цикл перебора ордеров
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
if (OrderSymbol() != Symb || // Ордер открыт по другому инструм. ..
OrderOpenTime()>= Day_Opn_Time ) // .. или ордер открыт сегодня..
continue; // .. то закрывать этот ордер не будем
int Tip_Ord = OrderType(); // Тип выбранного ордера
int Ticket = OrderTicket(); // Номер ордера
//---------------------------------------------------------------------------------- 6 --
if (Tip_Ord==0) // Если это ордер Buy, то..
{
double Ord_Lots=NormalizeDouble(OrderLots(),2);// Количество лотов
OrderClose(Ticket, Ord_Lots, Bid, 3); // Закрытие текущего Sell
continue; // Переход на новую итерцию
}
if (Tip_Ord==1) // Если это ордер Sell, то..
{
Ord_Lots=NormalizeDouble(OrderLots(),2);// Количество лотов
OrderClose(Ticket, Ord_Lots, Ask, 3); // Закрытие текущего Sell
continue; // Переход на новую итерцию
}
OrderDelete(Ticket); // Если это отложенный ордер, удаляем
}
}
//---------------------------------------------------------------------------------- 7 --
if (Total > 0) // Если есть ордера..
return; // .. уходим
//================================================================================== 8 ==
double StLs = 0.0; // Желаемая цена StopLoss ордера
double TkPr = 0.0; // Желаемая цена TakeProfit ордера
StopLevel = StopLevel*Point; // Минимальная дистаниция в пунктах
//---------------------------------------------------------------------------------- 9 --
if (NormalizeDouble(Day_Opn - Day_Low - 50*Point,Digits) >= 0.0) // Саботало условие
{ // Нужно устанавливать BuyStop
double Opn = Day_Opn + Spread; // Желаемая цена отложенного ордера
if (NormalizeDouble(Opn - Ask - StopLevel*Point,Digits) < 0.0)//Цена не вписывается
Opn = Ask + StopLevel; // Ближайшая возможная цена
if (SL > 0) // Задана ненулевая цена StopLoss ..
StLs = Opn - SL*Point; // .. желаемая цена StopLoss ордера
if (TP > 0) // Задана ненулевая цена TakeProfit ..
TkPr = Opn + TP*Point; // .. желаемая цена TakeProfit ордера
Ticket=OrderSend(Symb,OP_BUYSTOP,Lot,Opn,2,StLs,TkPr);// Установка BuyStop
}
//--------------------------------------------------------------------------------- 10 --
if (NormalizeDouble(Day_High - Day_Opn- 50*Point,Digits) >= 0.0) // Саботало условие
{ // Нужно устанавливать SellStop
Opn = Day_Opn; // Желаемая цена отложенного ордера
if (NormalizeDouble(Bid - StopLevel*Point - Opn,Digits) < 0.0)//Цена не вписывается
Opn = Bid - StopLevel; // Ближайшая возможная цена
if (SL > 0) // Задана ненулевая цена StopLoss ..
StLs = Opn + SL*Point; // .. желаемая цена StopLoss ордера
if (TP > 0) // Задана ненулевая цена TakeProfit ..
TkPr = Opn - TP*Point; // .. желаемая цена TakeProfit ордера
Ticket=OrderSend(Symb,OP_SELLSTOP,Lot,Opn,2,StLs,TkPr);// Установка SellStop
}
//================================================================================= 11 ==
return; // Уходим
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 12 жж