Привет
Теперь я решил эту проблему. Я смог скомпилировать советника и попытался протестировать его. Но, к сожалению, он ничего не покупает и не продает!
Кроме этого он вроде бы работает, вот журнал:
14:16:18 EL1 inputs: Lots=0.1; Timeframe=240;
14:16:18 ELine GBPUSD,H4: удален
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: успешно загружен
А это код советника:
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
extern double 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, "ELine",1,0))
strDirCurrent="long";
if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="short";
// сравниваем с предыдущим направлением и открываем позицию, если произошло изменение
if(strDirCurrent=="long" && strDirPrevious=="short")
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;
}
// конец.
Любая помощь очень приветствуется!!!
Спасибо
Эрик
если вы посмотрите в курсе разработки на этом форуме, вы найдете "My_First_EA", кодинд с пересекающимися МА.
Я не смог получить никаких результатов, тестируя ваш советник, и я тоже очень новичок в EA-Proramming. Извините
Спасибо, balue. Пробел в NULL - это только от копирования и вставки, в моем коде он написан правильно. И он действительно компилируется (вторая версия).
Я знаю курс MQL (хотя я еще не прошел его до конца).
Я написал аналогичный советник для ADX, чтобы протестировать, и там он работает. Только когда я пытаюсь использовать мой пользовательский индикатор, он не торгует...
Пожалуйста, прикрепите ваш индикатор - чтобы мы могли провести бэктестинг
Привет
Отличный код - я бы с удовольствием провел бэктест - пожалуйста, предоставьте нам ваш 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: invalid double number as parameter 7 for OrderSend function
2006.01.17 18:59:10 2006.01.12 08:10 EL1: комментарий для функции OrderSend должен быть строкой
2006.01.17 18:59:09 EL1: загружено успешно
и ошибка повторяется около миллиона раз ;-)
но я думаю, что эту ошибку легко исправить.
все еще пытаюсь исправить - просто подождите я сейчас напишу
Все еще исправляю
Исправлено - надеюсь
На самом деле вам просто не хватало значения тейк-профита (tp).
Разве вам не нужны tp и stoploss?
Удачи

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет
Я пытаюсь написать очень простой советник, но я не программист и никогда раньше не создавал советников.
Я взял образец MACD из MT4, отредактировал некоторые части и удалил все остальное, что посчитал ненужным.
Я уверен, что мой код действительно ужасен.
Я бы хотел, чтобы советник работал следующим образом:
Мой пользовательский индикатор ELine имеет две линии, которые движутся пошагово. Иногда одна из них выше другой, иногда они одинаковы.
Когда одна линия пересекает другую, я бы хотел, чтобы советник входил в длинную или короткую позицию, в зависимости от того, какая линия пересекается вверх.
Всегда есть открытая позиция, за исключением запуска советника.
Когда я пытаюсь скомпилировать его, он говорит "if" - ожидается точка с запятой (20,7).
Тогда на следующем шаге он должен всегда закрывать уже существующую позицию, когда открывает новую, но пока я не смог это закодировать.
Не мог бы кто-нибудь исправить ошибки в моем коде и, возможно, подсказать мне, как я могу закрывать позиции каждый раз, когда советник открывает новую?
Большое спасибо!