//+------------------------------------------------------------------+ //| Robot.mq4 | //+------------------------------------------------------------------+ //-------------------------------------------------------------------+ extern double StopLoss =17; //SL ордера extern double TakeProfit =15; //TP ордера extern double Lots =0.01; //стоимость ордера //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() //Открытие функции int start() { int total=OrdersTotal(); //Определение переменной количества открытых ордеров if(total<1) //Условие: отсутствуют отложенные и открытые ордера { int order1=OrderSend(Symbol(), OP_SELLLIMIT, Lots, Ask+10*Point,3, Ask+(StopLoss+10)*Point, Ask-(TakeProfit-10)*Point); //Открытие ордера order1: SELLLIMIT int order2=OrderSend(Symbol(), OP_BUYLIMIT, Lots, Ask-10*Point,3, Ask-(StopLoss+10)*Point, Ask+(TakeProfit-10)*Point); //Открытие ордера order2: BUYLIMIT //------------------------------------------------------------------- 1 OrderSelect(order1, SELECT_BY_TICKET, MODE_TRADES); //вызывается ордер1 double cena1=OrderOpenPrice(); //Определяется цена открытия ордера1 int order3=OrderSend(Symbol(), OP_BUYSTOP, Lots, cena1+5*Point,3, cena1+(5-StopLoss)*Point, cena1+(5+TakeProfit)*Point); //Открытие ордера order3: BUYSTOP //------------------------------------------------------------------- 2 OrderSelect(order2, SELECT_BY_TICKET, MODE_TRADES); //Вызывается ордер2 double cena2=OrderOpenPrice(); //Определяется цена открытия ордера2 int order4=OrderSend(Symbol(), OP_SELLSTOP, Lots, cena2-5*Point,3, cena2+(StopLoss-5)*Point, cena2-(TakeProfit+5)*Point); //Открытие ордера order4: SELLSTOP return(0); //Прекращение исполнения 1-ой функции } //------------------------------------------------------------------- 3 OrderSelect(order2, SELECT_BY_TICKET, MODE_TRADES); //Вызывается ордер2 double cena3=OrderOpenPrice(); //Определяется цена открытия ордера2 if(Askcena4-5*Point) //Условие: Ask ,больше чем цена открытия ордера1 минус 5 пунктов { OrderModify(order2, cena4-TakeProfit*Point, cena4-(TakeProfit+StopLoss)*Point, cena4, 0); //Модификация ордера2 относительно цены открытия ордера1 return(0); //Прекращение исполнения 3-ей функции } //------------------------------------------------------------------- 5 return(0); //Закрытие функции int start() } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); }