//+------------------------------------------------------------------+ //| Reiner 039 L.T.D .mq4 | //| Copyright © 2010, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property copyright "Copyright © 2011 Reiner L.T.D" int SerialNumber = 110874357; // Серийный номер советника int MagicNumber = 02261128; // Номера работы ордеров (свои) extern double Lots = 0.01; // Обьем лотов extern int TakeProfit = 250; // Расстояние от установленного ордера до его срабатывания extern int TrailingStop = 12; // Расстояние в пунктах для начала автоматической торговли установленного ордера int StopLoss = 9999; // StopLoss(рекомендуется не пользоватся) int Slippage = 3; // Проскальзывание extern int TrailingStep = 35; // Расстояние между устанавливаемыми ордерами extern int Otkat = 10; // Количество открываемых лотов //---- Ind extern int ShortEma = 120; extern int LongEma = 340; extern bool BAY = true; extern bool SELL = true; //---- Sound extern bool UseSound = true; // Включение/выключение звука extern string OpenOrderSound = "news.wav"; // Звук при открытии ордера extern string ModifOrderSound = "message.wav"; // Звук при модификации ордера extern string CloseOrderSound = "payment.wav"; // Звук при закрытии ордера //---- Time Management extern bool UseHourTrade = false; extern double FromHourTrade = 6; extern double ToHourTrade = 21; //---- Money Management extern bool UseMoneyManagement = true; //Use Money Management or not //---- Settings bool Show_Settings = true; bool Summarized = true; int AcNumber,NewAcNumber; bool CorrNumber= true; int OrderCnt; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { AcNumber=AccountNumber(); CorrNumber=AcCode(); if (CorrNumber==true) { ShowCommnt(); Print("Начало работы советника"); } else { Alert("Неправильный серийный номер. Эксперт не работает."); } return(0); } // ------------------------------------------------------------------- bool AcCode() { if (IsDemo()==true||IsTesting()||IsOptimization()) { return(true); } else { int Key=(((AccountNumber()+1051)*3+233)*2)+110200031; if (Key==SerialNumber) return(true); else return(true); } } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { Comment("true"); Print("Окончание работы советника"); return(0); } void ShowCommnt() { if(Show_Settings && Summarized == true) Print_Details(); else if(Show_Settings && Summarized) Print_Details_Summarized(); else Comment(""); } // ------------------------------------------------------------------- int Crossed() { double EmaLongCurrent = iMA(NULL,-25,LongEma, -25,MODE_EMA, PRICE_CLOSE, 1); double EmaShortCurrent = iMA(NULL,-25,ShortEma,-25,MODE_EMA, PRICE_CLOSE, 0); if (EmaShortCurrent>EmaLongCurrent)return (0); if (EmaLongCurrenttotal) { OrderCnt=total; ShowCommnt(); if (UseSound) PlaySound(CloseOrderSound); } OrderCnt=total; if(total < Otkat) { if(UseMoneyManagement==true) Lots = LotSize(); if (Lots>0) { // Print("Проверка возможности нового лота : "); if(isCrossed == 0) { if (BAY==true) { if (EnableAddOrder(total,OP_BUY)==true) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MagicNumber,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Открыт ордер BAY : ",OrderOpenPrice()); OrderCnt=OrderCount(); ShowCommnt(); if (UseSound) PlaySound(OpenOrderSound); } else Print("Ошибка поиска открытого ордера BAY : ",GetLastError()); } else Print("Ошибка при открытии ордера BUY : ",GetLastError()); return(0); } } } if(isCrossed == 0) { if (SELL==true) { if (EnableAddOrder(total,OP_SELL)==true) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MagicNumber,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Открыт ордер SELL : ",OrderOpenPrice()); OrderCnt=OrderCount(); ShowCommnt(); if (UseSound) PlaySound(OpenOrderSound); } else Print("Ошибка поиска открытого ордера SELL : ",GetLastError()); } else Print("Ошибка при открытии ордера SELL : ",GetLastError()); return(0); } } } } } // ------------------------------------------------------------------- int ttl = OrdersTotal(); for(cnt=0;cnt0) { if (OrderOpenPrice()-Ask>=(TrailingStop)*Point) { if (OrderStopLoss()>(Bid+Point+Point*TrailingStop)) { if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*TrailingStop,OrderTakeProfit(),0,Purple)) { if (UseSound) PlaySound(ModifOrderSound); } } } } } if (OrderType()==OP_BUY) { if (TrailingStop>0) { if (Bid-OrderOpenPrice()>=(TrailingStop)*Point) if (OrderStopLoss()<(Ask-Point-Point*TrailingStop)) { if (OrderModify(OrderTicket(),0,Ask-Point*TrailingStop,OrderTakeProfit(),0,Yellow)) { if (UseSound) PlaySound(ModifOrderSound); } } } } } } } } } } // return(0); // -------------------------------------------------------------------