//+------------------------------------------------------------------+ //| Simple Levels | //| Copyright 2015, Vladimir V. Tkach | //+------------------------------------------------------------------+ #property version "1.0" #property copyright "Copyright © 2015, Vladimir V. Tkach" #property description "Expert opens trades from the trend lines and" #property description "trail its stop loss." #property strict //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum on_off_mode { on=0, off=1, }; extern int sl=300, //Stop Loss (in pips) tp=900, //Take Profit (in pips) slip=30, //Slippage (in pips) magic=120; //Magic number extern double lot=0.01; //Lot size input on_off_mode trail_sl=0; //Trail stop loss double price, LinePrice[20][2]; int LineTime[20][2]; //+------------------------------------------------------------------+ //|Initialisation function | //+------------------------------------------------------------------+ void init() { return; } //+------------------------------------------------------------------+ //|Deinitialisation function | //+------------------------------------------------------------------+ void deinit() { return; } //+------------------------------------------------------------------+ //|Trading function | //+------------------------------------------------------------------+ void start() { ProcessingLines(); //Trail stop loss Comment(OrderExist()," ",EnumToString(trail_sl)," ",OrderStopLoss()); if(OrderExist()!=-1 && EnumToString(trail_sl)=="on" && OrderStopLoss()!=0) { if(OrderType()==OP_BUY) { if(OrderStopLoss()Ask+sl*Point && OrderStopLoss()>Ask+sl*Point+slip*Point) if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+sl*Point,OrderTakeProfit(),0)==false) return; } } //Trading conditions if(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*lot>AccountEquity() || OrderExist()!=-1) return; //Check for signal (crossing any level) for(int i=0; iLevelPrice(i,TimeCurrent())) { if(ObjectGet("Arrow_up"+DoubleToStr(i,0),OBJPROP_COLOR)) {price=Ask; return(0);} if(ObjectGet("Arrow_flat"+DoubleToStr(i,0),OBJPROP_COLOR)) {price=Bid; return(1);} } if((Bid>LevelPrice(i,TimeCurrent()) || Ask>LevelPrice(i,TimeCurrent())) && iOpen(Symbol(),Period(),0)LineTime[l][1]) { ObjectSet("Trendline"+DoubleToStr(l,0),OBJPROP_PRICE2,LinePrice[l][0]); ObjectSet("Trendline"+DoubleToStr(l,0),OBJPROP_TIME2,LineTime[l][0]+(LineTime[l][0]-LineTime[l][1])); LineTime[l][0]=(int)ObjectGet("Trendline"+DoubleToStr(l,0),OBJPROP_TIME1); LinePrice[l][0]=ObjectGet("Trendline"+DoubleToStr(l,0),OBJPROP_PRICE1); LineTime[l][1]=(int)ObjectGet("Trendline"+DoubleToStr(l,0),OBJPROP_TIME2); LinePrice[l][1]=ObjectGet("Trendline"+DoubleToStr(l,0),OBJPROP_PRICE2); } //Set level's color if(LinePrice[l][0]==LinePrice[l][1]) ObjectSet("Trendline"+DoubleToStr(l,0),OBJPROP_COLOR,(Orange)); else if(LinePrice[l][0]>LinePrice[l][1]) ObjectSet("Trendline"+DoubleToStr(l,0),OBJPROP_COLOR,(OrangeRed)); else ObjectSet("Trendline"+DoubleToStr(l,0),OBJPROP_COLOR,(Teal)); return; } //+------------------------------------------------------------------+ //|Set arrows for the new line | //+------------------------------------------------------------------+ void PlaceArrows(int i) { ObjectDelete("Arrow_up"+DoubleToStr(i,0)); ObjectDelete("Arrow_down"+DoubleToStr(i,0)); ObjectDelete("Arrow_flat"+DoubleToStr(i,0)); ObjectCreate("Arrow_up"+DoubleToStr(i,0),OBJ_ARROW,0,LineTime[i][0]-Period()*300,LinePrice[i][0]); ObjectSet("Arrow_up"+DoubleToStr(i,0),OBJPROP_ARROWCODE,241); ObjectSet("Arrow_up"+DoubleToStr(i,0),OBJPROP_COLOR,Blue); ObjectCreate("Arrow_down"+DoubleToStr(i,0),OBJ_ARROW,0,LineTime[i][0]-Period()*300*2,LinePrice[i][0]); ObjectSet("Arrow_down"+DoubleToStr(i,0),OBJPROP_ARROWCODE,242); ObjectSet("Arrow_down"+DoubleToStr(i,0),OBJPROP_COLOR,Red); ObjectCreate("Arrow_flat"+DoubleToStr(i,0),OBJ_ARROW,0,LineTime[i][0]-Period()*300*3,LinePrice[i][0]); ObjectSet("Arrow_flat"+DoubleToStr(i,0),OBJPROP_ARROWCODE,244); ObjectSet("Arrow_flat"+DoubleToStr(i,0),OBJPROP_COLOR,Green); return; } //+------------------------------------------------------------------+