//+------------------------------------------------------------------+ //| 50 peHta6 tynnel MA medFIN.mq4.mq4 | //| Copyright © 2009, costy_ | //| jena@deneg.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, costy_" #property link "jena@deneg.net" #define STUPID 0x60BE45 extern string Lots_Desc = "Если 0 применяется динамический лот"; extern double Lots = 1; extern string RiskPercentage_Desc = "Настройка для динамического лота -- % риска. Если 0 используется минимальный доступный размер лота, если Lots > 0 эта настройка игнорируется"; extern int RiskPercentage = 0; extern int Slippage = 25; extern string Target_Desc = "Тейк профит, если 0 профит не выставляется 90-200"; extern int Target = 0 ; extern string Loss_Desc = "Стоп лосс, если 0 лосс не выставляется 30-80"; extern int Loss = 0; extern string MA_DESC = "Периоды МА "; extern int F55 = 55; extern int shift = 13; extern int METHOD_MA=1; extern int timeframe =0; extern string Торгуемый_диапазон = "В часах(но -1час т.к. ma shift 1)"; extern int окончание=20; extern int начало=8; extern string MaxOrders_Desc = "если 0 количество одновременно открытых позиций не ограничивается 1-3"; extern int MaxOrders = 1; double LotsToBid; string symbol; bool была_покупка?; bool была_продажа?; //--------------------------- int k=1; // импортируем библиотеку функций для различных видов трейлинга // пример вызова функций - см. ближе к концу кода #import "TrailingAll.ex4" void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss); void TrailingByFractals(int ticket,int tmfrm,int frktl_bars,int indent,bool trlinloss); void TrailingStairs(int ticket,int trldistance,int trlstep); void TrailingUdavka(int ticket,int trl_dist_1,int level_1,int trl_dist_2,int level_2,int trl_dist_3); void TrailingByTime(int ticket,int interval,int trlstep,bool trlinloss); void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss); void TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,int pf_level_3,int ls_level_1,int ls_level_2,int ls_level_3,bool trlinloss); void TrailingByPriceChannel(int iTicket,int iBars_n,int iIndent); void TrailingByMA(int iTicket,int iTmFrme,int iMAPeriod,int iMAShift,int MAMethod,int iApplPrice,int iShift,int iIndent); void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool bTrlinloss); void KillLoss(int iTicket,double dSpeedCoeff); #import //-------------------------------------------------------------- // закрытие покупок void CloseBuys(int MagicNumber, int Slippage) { for(int i = 0; i < OrdersTotal(); i++) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == OP_BUY) { if(OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue)) { i--; } RefreshRates(); } } } //----------------------------------------------------- // закрытие продаж void CloseSells(int MagicNumber, int Slippage) { for(int i = 0; i < OrdersTotal(); i++) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == OP_SELL) { if (OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red)) { i--; } RefreshRates(); } } } //---------------------------------------------------- // подсчет кол-ва открытых позиций int GetOrdersCount(int MagicNumber, int Type) { int count = 0; for(int i = 0; i < OrdersTotal(); i++) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == Type) { count++; } } return (count); } //------------------------------------------------------- // Вычисление динамического лота double GetLotsToBid(int RiskPercentage) { double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED); double minLot = MarketInfo(Symbol(), MODE_MINLOT); double maxLot = MarketInfo(Symbol(), MODE_MAXLOT); double step = MarketInfo(Symbol(), MODE_LOTSTEP); double account = AccountFreeMargin(); double percentage = account*RiskPercentage/100; double lots = MathRound(percentage/margin/step)*step; if(lots < minLot) { lots = minLot; } if(lots > maxLot) { lots = maxLot; } return (lots); } //---------------------------------------------------- // покупка void OpenBuy() { double TP = 0; if (Target > 0) { TP = Bid + Target*Point; } double SL = 0; if (Loss > 0) { SL = Bid - Loss*Point; } if (Lots == 0) LotsToBid = GetLotsToBid(RiskPercentage); OrderSend(Symbol(), OP_BUY, LotsToBid, Ask, Slippage, SL, TP, NULL, STUPID, 0, Blue); } //---------------------------------------------------- // продажа void OpenSell() { double TP = 0; if (Target > 0) { TP = Ask - Target*Point; } double SL = 0; if (Loss > 0) { SL = Ask + Loss*Point; } if (Lots == 0) LotsToBid = GetLotsToBid(RiskPercentage); OrderSend(Symbol(), OP_SELL, LotsToBid, Bid, Slippage, SL, TP, NULL, STUPID, 0, Red); } //------------------------------------------------------ // проверка условий торговли и управление позициями void Check() { int X=1*k; int Y=13*k; //-------------------------------------------------------------- double ma1 = iMA(symbol, timeframe, F55, 0, METHOD_MA, PRICE_MEDIAN, shift); double ma0 = iMA(symbol, timeframe, F55, 0, METHOD_MA, PRICE_MEDIAN, 1); if(Hour()<окончание&&Hour()>начало){ if(ma0>ma1&&была_покупка?<1 ){CheckBuy();была_покупка?=2;была_продажа?=0; } //цена находится ВЫШЕ канала buy if(ma0 0) { CloseSells(STUPID, Slippage); } if (GetOrdersCount(STUPID, OP_BUY) < MaxOrders || MaxOrders == 0) { OpenBuy(); }} void CheckSell() { if (GetOrdersCount(STUPID, OP_BUY) > 0) { CloseBuys(STUPID, Slippage); } if (GetOrdersCount(STUPID, OP_SELL) < MaxOrders || MaxOrders == 0) { OpenSell(); }} //-------------------------------------------------------------- //-------------------------------------------------------------- int init() { LotsToBid = Lots; symbol = Symbol(); } //-------------------------------------------------------------- int start() { PrintComments(); // Check for open new orders and close current ones Check(); for (int i=0;i