deepdig
Активный участник
Помогите пожалуйста разобраться! Никак не получается добиться от советника октрытия второго цикла отложенных ордеров.
PHP:
extern double lot1 = 0.1; //рабочий лот
extern double lot2 = 0.1; //лот 1-го отложенного ордера
extern double lot3 = 0.1; //лот 2-го отложенного ордера
extern double lot4 = 0.1; //лот 3-го отложенного ордера
extern double lot5 = 0.1; //лот 4-го отложенного ордера
extern int Stop_Loss = 30; //стоп лосс
extern int Take_Profit = 30; //тейк профит
extern int Open_Level = 10; //уровень отдаления от цены, на котором ставим отложенный ордер
extern int slippage = 2; //уровень допустимого реквота
extern int MagicNumber = 0; //магическое число ордеров
int tiсket1=0, ticket2=0, ticket3=0, ticket4=0, ticket5=0;
int init()
{
Comment("Старт советника ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
return(0);
}
int start()
{
double SLbuy=0, SLsell=0,TPbuy=0,TPsell=0;
double Spread=Ask-Bid;
double Pending_By=Ask+Open_Level*Point;
double Pending_Sell=Bid-Open_Level*Point;
if(Stop_Loss>0) {SLbuy=Ask-Stop_Loss*Point-Spread; SLsell=Bid+Stop_Loss*Point+Spread;}
if(Take_Profit>0) {TPbuy=Ask+Take_Profit*Point; TPsell=Bid-Take_Profit*Point;}
int count=OrdersTotal(); // объявление переменной колличества ордеров
//-------------------------Старт цикла. Открытие 1-го и 2-го отрдеров ------------
if(count==0) tiсket1=OrderSend (Symbol(), OP_SELL, lot1, Bid, slippage,
SLsell, TPsell, "LLL_1_Sell", MagicNumber, 0, Red);
if(count==0) ticket2=OrderSend (Symbol(), OP_BUYSTOP, lot2, Pending_By, slippage,
SLbuy+Open_Level*Point, TPbuy+Open_Level*Point, "LLL_1_Bystop", MagicNumber, 0, Blue);
//-------------------------удаление несработавших отложенных ордеров----------------------
for(int i=0; i<count; i++) // цикл пересчета открытых ордеров
{
bool res=OrderSelect(i, SELECT_BY_POS); // выбор ордера по позиции
if (res)
{
int ticket=OrderTicket();
if (count==1) OrderDelete(ticket); // удаление несработавших отложенных ордеров
}
}
//---------------------------открытие 2-го отложенного ордера------------------------------
bool res1=OrderSelect(ticket2, SELECT_BY_TICKET); // выбор 1-го отложенного ордера
if (res1)
{
int type=OrderType(); // проверка состояния 1-го отложенного ордера
if (type==0&&ticket3==0) ticket3=OrderSend (Symbol(), OP_SELLSTOP, lot3,
Pending_Sell+Spread, slippage, SLsell-Open_Level*Point, TPsell-Open_Level*Point, "LLL_1_Selltop", MagicNumber, 0, Yellow);
//открытие 2-го отложенного ордера
}
//---------------------------открытие 3-го отложенного ордера------------------------------
bool res2=OrderSelect(ticket3, SELECT_BY_TICKET); // выбор 2-го отложенного ордера
if (res2)
{
int type2=OrderType(); // проверка состояния 2-го отложенного ордера
if(type2==1&&ticket4==0) ticket4=OrderSend (Symbol(), OP_BUYSTOP, lot4, Pending_By-Spread, slippage,
SLbuy+Open_Level*Point-Spread, TPbuy+Open_Level*Point-Spread, "LLL_2_Bystop", MagicNumber, 0, Green);
//открытие 3-го отложенного ордера
}
//---------------------------открытие 4-го отложенного ордера------------------------------
bool res3=OrderSelect(ticket4, SELECT_BY_TICKET); // выбор 3-го отложенного ордера
if (res3)
{
int type3=OrderType(); // проверка состояния 3-го отложенного ордера
if (type3==0&&ticket5==0) ticket5=OrderSend (Symbol(), OP_SELLSTOP, lot5,
Pending_Sell+Spread, slippage, SLsell-Open_Level*Point, TPsell-Open_Level*Point, "LLL_2_Selltop", MagicNumber, 0, White);
//открытие 4-го отложенного ордера
}
return(0);
}
Последнее редактирование модератором: