Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/USD
Oct 2024 - Jan 2025
0.00 %
Total Trades
0
Won Trades
0
Lost trades
0
Win Rate
0.0 %
Expected payoff
0.00
Gross Profit
0.00
Gross Loss
0.00
Total Net Profit
0.00
-100%
-50%
0%
50%
100%
SpiNNaker v0.50b
//+------------------------------------------------------------------+
//| SpiNNaker v0.50b.mq4 |
//| Copyright © 2009 Tom Balfe |
//| http://www.forex-tsd.com/members/nittany1.html |
//| redcarsarasota@yahoo.com |
//| |
//| This is an Neural Network expert advisor that is fed data |
//| from the stochastics and ADX indicators. It is a single |
//| layer perceptron which needs to be trained manually to adjust |
//| the weights. |
//| |
//| This EA is multi-timeframe in that it uses data from both the |
//| 5m and 15m timeframes to feed into the input neurodes. |
//| |
//| There are six units in the neural network: four input |
//| units (stochastics 5m, stochastics 15m, adx 5m, adx 15m) and |
//| two output units (buy, sell). There are 8 adjustable weights |
//| that need to be adjusted by optimization. |
//| |
//| If you are going to use this EA on separate currency pairs at |
//| the same time please change the MagicNumber to something unique |
//| for each currency pair. |
//| |
//| Also optimize the weights and indicator settings for each |
//| currency pair. |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| RESEARCH |
//| Here are a list of websites that I used for learning about |
//| neural networks. |
//| |
//| http://www.benbest.com/computer/nn.html |
//| http://www.ai-junkie.com/ann/evolved/nnt1.html |
//| http://www.ibm.com/developerworks/library/l-neural/ |
//| |
//| There were others but I lost track of all my URLs. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009 Tom Balfe"
#property link "mailto:redcarsarasota@yahoo.com"
#property link "http://www.forex-tsd.com/members/nittany1.html"
#property link "http://www.myspace.com/tomsarasota"
bool BUY = false; // initialize output units to false
bool SELL = false; // we don't want trades by mistake
double bTemp=0,sTemp=0; // place to hold buy signal before putting it through
// threshold function
int s5m_t=0,s15m_t=0,a5m_t=0,a15m_t=0; // place to hold indicator signals for perceptron
// calculations
//+------------------------------------------------------------------+
//| USER ADJUSTABLE STUFF |
//+------------------------------------------------------------------+
extern string TopOfSetting = "=== SpiNNaker v0.50b EA ===";
extern int MagicNumber = 322112;
extern string Order_Settings = "=== Order Settings ===";
extern double StaticLots = 0.01;
extern int Slippage = 5;
extern int TP = 15;
extern int SL = 25;
//--- only change the values during backtesting/optimization
//--- do *not* change the signs (neg/pos) or you'll bust the neural network
//--- for example, try backtest/optimize of 0.1 to 0.9 in 0.1 step, or
//--- -0.1 to -0.9 in 0.1 step
extern string NN_Weights = "=== NN Weights ===";
extern double w1b = 0.5; // 5 min stoch weight for buy
extern double w1s = -0.5; // 5 min stoch weight for sell
extern double w2b = 0.5; // 15 min stoch weight for buy
extern double w2s = -0.5; // 15 min stoch weight for sell
extern double w3b = 0.5; // 5 min ADX weight for buy
extern double w3s = -0.5; // 5 min ADX weight for sell
extern double w4b = 0.5; // 15 min ADX weight for buy
extern double w4s = -0.5; // 15 min ADX weight for sell
extern string NN_Threshold = "== NN Threshold ===";
extern double ThresholdBUY = 1.50;
extern double ThresholdSELL = 1.50;
extern string Stoch_Settings = "=== Stochastic Settings ===";
extern int PercentK_m5 = 8;
extern int PercentD_m5 = 3;
extern int Slowing_m5 = 3;
extern int PercentK_m15 = 8;
extern int PercentD_m15 = 3;
extern int Slowing_m15 = 3;
extern string ADX_Settings = "=== ADX Settings ===";
extern int ADXTrend = 20;
extern string MM_Settings = "=== Money Management ===";
extern bool UseMM = false;
extern int PercentAtRisk = 3;
//+------------------------------------------------------------------+
//| DON'T CHANGE BELOW HERE |
//+------------------------------------------------------------------+
//| Program initializes and deinitializes here. |
//+------------------------------------------------------------------+
string EAComment = "SpiNNaker v0.50b EA";
string EATitle = "SPINNAKER v0.50b EA © 2009 TOM BALFE";
int OpenOrders = 1;
datetime PreviousBar;
int init()
{
ObjectCreate("Title",OBJ_LABEL,0,0,0);
ObjectSet("Title",OBJPROP_XDISTANCE,325);
ObjectSet("Title",OBJPROP_YDISTANCE,2);
ObjectSetText("Title",EATitle,9,"Lucida Sans Regular",PaleTurquoise);
return(0);
}
int deinit()
{
if (TotalOpenOrders() > 0)
{
CloseAll();
}
ObjectsDeleteAll();
ObjectDelete("Title");
return(0);
}
int start()
{
//--- INDICATORS
//--- Stochastics M5
double sMain_m5 = iStochastic(NULL,5,PercentK_m5,PercentD_m5,Slowing_m5,MODE_SMA,0,MODE_MAIN,0);
double sSignal_m5 = iStochastic(NULL,5,PercentK_m5,PercentD_m5,Slowing_m5,MODE_SMA,0,MODE_SIGNAL,0);
//--- Stochastics M15
double sMain_m15 = iStochastic(NULL,15,PercentK_m15,PercentD_m15,Slowing_m15,MODE_SMA,0,MODE_MAIN,0);
double sSignal_m15 = iStochastic(NULL,15,PercentK_m15,PercentD_m15,Slowing_m15,MODE_SMA,0,MODE_SIGNAL,0);
//--- M5 ADX data
double adx_m5 = iADX(NULL,5,14,PRICE_CLOSE,0,0); // ADX 5 min
double di_p_m5 = iADX(NULL,5,14,PRICE_CLOSE,1,0); // DI+ 5 min
double di_m_m5 = iADX(NULL,5,14,PRICE_CLOSE,2,0); // DI- 5 min
//--- M15 ADX data
double adx_m15 = iADX(NULL,15,14,PRICE_CLOSE,0,0); // ADX 15 min
double di_p_m15 = iADX(NULL,15,14,PRICE_CLOSE,1,0); // DI+ 15 min
double di_m_m15 = iADX(NULL,15,14,PRICE_CLOSE,2,0); // DI- 15 min
//--- INDICATORS TURNED INTO SIGNALS
//--- feed indicator data to give signals for each timeframe
if (sMain_m5>sSignal_m5) { s5m_t = 1; } // stoch 5m s5m_t
else if (sMain_m5<sSignal_m5) { s5m_t = -1; }
else { s5m_t = 0; }
if (sMain_m15>sSignal_m15) { s15m_t = 1; } // stoch 15m s15m_t
else if (sMain_m15<sSignal_m15) { s15m_t = -1; }
else { s15m_t = 0; }
if ((adx_m5>ADXTrend)&&(di_p_m5>di_m_m5)) { a5m_t = 1; } // adx 5m a5m_t
else if ((adx_m5>ADXTrend)&&(di_p_m5<di_m_m5)) { a5m_t = -1; }
else { a5m_t = 0; }
if ((adx_m15>ADXTrend)&&(di_p_m15>di_m_m15)) { a15m_t = 1; } // adx 15m a15m_t
else if ((adx_m15>ADXTrend)&&(di_p_m15<di_m_m15)) { a15m_t = -1; }
else { a15m_t = 0; }
//--- NEURAL NETWORK STUFF
//--- buy perceptron first, order: 5m stoch, 15m stoch, 5m adx, 15m adx
bTemp = ((s5m_t*w1b) + (s15m_t*w2b) + (a5m_t*w3b) + (a15m_t*w4b));
//--- sell perceptron next, order: 5m stoch, 15m stoch, 5m adx, 15m adx
sTemp = ((s5m_t*w1s) + (s15m_t*w2s) + (a5m_t*w3s) + (a15m_t*w4s));
//--- buy threshold function
if (bTemp>ThresholdBUY) {
BUY = true; }
//--- sell threshold function
if (sTemp>ThresholdSELL) {
SELL = true; }
//--- ORDER MANAGEMENT
//--- look for closes first, if none are found, open one if conditions are right
if (NewBar() == true) {
//---------------- check indicators and look for a CLOSE ---//
if (TotalOpenOrders() == OpenOrders)
{
if (OrderType() == OP_BUY) { //--- look for close of open buy positions
if (BUY == false) { CloseAll(); }
}
if (OrderType() == OP_SELL) { //--- look for close of open sell positions
if (SELL == false) { CloseAll(); }
}
}
//---------------- check indicators and look for a ORDER ENTRY ---//
if (TotalOpenOrders() < OpenOrders)
{
//-- BUY
if (BUY == true) {
OrderSend(Symbol(),OP_BUY,LotSize(),Ask,Slippage,Ask-SL*Point,Ask+TP*Point,EAComment,MagicNumber,0,Lime);
}
//-- SELL
if (SELL == true) {
OrderSend(Symbol(),OP_SELL,LotSize(),Bid,Slippage,Bid+SL*Point,Ask-TP*Point,EAComment,MagicNumber,0,Red);
}
}
}
ShowInfo();
return(0);
}
//+------------------------------------------------------------------+
//| COMMON FUNCTIONS |
//+------------------------------------------------------------------+
//| The expert will call these from the main loop. |
//+------------------------------------------------------------------+
//+-----------------------------------------------------+
//| new bar |
//+-----------------------------------------------------+
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}
//+-----------------------------------------------------+
//| calculate lot size |
//+-----------------------------------------------------+
double LotSize()
{
if (UseMM == true)
{ double Lots = MathCeil(AccountFreeMargin() * PercentAtRisk / 1000) / 100; }
else { Lots = StaticLots; }
return(Lots);
}
//+-----------------------------------------------------+
//| close all |
//+-----------------------------------------------------+
//| Finds any open orders & closes them |
//+-----------------------------------------------------+
void CloseAll()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
if (OrderSymbol()==Symbol() && (OrderMagicNumber() == MagicNumber))
{
//-- Close open BUYs
if (type == OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,CornflowerBlue);
//-- Close open SELLS
if (type == OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,CornflowerBlue);
}
}
return;
}
//+-----------------------------------------------------+
//| calculate open orders |
//+-----------------------------------------------------+
int TotalOpenOrders()
{
int j = 0;
j=OrdersTotal();
int TotalOpenOrders = 0;
if(j==0) { return (0); }
else
{
for(;j>=0;j--)
{
RefreshRates();
OrderSelect(j,SELECT_BY_POS);
if(OrderMagicNumber()==MagicNumber)
{
TotalOpenOrders++;
}
}
}
return(TotalOpenOrders);
}
//+-----------------------------------------------------+
//| show summary panel on chart |
//+-----------------------------------------------------+
void ShowInfo()
{
Comment("...::: SpiNNaker v0.50b :::...\n",
"Copyright © 2009 Tom Balfe\n",
"Currency Pair: ", Symbol(),"\n",
"Price: ",NormalizeDouble(Bid,4),"\n",
"Date: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),"\n",
"Minimum Lot Size: ",MarketInfo(Symbol(),MODE_MINLOT));
return(0);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---