mql4. Помогите написать условие Новый комментарий Anna Furmanova 2016.02.13 11:17 Помогите написать правильно условие. Нужно чтобы сделки открывались за каналом, а не внутри и по пересечению ма.//+------------------------------------------------------------------+ //| 22222.mq4 | //| Mr. Gold | //| anna.furmanova@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Mr. Gold" #property link "anna.furmanova@yandex.ru" #property version "1.00" #property strict #define magic 888 extern string Indic1 = " Параметры ExtremeTMALine "; extern string TimeFrame = "Current"; extern int TMAPeriod = 56; extern int Price_TMA = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern double TrendThreshold = 0.5; extern bool ShowCenterLine = false; extern string Indic2 = " Параметры HMA "; extern int period = 15; extern int method = 3; extern int price_MA = 0; extern string Parametr = " Параметры советника "; extern double Lot = 0.01; extern int Magic = 888; extern bool Clock = true; extern int TestingMode = 1; static int PreBars=0; static int DT=0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string CurDay() { string CurDay; switch(DayOfWeek()) { case 0: CurDay = "Вс";break; case 1: CurDay = "Пн";break; case 2: CurDay = "Вт";break; case 3: CurDay = "Ср";break; case 4: CurDay = "Чт";break; case 5: CurDay = "Пт";break; case 6: CurDay = "Сб";break; } return(CurDay); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { RefreshRates(); // определяем наличие достаточных средств на депозите if(AccountFreeMargin()<(1000*Lot)) { Print("Денег нет. Свободная Маржа = ", AccountFreeMargin()); Alert("Денег нет. Свободная Маржа = ", AccountFreeMargin()); } int i,tiket; if(TestingMode>0) { if(TestingMode==1) { if(Bars == PreBars) return(0); else PreBars=Bars; } else { if(Bars!=PreBars) { DT=0; PreBars=Bars; } if(TimeCurrent() < Time[0]+DT) return(0); else DT=DT+Period()*60/TestingMode; } } if(Clock) ObjectSetText("Clock",TimeToStr(TimeCurrent(),TIME_MINUTES)+", "+CurDay(),20,"Tahoma",Maroon); // можно менять на ходу if(GlobalVariableCheck("g_TestingMode")==true) TestingMode=GlobalVariableGet("g_TestingMode"); // ИНДИКАТОРЫ double Val_1=iCustom(Symbol(),0,"ExtremeTMALine",TimeFrame,TMAPeriod,Price_TMA,ATRMultiplier,ATRPeriod,TrendThreshold,ShowCenterLine,1,0); double Val_2=iCustom(Symbol(),0,"ExtremeTMALine",TimeFrame,TMAPeriod,Price_TMA,ATRMultiplier,ATRPeriod,TrendThreshold,ShowCenterLine,2,0); double MA_0=iCustom(Symbol(),0,"HMA",period,method,price_MA,0,0); double MA_1=iCustom(Symbol(),0,"HMA",period,method,price_MA,1,0); //BUY===================================== bool Open_BUY=(Val_2>Ask && MA_0>=MA_1); bool Close_BUY=(Val_1<Bid && MA_1<=MA_0); bool Open_SELL=(Val_1<Bid && MA_1<=MA_0); bool Close_SELL=(Val_2>Ask && MA_0>=MA_1); bool CheckCanal=(Val_1>=Bid) && (Bid>=Val_2); // Истина - если цена внутри канала if (CheckCanal==false) { if(Open_BUY && !Close_BUY) { tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),3,0,0,"",Magic,0,clrNONE); if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError());} PlaySound("alert.wav"); }} if(Close_BUY) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { tiket=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,Violet); PlaySound("ok.wav"); } } } } } //SELL================================ if(Open_SELL && !Close_SELL) { tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),3,0,0,"",Magic,0,clrNONE); if(tiket<0) { Print("Ошибка при выборе ордера SELL #",GetLastError());} PlaySound("alert.wav"); } if(Close_SELL) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL) { tiket=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,Violet); PlaySound("ok.wav"); } } } } } return(0); } //+------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Возвращает количество позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sym="",int op=-1,int mn=-1) { int i,k=OrdersTotal(),kp=0; if(sym=="") sym=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==sym) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(op<0 || OrderType()==op) { if(mn<0 || OrderMagicNumber()==mn) kp++; } } } } } return(kp); } //+------------------------------------------------------------------+ MQL4. Уровень и МА MQL4. Нет ордера на продажу Дополнительные сделки Dmitiry Ananiev 2016.02.13 13:14 #1 Бесплатно вряд ли кто-то будет. А долларов за 10 может и я возьмусь через Фриланс. Новый комментарий
Помогите написать правильно условие. Нужно чтобы сделки открывались за каналом, а не внутри и по пересечению ма.