需要编码方面的帮助

 

你好

我试图编写一个非常简单的EA,但我不是一个程序员,而且我以前从未做过EA。

我从MT4下载了MACD样本,编辑了一些部分,删除了我认为不需要的其他部分。

我相信我的代码真的很糟糕。

我希望这个EA能像这样工作。

我的自定义指标 ELine有两条线,按步骤移动。有时一条比另一条高,有时它们是一样的。

当一条线与另一条线相交时,我想让EA进入一个多头头寸或一个空头头寸,这取决于哪条线向上交叉。

除了在EA开始的时候,总是有一个开放的位置。

当我试图编译它时,它说 "如果"--分号应该是(20,7)。

然后在下一步,当它打开一个新的头寸时,它应该总是关闭一个已经存在的头寸,但我到目前为止还无法编写这个代码。

谁能纠正我代码中的错误,并告诉我如何在EA进入新的头寸时关闭头寸?

非常感谢

附加的文件:
el1.mq4  2 kb
 

你好

我现在已经解决了这个问题。我可以编译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。

}

//结束。

非常欢迎任何帮助!!

谢谢

邓小平

 

你好。

当我把NUL L改成NULL 的时候,我没有得到任何来自共混的错误。

 

如果你在这个论坛的开发课程 中找到 "My_First_EA",这是一个有交叉MA的代码。

我无法得到任何测试 你的EA的结果,我也是EA-Proramming的新手。抱歉

 

谢谢你,balue。NULL中的空格只是复制和粘贴的结果,在我的代码中,它写得很正确。而且它确实可以编译(第二个版本)。

我知道MQL课程(尽管我还没有全部看完)。

我已经为ADX写了一个类似的EA来测试,在那里它可以工作。只是当我试图使用我的自定义指标 时,它不能交易。

 

请附上你的指标 - 这样我们就可以做回溯测试

你好

很好的代码--我很想回测它--请给我们你的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()));

}

}

}

}

}

 

固定的,我希望

固定的麻烦。试试这个

我们仍然要在资金管理 等方面下功夫。

附加的文件:
el1.mq4  4 kb
 

谢谢,现在我得到了这个。

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:加载成功

这个错误重复了大约一百万次;-)

但我认为这个问题很容易解决。

 

试试这个

我没有测试这段代码--如果你给出指标--我会测试--实际上我很快就会用另一个指标测试它。 但还是希望这能有所帮助。

附加的文件:
el1_1.mq4  5 kb
 

仍在努力修复--请稍等,我现在就发帖

仍在修复中

 

修正 - 希望如此

实际上你只是缺少一个获利(tp)值。

难道你不想要一个获利点和一个止损点吗?

好运

附加的文件:
el1_2.mq4  5 kb