//+------------------------------------------------------------------+ //| LameMarket.mq4 | //| Copyright © 2007, Yury V. Reshetov | //| http://bigforex.biz/load/2-1-0-154 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Yury V. Reshetov http://bigforex.biz/load/2-1-0-154" #property link "http://bigforex.biz/load/2-1-0-154" //---- input parameters extern int x1 = 84; extern int x2 = 69; extern int x3 = 139; extern int x4 = 41; // StopLoss level extern double buysl = 100; extern double sellsl = 65; extern double lots = 2.0; extern double buylots = 1.9; extern int MagicNumber = 888; static int prevtime = 0; static int spread = 3; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (Time[0] == prevtime) return(0); prevtime = Time[0]; //---- if (IsTradeAllowed()) { RefreshRates(); spread = MarketInfo(Symbol(), MODE_SPREAD); } else { prevtime = Time[1]; return(0); } int ticket = -1; // check for opened position int total = OrdersTotal(); for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); // check for symbol & magic number if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { int prevticket = OrderTicket(); // long position is opened if (OrderType() == OP_BUY) { // check profit if (Bid > (OrderStopLoss() + (buysl * 2 + spread) * Point)) { if (perceptron() < 0) { // reverse RefreshRates(); ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sellsl * Point, 0, "LameMarket", MagicNumber, 0, Red); Sleep(30000); if (ticket < 0) { prevtime = Time[1]; } else { while (! OrderCloseBy(ticket, prevticket, Blue)) { if (IsStopped()) return(0); Sleep(30000); } } } else { // trailing stop if (! OrderModify(OrderTicket(), OrderOpenPrice(), Bid - buysl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } // short position is opened } else { // check profit if (Ask < (OrderStopLoss() - (sellsl * 2 + spread) * Point)) { if (perceptron() > 0) { // reverse RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - buysl * Point, 0, "LameMarket", MagicNumber, 0, Blue); Sleep(30000); if (ticket < 0) { prevtime = Time[1]; } else { while (! OrderCloseBy(ticket, prevticket, Red)) { if (IsStopped()) return(0); Sleep(30000); } } } else { // trailing stop if (! OrderModify(OrderTicket(), OrderOpenPrice(), Ask + sellsl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } } // exit return(0); } } // check for long or short position possibility RefreshRates(); if (perceptron() > 0) { //long ticket = OrderSend(Symbol(), OP_BUY, buylots, Ask, 3, Bid - buysl * Point, 0, "LameMarket", MagicNumber, 0, Blue); if (ticket < 0) { Sleep(30000); prevtime = Time[1]; } } else { // short ticket = OrderSend(Symbol(), OP_SELL, lots - buylots, Bid, 3, Ask + sellsl * Point, 0, "LameMarket", MagicNumber, 0, Red); if (ticket < 0) { Sleep(30000); prevtime = Time[1]; } } //--- exit return(0); } //+--- The PERCEPRRON ---+ // a perceiving and recognizing function double perceptron() { double w1 = x1 - 100.0; double w2 = x2 - 100.0; double w3 = x3 - 100.0; double w4 = x4 - 100.0; double a1 = Close[0] - Open[7]; double a2 = Open[7] - Open[14]; double a3 = Open[14] - Open[21]; double a4 = Open[21] - Open[28]; return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); }