有谁能帮助我解决这个EA?

 
//+------------------------------------------------------------------+
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property link "http://eatbuilder.com/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.1;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 15;
extern bool UseTakeProfit = True;
extern int TakeProfit = 10;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern string Comments = "HLC_v2";

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+

double Var1 = iHigh(NULL, PERIOD_H1, Current + 1);
double Var2 = iLow(NULL, PERIOD_H1, Current + 1);
double Var3 = iClose(NULL, PERIOD_M15, Current + 0);
double Var4 = iOpen(NULL, PERIOD_M15, Current + 0);
double Var5 = iClose(NULL, PERIOD_M15, Current + 0);

double Buy1_1 = iHigh(NULL, PERIOD_H1, Current + 1); //(Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;
double Buy1_2 = iClose(NULL, PERIOD_M15, Current + 0);
double Buy2_1 = iOpen(NULL, PERIOD_M15, Current + 0);
double Buy2_2 = iClose(NULL, PERIOD_M15, Current + 0);

double Sell1_1 = iLow(NULL, PERIOD_H1, Current + 1);
double Sell1_2 = iClose(NULL, PERIOD_M15, Current + 0);
double Sell2_1 = iOpen(NULL, PERIOD_M15, Current + 0);
double Sell2_2 = iClose(NULL, PERIOD_M15, Current + 0);




//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+
 

我试着把它放进去,但它不能交易。

谁能帮我解决这个问题?

策略测试器试 了一下,确实有效。

谢谢你的帮助 :)

 

我们憎恨EA建设者

 
dabbler:

我们憎恨EA建设者



???
 

EA builder创造的坏代码,使用EA builder的人无法理解,因此也无法修复。而且有很多代码,很难从大量的坏代码中学习。

试着在论坛上搜索一下最近包含 "EA构建器 "的主题

 
17021978:

我试着把它放进去,但它不能交易。

谁能帮我解决这个问题?

用策略测试器试了一下,确实有效。

提前感谢 :)


如果它不交易,那么你必须查看终端日志/专家,并阅读其中的几行字。

如果你还是不明白,那么你必须在你的EA中加入一些评论或打印行,看看当你的EA连接到图表上时发生了什么。

如果这没有帮助,那么可能是你没有允许EA交易....。

那么,有什么是必须要解决的呢?

顺便说一下,你必须使用SRC按钮在你的信息中放置编程线

而且就像dabbler

说我讨厌EA Builder,你不学习编程的基础知识,你需要.... 花点时间研究一下基础知识

 
好的,感谢dabbler和deVries!
 

  1. 因为这里没有奴隶,所以只有两个选择:学习 编码或付钱给 别人。我们不打算为你编码。我们愿意帮助你。我们不会对230行代码进行调试。
  2. EA生成器在关闭多个订单时,会使坏的代码计数增加。
  3. EA生成器的代码很差 条数不可靠(图表上的最大条数) 交易量不可靠(错过点) 总是使用时间
  4. EA生成器的代码很差,不适合4/5位数的经纪商。
  5. EA生成器的代码很差,没有为ECN经纪商进行调整。
  6. "我试着把它投入使用,但它没有交易...... "日志文件中说什么?
 
WHRoeder:

  1. 因为这里没有奴隶,所以只有两个选择:学习 编码或付钱给 别人。我们不打算为你编码。我们愿意帮助你。我们不会对230行代码进行调试。
  2. EA生成器在关闭多个订单时,会使坏的代码计数增加。
  3. EA生成器的代码很差 条数不可靠(图表上的最大条数) 交易量不可靠(错过点) 总是使用时间
  4. EA生成器的代码很差,不适合4/5位数的经纪商。
  5. EA生成器不调整ECN经纪商的代码是错误的。
  6. "我试着把它投入使用,但它没有交易...... "日志文件中说什么?


日志文件没有显示任何东西,日志上也没有。

通常我们可以从日志中看到错误,但这一次却没有。

谢谢你的回答,WHRoeder

 
WHRoeder:

  1. EA生成器的代码很差 条形图不可靠(图表上的最大条形图) 成交量不可靠(错过点位) 总是使用时间

因此,图表不能比选项指定的图表大小更大--你会认为。所以我写了一个小EA来证明 使用Bars 是多么无用。

int barCount=-1;

int init(){
   barCount = Bars;
   Print("Starting number of bars is " + barCount );
}

int start(){
   if( barCount != Bars ){
       barCount  = Bars;
       Print("Bar count is now " + barCount);
   }

   return(0);
}

在测试器上很好地工作,正如预期。我认为 它在模拟或真实账户中会失败得很惨。我的图表大小被设置为100,000,而图表中的条数比这多。所以我把图表中的最大条数改为10,000条,并重新启动了程序。果然,运行EA的第一个勾股给了我一个几乎正确的答案,10,005。但是在M1图表上,它正在稳定地更新,就像你所期望的那样,如果图表限制被完全忽略了。有可能图表限制只在你启动程序时适用。

我最终证明了我不知道Bars 真正应该做什么 :-(

 
17021978:

我试着把它放进去,但它不能交易。

谁能帮我解决这个问题?

用策略测试器试了一下,确实有效。

预先感谢 :)

亲爱的17021978 - 这是旧的。

请阅读关于EA构建器的整个主题https://www.mql5.com/en/forum/139608

:(