Hi All,
I`m quit new here, and i reading trough the manuals
I would like to build an EA.
I copied a EA from someone else to make some changes that it fits my one criteria.
If I try to backtest this system it does not take any positions.
I hope someone can advise how I can make amendments in the system to generate signals to enter a position.
Here is my idea:
I want to trade on a 20 Day high or 20 day low
As soon as I receive a signal te enter I want to trade 1position( 1.0)
I want to close the position if it crosses the 10 day high/low in the other direction of the trade itself.
I only want to open 1 position each time, so as soon as I have a position I should not get an other signal to double the position.
See attached the EA that i would like to amend to the above criteria
Can someone help?
Thanks in advance
---------------------------------------------------+
//| Donchain counter-channel system.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| |
//+------------------------------------------------------------------+
#property copyright "by Michal Rutka"
#property link ""
/*
System 'Donchain counter-channel' was described in the Currency Trader
Magazine, Octobre 2005, p.32.
Rules:
1. Go long next day at market if the 20-day
lower Donchian channel line turns up.
2. Go short next day at market if the upper 20-day
Donchian channel line turns down.
3. Exit long with a stop at the lower 20-day Donchian
channel line.
4. Exit short with a stop at the upper 20-day
Donchian channel line.
Strategy uses a custom indicator "Donchain Channels - Generalized version.mq4", which must be put in the indicators
subfolder.
Version Date Comment
1.0 9 Oct 2005 First version based on the article from the Currency Trader magazine.
*/
extern double Lots =0.5; // MM will come when strategy proved
extern int Slippage=1; // Change it for your brooker
extern int Magic =20051006; // Magic number of the strategy
// Optimalization parameters:
extern int ChannelPeriod=20; // Original channel period from th article.
extern int TimeFrame =PERIOD_D1; // Time frame of the Donchain indicator.
// Privete variables
datetime last_trade_time; // in order to execute maximum only one trade a day.
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ReportStrategy(int Magic)
{
int totalorders=HistoryTotal();
double StrategyProfit=0.0;
int StrategyOrders=0;
for(int j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&
(OrderMagicNumber()==Magic))
{
if((OrderType()==OP_BUY) ||
(OrderType()==OP_SELL))
{
StrategyOrders++;
StrategyProfit+=OrderProfit();
}
}
}
totalorders=OrdersTotal();
for(j=0; j<totalorders;j++)
{
if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&
(OrderMagicNumber()==Magic))
{
if((OrderType()==OP_BUY) ||
(OrderType()==OP_SELL))
{
StrategyOrders++;
StrategyProfit+=OrderProfit();
}
}
}
Comment("Executed ", StrategyOrders, " trades with ", StrategyProfit," of profit");
return;
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double stop_short;
double stop_long;
//----
bool entry_short;
bool entry_long;
bool are_we_long =false;
bool are_we_short =false;
int orders_in_trade=0;
int active_order_ticket;
//----
ReportStrategy(Magic);
// Check current trades:
int TotalOrders=OrdersTotal();
for(int j=0;j<TotalOrders;j++)
{
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
are_we_long =are_we_long || OrderType()==OP_BUY;
are_we_short=are_we_short || OrderType()==OP_SELL;
orders_in_trade++;
active_order_ticket=OrderTicket();
}
}
if(orders_in_trade > 1)
{
Alert("More than one active trade! Please close the wrong one.");
return(-1);
}
// Lower channel:
stop_long=iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,0,0);
// Upper channel:
stop_short=iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,1,0);
if(are_we_long)
{
// We have long position. Check stop loss:
OrderSelect(active_order_ticket, SELECT_BY_TICKET);
if(OrderStopLoss() < stop_long)
OrderModify(active_order_ticket,
OrderOpenPrice(),
stop_long,
OrderTakeProfit(),
0,
Blue);
//----
return(0);
}
if(are_we_short)
{
// We have long position. Check stop loss:
OrderSelect(active_order_ticket, SELECT_BY_TICKET);
if(OrderStopLoss() > stop_short)
OrderModify(active_order_ticket,
OrderOpenPrice(),
stop_short,
OrderTakeProfit(),
0,
Blue);
//----
return(0);
}
// Do not execute new trade for a next 24 hours.
if((CurTime() - last_trade_time)<24*60*60) return(0);
// Lower channel:
entry_long=iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,0,1) >
iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,0,2);
// Upper channel:
entry_short=iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,1,1) <
iCustom(NULL, TimeFrame, "Donchian Channels - Generalized version1",ChannelPeriod,1,0,0,0,1,2);
if(entry_long && entry_short)
Alert("Short and long entry. Probably one of the is wrong.");
if(entry_long)
{
OrderSend(Symbol(),
OP_BUY,
Lots,
Ask,
Slippage,
stop_long,
0,
"",
Magic,
0,
FireBrick);
last_trade_time=CurTime();
}
if(entry_short)
{
OrderSend(Symbol(),
OP_SELL,
Lots,
Bid,
Slippage,
stop_short,
0,
"",
Magic,
0,
FireBrick);
last_trade_time=CurTime();
}
//----
return(0);
}
//+------------------------------------------------------------------+
If I try to backtest this system it does not take any positions.
I want to trade on a 20 Day high or 20 day low
See attached the EA that i would like to amend to the above criteria
- No slaves here, learn to code or pay someone. Change the Donchian Channels/stop logic to your idea.
- EAs must adjust to 5 digit brokers, TP, SL, AND slippage. On ECN brokers you must open and THEN set stops
//++++ These are adjusted for 5 digit brokers. int pips2points; // slippage 3 pips 3=points 30=points double pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init(){ if (Digits == 5 || Digits == 3){ // Adjust for five (5) digit brokers. pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; } // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
You have only four choices:
- Search for it,
-
Beg at
- Coding help - MQL4 and MetaTrader 4 - MQL4 programming forum
- Requests & Ideas (MQL5 only!) - Trade FX - Expert Advisors and Automated Trading - MQL5 programming forum
- Free coding for your trading system.. - Easy Trading Strategy - General - MQL5 programming forum
- I will code & automate your strategy for free - Options Trading Strategies - General - MQL5 programming forum
- Make It No Repaint Please! - MetaTrader 5 - MQL4 and MetaTrader 4 - MQL4 programming forum
- learn to code it. If you don't learn MQL4/5, there is no common language for us to communicate. If we tell you what you need, you can't code it. If we give you the code, you don't know how to integrate it into yours.
- or pay (Freelance) someone to code it.
No free help
urgent help.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi All,
I`m quit new here, and i reading trough the manuals
I would like to build an EA.
I copied a EA from someone else to make some changes that it fits my one criteria.
If I try to backtest this system it does not take any positions.
I hope someone can advise how I can make amendments in the system to generate signals to enter a position.
Here is my idea:
I want to trade on a 20 Day high or 20 day low
As soon as I receive a signal te enter I want to trade 1position( 1.0)
I want to close the position if it crosses the 10 day high/low in the other direction of the trade itself.
I only want to open 1 position each time, so as soon as I have a position I should not get an other signal to double the position.
See attached the EA that i would like to amend to the above criteria
Can someone help?
Thanks in advance