//+------------------------------------------------------------------+ //| ïðîáîé-òðàë.mq4 | //| | //+------------------------------------------------------------------+ extern double Lots =0.1; extern int LiveOrders =110; // Âðåìÿ æèçíè îðäåðà â ìèíóòàõ extern int distanceGTS=20; extern int StopLossGTS=40; extern int TakeProfit=90; extern int HL=25; extern int N=6; extern int TrailingStop=40; extern int TrailingStep=10; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (!IsTradeAllowed()) return; if (OpenTotal()>0) { DeletePending (); TrailingStop();} if (OrdersTotal()==0) { double ho=High[1]; double lo=Low[1]; for (int i=N; i>=1; i--) {if (High[i]>ho) ho=High[i]; if (Low[i]<lo) lo=Low[i]; } if ( ho-lo<HL*Point) { OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+distanceGTS*Point,3, Ask+distanceGTS*Point-StopLossGTS*Point, Ask+distanceGTS*Point+TakeProfit*Point,0,0,CurTime()+LiveOrders*60,Red); Sleep(10000); OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-distanceGTS*Point,3, Bid-distanceGTS*Point+StopLossGTS*Point, Bid-distanceGTS*Point-TakeProfit*Point,0,0,CurTime()+LiveOrders*60,Aqua); } } //---- return(0); } //+------------------------------------------------------------------+ void TrailingStop() { double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { pBid=MarketInfo(OrderSymbol(), MODE_BID); if (pBid-OrderOpenPrice()>TrailingStop*pp) { if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep)*pp) { OrderModify(OrderTicket(),OrderOpenPrice(), (pBid-TrailingStop*pp),OrderTakeProfit(),0,Lime); return; } } } if (OrderType()==OP_SELL) { pAsk=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pAsk>TrailingStop*pp) { if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep)*pp || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(), (pAsk+TrailingStop*pp),OrderTakeProfit(),0,Lime); return; } } } } //+------------------------------------------------------------------+ int OpenTotal() { int count=0; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_SELL || OrderType()==OP_BUY) count++; } return (count); } //+------------------------------------------------------------------+ void DeletePending () { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket()); if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); } } //END
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
Other Features: