Может ли кто-нибудь помочь мне с этим советником?

 
//+------------------------------------------------------------------+
//| |
//| 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 BUILDER

 
dabbler:

МЫ НЕНАВИДИМ EA BUILDER



???
 

EA builder создает плохой код, который человек, использующий EA builder, не может понять и поэтому не может исправить. А кода очень много, и трудно учиться на большом количестве плохого кода.

Попробуйте поискать на форуме последние темы, содержащие "EA builder".

 
17021978:

Я попытался поставить его в прямой эфир, но он не работает...

Кто-нибудь может исправить это для меня?

Попробовал с помощью тестера стратегий, работает.

Заранее спасибо :)


Если он не торгует, тогда вам нужно заглянуть в журнал терминала/экспертов и прочитать строки внутри этого.

Если у вас все еще нет идей, то вы должны поместить в советника несколько строк Comment или Print, чтобы увидеть, что происходит, когда советник прикреплен к графику.

и если это не поможет, то, возможно, вы не разрешили советнику торговать.....

Итак, что здесь есть такого, что должно быть исправлено

Кстати, вы должны использовать кнопку SRC, чтобы поместить строки программирования в ваше сообщение

и как dabbler

Я ненавижу EA Builder вы не изучаете основы программирования вам нужно иметь.... Потратьте немного времени и изучите основы

 
Хорошо, спасибо dabbler и deVries!
 

  1. Поскольку здесь нет рабов, есть только два варианта: научиться кодить или заплатить кому-то. Мы не собираемся кодировать за вас. Мы готовы помочь вам. Мы не собираемся отлаживать 230 строк кода.
  2. EA builder заставляет плохой код считать при закрытии нескольких ордеров.
  3. EA builder makes bad code Bars is unreliable (max bars on chart) volume is unreliable (miss ticks) Always use time
  4. EA builder делает плохой код Не настраивается для 4/5-значных брокеров
  5. EA builder делает плохой код, не подстраиваясь под ECN брокеров.
  6. "Я пытался поставить его в реальном времени, но он не торгует..." Что написано в лог-файле?
 
WHRoeder:

  1. Поскольку здесь нет рабов, есть только два варианта: научиться кодить или заплатить кому-то. Мы не собираемся кодировать за вас. Мы готовы помочь вам. Мы не собираемся отлаживать 230 строк кода.
  2. EA builder заставляет плохой код считать при закрытии нескольких ордеров.
  3. EA builder makes bad code Bars is unreliable (max bars on chart) volume is unreliable (miss ticks) Always use time
  4. EA builder делает плохой код Не настраивается для 4/5 разрядных брокеров
  5. EA builder делает плохой код, не подстраиваясь под ECN брокеров.
  6. "Я пытался поставить его в реальном времени, но он не торгует..." Что написано в лог-файле?


Лог-файл ничего не показывает. В журнале ничего нет.

Обычно мы можем увидеть ошибку в журнале, но в данном случае она отсутствует...

Спасибо за ответ, WHRoeder

 
WHRoeder:

  1. EA builder делает плохой код Bars is unreliable (max bars on chart) volume is unreliable (miss ticks) Always use time

Таким образом, график не может стать больше, чем заданный опцией размер графика - можно подумать. Поэтому я написал небольшой советник, чтобы доказать , насколько бесполезно использование 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 и перезапустил программу. Конечно, первый тик, запущенный советником, дал мне почти правильный ответ - 10,005. Но на графике M1 он постоянно обновляется, как и следовало ожидать, если бы лимит графика полностью игнорировался. Возможно, ограничение графика действует только при запуске программы.

В итоге я доказал, что не знаю, что на самом деле должен делать Bars :-(

 
17021978:

Я попытался поставить его в прямой эфир, но он не работает...

Кто-нибудь может исправить это для меня?

Пробовал с помощью тестера стратегий, и он работает.

Заранее спасибо :)

Уважаемый 17021978 - это старая тема,

Прочитайте всю тему о EA builder https://www.mql5.com/en/forum/139608

:(