你好
我现在已经解决了这个问题。我可以编译EA并尝试回测 它。但不幸的是,它没有买入或卖出任何东西!
除此以外,它似乎还能工作,这是日志。
14:16:18 EL1输入。Lots=0.1; Timeframe=240;
14:16:18 ELine GBPUSD,H4: 删除
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4:加载成功
这就是EA的代码。
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
外置双Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
// 检查当前方向
if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELline",1,0))
strDirCurrent="长"。
如果(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="短"。
//与之前的方向比较,如果有变化就开仓
如果(strDirCurrent=="长"&&strDirPrevious=="短")
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green) 。
if(strDirCurrent=="short" &&strDirPrevious=="long")
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red);
strDirPrevious=strDirCurrent。
}
//结束。
非常欢迎任何帮助!!
谢谢
邓小平
请附上你的指标 - 这样我们就可以做回溯测试 了
你好
很好的代码--我很想回测它--请给我们你的icustom Eline。
我广泛地修改了你的代码。
/*
* Created by SharpDevelop.
* User: CARDIO
* Date: 1/17/2006
* Time: 4:55 AM
*
*Todo: if there is an ope position - close it- then open in opposite direction.
*
*/
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
#include
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
int cnt, magicEA;
bool isclosing = false;
double slippage = 3;
int init() {
return(0);
}
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
magicEA = 16384;
// check for current direction
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
{
strDirCurrent="long";
}
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
{strDirCurrent="short";
}
// compare to previous direction and open a position if there was a change
if(strDirCurrent=="long" && strDirPrevious=="short")
{
//firs close open positions
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);
return(0);
}
if(strDirCurrent=="short" && strDirPrevious=="long")
{
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);
return(0);
}
strDirPrevious=strDirCurrent;
return(0);
}
// the end.
void isclosing1(){
//Close all open orders
//todo: get a requote on the prices if error 138 occurs, use refreshrates
//todo: check if the last 3 closes where losers - if so stop the ea
int totalOrders = OrdersTotal();
int numPos = 0;
for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...
OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders
if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA
numPos++;
if(OrderType() == OP_BUY) { // Check for close signal for bought trade
if(isclosing) {
if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade
//writetofile("10","Closed buy", OrderTicket());
//prtAlert("Day Trading: Closing BUY order");
} else {
// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));
}
}
} else { // Check sold trade for close signal
if(isclosing) {
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
//writetofile("10","Closed buy", OrderTicket());
// prtAlert("Day Trading: Closing SELL order");
}else {
//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));
}
}
}
}
}
谢谢,现在我得到了这个。
2006.01.17 18:59:10 2006.01.12 08:20 EL1:OrderSend函数 的参数7是无效的双数
2006.01.17 18:59:10 2006.01.12 08:10 EL1: OrderSend函数的注释必须是一个字符串
2006.01.17 18:59:09 EL1:加载成功
这个错误重复了大约一百万次;-)
但我认为这个问题很容易解决。
仍在努力修复--请稍等,我现在就发帖
仍在修复中
你好
我试图编写一个非常简单的EA,但我不是一个程序员,而且我以前从未做过EA。
我从MT4下载了MACD样本,编辑了一些部分,删除了我认为不需要的其他部分。
我相信我的代码真的很糟糕。
我希望这个EA能像这样工作。
我的自定义指标 ELine有两条线,按步骤移动。有时一条比另一条高,有时它们是一样的。
当一条线与另一条线相交时,我想让EA进入一个多头头寸或一个空头头寸,这取决于哪条线向上交叉。
除了在EA开始的时候,总是有一个开放的位置。
当我试图编译它时,它说 "如果"--分号应该是(20,7)。
然后在下一步,当它打开一个新的头寸时,它应该总是关闭一个已经存在的头寸,但我到目前为止还无法编写这个代码。
谁能纠正我代码中的错误,并告诉我如何在EA进入新的头寸时关闭头寸?
非常感谢