//+------------------------------------------------------------------+ //| ****.mq4 | //| BARS | //| www.*********.ru | //+------------------------------------------------------------------+ #property copyright "BARS-Alligator" #property link "****" // Эксперт работает по "Ценам открытия". // Экперт способен работать при открытии позиций в условиях рыночного // исполнения торговых заявок Market Watch , - WHС, BROCO и т.п. // Добавлен встроенный блок ММ (корректно работает только на валютах). // Предусмотрен запрет одноименных сделок на одном баре более одной - // - применена ф-я И.Кима NumberOfBarOpenLastPos(). // Эксперт адаптирован под условия Чемпионата Роботов 2008 по // количеству ордеров и лотов. //---- input parameters extern int Magic=94754; extern int Magic1=95454; extern int Magic2=45764; extern int Magic3=567567; extern int Orders =1; extern int StopLoss=2816; extern int TakeProfit=5676; extern int StopLoss2=5735; extern int TakeProfit2=3549; extern string ___= "Параметры инд. Аллигатор"; extern string ____= "Параметры Трейлинг стопа"; extern bool UseTrailing = true;//выключатель трейлинга extern int lMinProfit = 1811;//порог трала длинных поз extern int lTrailingStop = 3037;//размер трала длинных поз extern int lTrailingStep = 5;// шаг трала extern int sMinProfit = 4279;//порог трала коротких поз extern int sTrailingStop = 2520;//размер трала коротких поз extern int sTrailingStep = 5; //шаг трала extern string ______= "Параметры блока MoneyManagement"; extern double Lots = 0.01; extern double Lots2 = 0.01; extern double T1 = 0.0016; extern double T2 = 0.0014; extern double T3 = 650; extern double T33 = 140; extern double X = 260; extern double X1 = 540; extern double T333 = 0.0051; extern double T3333 = 0.0082; extern double X2 = 131; extern double X22 = 650; extern double T4 = 0.0002; extern double T5 = 0.0004; extern double A = 100; extern double B = 100; extern double C = 100; extern double D = 100; extern bool MoneyManagement=true; extern int MarginPercent=3; extern double Limit_Lot1 = 0.01; extern double Limit_Lot2 = 0.01; extern int Limit_Dist1 = 100; extern int Limit_Dist2 = 100; //---------------------------------- int ticket; int ticket1, S=0; double lots; static int prevtime = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (Time[0] == prevtime) return(0); // Бар прежний, а следовательно выходим prevtime = Time[0]; // Свежий бар, запоминаем время //---- if (UseTrailing) TrailPositions(); //трейлинг стоп // Объявляем переменные int total, cnt; double MA1,MA2; // double lots; // Вычисляем начальные параметры индикаторов для поиска условий входа MA1 = iMA(NULL,0,T3,0,MODE_SMMA,PRICE_MEDIAN,0); // зелёная MA2 = iMA(NULL,0,T33,0,MODE_SMMA,PRICE_MEDIAN,0); total=OrdersTotal(); //Comment( LotsCounting() ); //======================================================================= //============Открытие позиций ======================================= if ( NumberOfPositions(NULL , -1, Magic )MA2)&&(iATR(NULL,0,X2,0)= 0; v -- ) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { //-------------------------------------------------------- if (OrderType() == OP_SELL) { if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(S>=1)) { ticket1=OrderSend(Symbol(),OP_SELL,0.01,Bid,5 ,0 ,0 ,"Limit",Magic2, 0 , Yellow); ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*4*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*8*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*12*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*14*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); S=0; // return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_BUY) { if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(S>=1)) { ticket1=OrderSend(Symbol(),OP_BUY,0.01,Ask,5 ,0 ,0 ,"Limit",Magic2, 0, Yellow); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*5*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*15*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*20*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*25*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*30*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua ); S=0; // return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total //================== Конец блока закрытия ============================= //---------------------------------------------------------------------- for ( int i = OrdersTotal() - 1; i >= 0; i -- ) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic2) { if (OrderType() == OP_SELL) { if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(OrderProfit( ) >=0)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // закрываем позицию Close_All_Order(Magic3, Symbol()); S=1; // return(0); // выходим // return(0); // выходим }} if (OrderType() == OP_BUY) { if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(OrderProfit( ) >=0)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); // закрываем позицию Close_All_Order(Magic3, Symbol()); S=1; // return(0); // выходим }} }}} //================== Конец блока закрытия ============================= return(0); } //ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ //---- Закрытие ордера по типу и комментарию ----// void Close_All_Order( int mn, string sym) { for(int i= OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if( sym==OrderSymbol() && OrderMagicNumber() == mn ) if(OrderType()<=1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3); else OrderDelete(OrderTicket()); } } int Orders_Total_by_comm(string comm, int mn, string sym) { int num_orders=0; for(int i= OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if( OrderMagicNumber() == mn && sym==OrderSymbol()) { if( StringFind( OrderComment(), comm) >= 0 ) num_orders++; } } return(num_orders); } double LotsCounting() { return(Lots); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void TrailPositions() {// функция трейлинг стоп int Orders = OrdersTotal(); for (int i=0; i lMinProfit*Point) { if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}} if (OrderType() == OP_SELL && OrderMagicNumber()==Magic) { if (OrderOpenPrice()-Ask > sMinProfit*Point) { if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}}} } //------------------------------------------------------------------------------+ //ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; if (sy=="0") sy=Symbol(); for (i=0; i