//+------------------------------------------------------------------+ //| IN GOD WE TRUST.mq4 | //| Copyright © 2010, IN GOD WE TRUST | //| IN GOD WE TRUST | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, IN GOD WE TRUST" /*-------------------------------------------------------------------- v1.4 /*-------------------------------------------------------------------- //--------------------------------------------------------------------v1.8 *///-------------------------------------------------------------------- extern int Period_MA = 2000, Dev = 2, MetodMA = 2, //MODE_SMA 0 Простое скользящее среднее //MODE_EMA 1 Экспоненциальное скользящее среднее //MODE_SMMA 2 Сглаженное скользящее среднее //MODE_LWMA 3 Линейно-взвешенное скользящее среднее TipPice = 6, //PRICE_CLOSE 0 Цена закрытия //PRICE_OPEN 1 Цена открытия //PRICE_HIGH 2 Максимальная цена //PRICE_LOW 3 Минимальная цена //PRICE_MEDIAN 4 Средняя цена, (high+low)/2 //PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3 //PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4 No_Loss = 7, //перевод в безубыток TrailingStop = 12, //тралл Shift = 0, //сдвиг Profit = 0, //Профит для закрытия ордера N_Orders = 1, //кол-во одновременно открытых ордеров в одном направлении N_Orders_Bar = 1, //количество сделок = от 0, приходящихся на 1 бар DeltaStart = 3, slippage = 0, stoploss = 0, //уровень SL, если 0, то не выставляется takeprofit = 0; //уровень TP, если 0, то не выставляется extern double Lot = 0.1; extern int Magic = 777; //уникальный номер ордеров этого советника extern bool DrawVisualization = true; //выводить или нет на экран информацию extern bool BuySell = true; //при появлении любого сигнала buy или Sell, ставим оба ордера и Buy и Sell extern bool Buy = true; //вверх от болинжера ставим только buy extern bool Sell = true; //вниз от болинжера ставим только Sell datetime TimeBar; int OrdersBar; //-------------------------------------------------------------------- int init() { if (DrawVisualization){ ObjectCreate("balans", OBJ_LABEL, 0, 0, 0); ObjectSet("balans", OBJPROP_CORNER, 1); ObjectSet("balans", OBJPROP_XDISTANCE, 10 ); ObjectSet("balans", OBJPROP_YDISTANCE, 15);} return(0); } //-------------------------------------------------------------------- int start() { if (TrailingStop!=0) TrailingStop(0,TrailingStop); if (No_Loss!=0) TrailingStop(1,No_Loss); string Name; //----------------------------------------------------------------------- if (DrawVisualization){ //Выводим значение баланса и свободных средств на экран ObjectSetText("balans","БАЛАНС = "+DoubleToStr(AccountBalance(),2)+ " |своб "+DoubleToStr(AccountFreeMargin(),2),8,"Arial",Snow);} //----------------------------------------------------------------- дневной фильтр double MA = iMA(NULL,0,Period_MA,0,MetodMA,TipPice,Shift); double StdDev = iStdDev(NULL,0,Period_MA,0,MetodMA,TipPice,Shift)*Dev; //----------------------------------------------------------------- открытие позиций Bay if (TimeBar!=Time[0]) OrdersBar=0; if (N_Orders_Bar > OrdersBar) { if ((MA-StdDev-DeltaStart*Point)>Ask)//ниже болинжера { if (!Sell && ORDERS(1) < N_Orders) { if (DrawVisualization) { Name=StringConcatenate("Buy ",TimeToStr(Time[0],TIME_MINUTES)); ObjectCreate(Name,OBJ_ARROW,0,Time[0],Bid,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2); ObjectSet(Name,OBJPROP_ARROWCODE,233);ObjectSet(Name,OBJPROP_COLOR,Red); } OPENORDER("Buy"); } if (BuySell && ORDERS(-1) < N_Orders) { if (DrawVisualization) { Name=StringConcatenate("Sell ",TimeToStr(Time[0],TIME_MINUTES)); ObjectCreate(Name,OBJ_ARROW,0,Time[0],Ask,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2); ObjectSet(Name,OBJPROP_ARROWCODE,234);ObjectSet(Name,OBJPROP_COLOR,Blue); } OPENORDER ("Sell"); } } //----------------------------------------------------------------- открытие позиций Sell if ((MA+StdDev+DeltaStart*Point)=Profit) { Comment("Закрытие ордера ",Ticket," ",Symbol()); if (!OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid, Digits),slippage,CLR_NONE)) Comment("Ошибка закрытия ",TxtERROR(0)," ",Symbol()); } } if (OrderType()==OP_SELL) { if ((OrderOpenPrice()-Ask)/Point>=Profit) { Comment("Закрытие ордера ",Ticket," ",Symbol()); if (!OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask, Digits),slippage,CLR_NONE)) Comment("Ошибка закрытия ",TxtERROR(0)," ",Symbol()); } } } } return(0); } //-------------------------------------------------------------------- void OPENORDER(string ord) { int error; double SL,TP; int STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL); if (stoploss!=0 && stoplossOOP) continue; StLo = NormalizeDouble(Bid - tral*Point,Digits); if (StLo > OSL && StLo > OOP) { error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White); Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES)); Sleep(500); if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError()); } } if (tip==OP_SELL) { if (NL==1 && (OSL