arttrader_v1_5

Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites

Profitability Reports

GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 2
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 25.00
Gross Profit 50.00
Gross Loss 0.00
Total Net Profit 50.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
11.00 %
Total Trades 11
Won Trades 2
Lost trades 9
Win Rate 0.18 %
Expected payoff -36.36
Gross Profit 50.00
Gross Loss -450.00
Total Net Profit -400.00
-100%
-50%
0%
50%
100%
arttrader_v1_5
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//
// Arthur Matteson's Trading Machine, version 1.5
// EA written in MQL4 for MetaTrader4 on 9/13/2006
// Meant for EUR/USD on the hourly timeframe (H1)
//

//
// These parameters give a 43.5% profit on "Every tick" for EUR/USD
//  from 7/13/2006 to 9/12/2006 (MT4 release 197, H1 timeframe):
//
//#define NUM_LOTS 1.0
//#define EMA_SPEED 11.0
//#define BIG_JUMP 30.0
//#define DOUBLE_JUMP 55.0
//#define STOP_LOSS 20.0
//#define EMERGENCY_LOSS 50.0
//#define TAKE_PROFIT 25.0
//#define SLOPE_SMALL 5.0
//#define SLOPE_LARGE 8.0
//#define MINUTES_BEGIN 25.0
//#define MINUTES_END 25.0
//#define SLIP_BEGIN 0.0
//#define SLIP_END 0.0
//#define MIN_VOLUME 0.0
//#define SLIPPAGE 3.0
//#define ADJUST 1.0
//


// Variables that can be changed outside the program code, even optimized
extern double NUM_LOTS=1.0;        // How many lots to deal with (may be less than one)
extern double EMA_SPEED=11.0;      // The period for the averager
extern double BIG_JUMP=30.0;       // Check for too-big candlesticks (avoid them)
extern double DOUBLE_JUMP=55.0;    // Check for pairs of big candlesticks
extern double STOP_LOSS=20.0;      // A smart stop-loss
extern double EMERGENCY_LOSS=50.0; // The trade's stop loss in case of program error
extern double TAKE_PROFIT=25.0;    // The trade's take profit
extern double SLOPE_SMALL=5.0;     // The minimum EMA slope to enter a trade
extern double SLOPE_LARGE=8.0;     // The maximum EMA slope to enter a trade
extern double MINUTES_BEGIN=25.0;  // Wait this long to determine candlestick lows/highs
extern double MINUTES_END=25.0;    // Wait this long to determine candlestick lows/highs
extern double SLIP_BEGIN=0.0;      // An allowance between the close and low/high price
extern double SLIP_END=0.0;        // An allowance between the close and low/high price
extern double MIN_VOLUME=0.0;      // If the previous volume is not above this, exit the trade
extern double SLIPPAGE=3.0;        // This is for the OrderSend command
extern double ADJUST=1.0;          // A strange but functional imaginary spread adjustment


int start()
{
  int i, ticket;
  double ema_old, ema_new, ema_slope;
  double begin_buy_chance, begin_sell_chance;
  double end_buy_chance, end_sell_chance;
  static double open_price;

  begin_buy_chance=0; begin_sell_chance=0;
  end_buy_chance=0; end_sell_chance=0; ticket=0;

  // Find the existing order, if there is one
  if(OrdersTotal()>0) {
    if(OrderType()==OP_BUY) {
      // If ticket=+1, this means a long order is in progress
      ticket=1;
    }
    if(OrderType()==OP_SELL) {
      // If ticket=-1, this means a short order is in progress
      ticket=-1;
    }
  }

  // Find the exponentially-weighted average, and its derivative
  ema_old=iMA(NULL, PERIOD_H1, EMA_SPEED, 0, MODE_EMA, PRICE_OPEN, 1);
  ema_new=iMA(NULL, PERIOD_H1, EMA_SPEED, 0, MODE_EMA, PRICE_OPEN, 0);
  ema_slope=(ema_new-ema_old)/Point;

  // Are conditions correct to go long?
  if(ema_slope>=SLOPE_SMALL) {
    if(ema_slope<=SLOPE_LARGE) {
      if((Minute()>MINUTES_BEGIN)&&(Close[0]<=Open[0])&&(Close[0]<=Low[0]+(SLIP_BEGIN*Point))) {
        begin_buy_chance=1;
      }
    }
  }

  // Are conditions correct to go short?
  if(ema_slope<=-SLOPE_SMALL) {
    if(ema_slope>=-SLOPE_LARGE) {
      if((Minute()>MINUTES_BEGIN)&&(Close[0]>=Open[0])&&(Close[0]>=High[0]-(SLIP_BEGIN*Point))) {
        begin_sell_chance=1;
      }
    }
  }

  // Was there a sudden jump?  Ignore it...
  if((MathAbs(Open[1]-Open[0])/Point)>=BIG_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[2]-Open[1])/Point)>=BIG_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[3]-Open[2])/Point)>=BIG_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[4]-Open[3])/Point)>=BIG_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[5]-Open[4])/Point)>=BIG_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[2]-Open[0])/Point)>=DOUBLE_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[3]-Open[1])/Point)>=DOUBLE_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[4]-Open[2])/Point)>=DOUBLE_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }
  if((MathAbs(Open[5]-Open[3])/Point)>=DOUBLE_JUMP) {
    begin_buy_chance=0;
    begin_sell_chance=0;
  }

  // Implement a stop-loss
  if(ticket>0) {
    if(((Close[0]-open_price)/Point)<=-STOP_LOSS) {
      if((Minute()>MINUTES_END)&&(Close[0]>=Open[0])&&(Close[0]>=High[0]-(SLIP_END*Point))) {
        end_buy_chance=1;
      }
    }
  }

  // Implement a stop-loss
  if(ticket<0) {
    if(((open_price-Close[0])/Point)<=-STOP_LOSS) {
      if((Minute()>MINUTES_END)&&(Close[0]<=Open[0])&&(Close[0]<=Low[0]+(SLIP_END*Point))) {
        end_sell_chance=1;
      }
    }
  }

  // Prevent duplicate orders
  if(ticket>0) begin_buy_chance=0;
  if(ticket<0) begin_sell_chance=0;

  // Was there no volume last time?  If so, end the trade...
  if(Volume[1]<=MIN_VOLUME) {
    if(ticket>0) end_buy_chance=1;
    if(ticket<0) end_sell_chance=1;
  }

  // Was a long-exit signaled?
  if(end_buy_chance>=1) {
    ticket=0;
    OrderClose(OrderTicket(), NUM_LOTS, Bid, SLIPPAGE, Teal);
  }

  // Was a short-exit signaled?
  if(end_sell_chance>=1) {
    ticket=0;
    OrderClose(OrderTicket(), NUM_LOTS, Ask, SLIPPAGE, BlueViolet);
  }

  // Was a long-enter signaled?
  if(begin_buy_chance>=1) {
    ticket=OrderSend(Symbol(), OP_BUY, NUM_LOTS, Ask, SLIPPAGE, Ask-EMERGENCY_LOSS*Point, Ask+TAKE_PROFIT*Point, "Long", 16384, 0, Lime);
    OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
    open_price=Open[0]-(ADJUST*Point)+(Bid-Ask);
  }

  // Was a short-enter signaled?
  if(begin_sell_chance>=1) {
    ticket=OrderSend(Symbol(), OP_SELL, NUM_LOTS, Bid, SLIPPAGE, Bid+EMERGENCY_LOSS*Point, Bid-TAKE_PROFIT*Point, "Short", 16384, 0, Red);
    OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
    open_price=Open[0]+(ADJUST*Point)+(Ask-Bid);
  }

  return(0);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---