Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Терранс
Видели ли вы этот раздел TSD : Уроки?
Я думаю, что на многие вопросы там уже есть ответы и там можно найти очень хорошие примеры для общего написания советника. Что касается вашего вопроса: я не тестировал ваш советник, поэтому не знаю. Проблема тестирования чужого советника заключается в том, что нужно знать его идею и логику, а во многих случаях это просто невозможно "прочитать" из самого кода. Фрагмент кода, о котором мы говорили, касался того, как обнаружить 2 пересечения средних на закрытом баре, и этот код делает только это и ничего кроме этого. Вот почему я сказал, что "это не имеет ничего общего с SL или TP".
с уважением,
МладенПривет, Младен, извините, что снова беспокою вас. Я просмотрел свои коды и заметил, что не только TP и SL, но иногда даже ордера на покупку и продажу не работают. Я просмотрел ссылки на урок, который вы дали мне от codersgurus, и это тот же набор учебников, который был у меня и на котором я основывал свои коды. Я серьезно не могу найти причину моей ошибки в кодах.
Пересечения MA работают как надо, вместе с длинными и короткими ордерами, но иногда вход и выход кажутся безумными, даже когда я сделал базовую функцию ASK для проверки. Пожалуйста, пролейте на это свет.
Спасибо и с уважением
Терранс
...
Терранс
Во-первых: Является ли ваш брокер ECN/STP? Если да, то вы не можете выставлять стоп лосс и тейк профит вместе с открытием ордера, а должны сначала открыть ордер с установленными на 0 значениями, а затем использовать OrderModify() для установки стоп лосса и/или тейк профита на уже открытый ордер.
Второе: Также всегда проверяйте, не написано ли у вас что-нибудь на вкладке экспертов в окне терминала (проверьте, не написаны ли там ошибки: возможно, тогда вы поймете, что происходит и почему.
Третье : Неплохо было бы поместить такую строку:
После каждой функции управления заказами. Описания ошибок вы можете найти в файле experts/include/stderror.mqh (есть много ошибок, которые могут произойти (просто посмотрите список возможных кодов ошибок и описаний) с ордерами, и вы должны отслеживать каждую возможную ошибку) С известными кодами ошибок (строка кода выше), вы можете сосредоточиться на исправлении конкретных ошибок, а не гадать, что происходит.
Привет, Младен, извините, что снова беспокою вас. Я просмотрел свои коды и заметил, что не только TP и SL, но иногда даже ордера на покупку и продажу сбиваются. Я просмотрел ссылки на урок, который вы дали мне от codersgurus, и это тот же набор учебников, который у меня был и на котором я основывал свои коды. Я серьезно не могу найти причину ошибки в кодах.
Пересечение МА работает как надо вместе с длинным и коротким ордером, однако временами вход и выход кажутся безумными, даже когда я сделал базовую функцию ASK для проверки. Пожалуйста, пролейте на это свет.
Спасибо и с уважением
ТеррансТерранс
Во-первых: Является ли ваш брокер ECN/STP? Если да, то вы не можете выставлять стоп-лосс и тейк-профит вместе с открытием ордера, а должны сначала открыть ордер с ними, установленными на 0, а затем использовать OrderModify() для установки стоп-лосса и/или тейк-профита на уже открытый ордер.
Второе: Также всегда проверяйте, не написано ли у вас что-нибудь на вкладке экспертов в окне терминала (проверьте, не написаны ли там ошибки: возможно, тогда вы поймете, что происходит и почему.
В-третьих : Неплохо было бы разместить такую строку:
Привет Младен,
Спасибо, что указал на ECN/STP. Я не знал о них, пока вы не упомянули. Я сделал изменения, как вы предложили, но теперь мне стало только хуже. Мало того, что проблема с входом и выходом сохраняется, так еще и SL пропал. Это сложнее, чем я думал.
//--- входные параметры
extern double TakeProfit=1000.0;
extern double Lots=0.1;
extern double StopLoss=1500.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0;
static int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //main up
if(mainline1<mainline2)maincurrent_dirction = 2; //main down
if(maincurrent_dirction != mainlast_dirction) //main changed
{
mainlast_direction = maincurrent_dirction;
return (mainlast_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(" Открытордер SELL: ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // длинная позиция открыта
{
OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet);
// закрываем позицию
return(0); // выход
}
else // переходим в короткую позицию
{
OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet);
// закрываем позицию
return(0); // выход
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Терранс
Во-первых: Является ли ваш брокер ECN/STP? Если да, то вы не можете выставлять стоп-лосс и тейк-профит вместе с открытием ордера, а должны сначала открыть ордер с ними, установленными на 0, а затем использовать OrderModify() для установки стоп-лосса и/или тейк-профита на уже открытый ордер.
Второе: Также всегда проверяйте, не написано ли у вас что-нибудь на вкладке экспертов в окне терминала (проверьте, не написаны ли там ошибки: возможно, тогда вы поймете, что происходит и почему.
В-третьих : Было бы неплохо поместить строку вроде этой:
Привет, Младен, я хотел бы поблагодарить тебя за помощь в эти несколько дней. Мне удалось найти ошибку в моем коде, которая вызывает ошибку входа и выхода.
С уважением,
Терранс
Открытие более 1 сделки
Привет всем, я пытался сделать так, чтобы мой советник мог открывать несколько сделок, но пока мне удается ограничиться только 1 сделкой.
Моя цель проста:
Когда LWMA 10 пересекается ниже LWMA 20, система будет открывать короткие позиции при условии, что и LWMA 10 и 20 пересекаются ниже SMA 50 и наоборот для длинных сделок.
Я хочу ограничить советника, чтобы он открывал не более 2 сделок, однако, когда я меняю коды, он начинает открывать 2 сделки за раз вместо того, чтобы открывать 1 сделку по каждому критерию.
Нужно ли мне установить систему счетчика или что-то еще, или как мне настроить мой счетчик, чтобы он реагировал, когда одна из моих сделок уже достигла TP или SL?
Не мог бы кто-нибудь пролить свет на то, что не так с моими кодами.
Большое спасибо и пожелания
Терранс
//--- входные параметры
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(" Открытордер SELL: ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
Вопросы
Младен,
Я пытаюсь найти уроки по ссылке, которую вы мне показали, но это общие уроки, я ищу информацию конкретно для индикатора Хендерсона...
Кроме того, я просмотрел размещенные темы и после этого я хочу выяснить следующие вещи.
-Простым и понятным языком, я хочу спросить, что примерно после скольких баров проходит, и цвет меняется.
Другими словами, максимум сколько баров нужно, чтобы цвет линии изменился с голубого на розовый? К сожалению, я не понимаю причудливой терминологии и буду признателен за очень простой ответ, после которого я смогу двигаться дальше и начать стратегию. Любой график будет очень признателен. premalmunshaw@yahoo.com - мой адрес электронной почты.
Я пытаюсь заплатить $39 за активацию этого пакета.
С НЕТЕРПЕНИЕМ ЖДУ ПОЛОЖИТЕЛЬНОГО ОТВЕТА!
С уважением,
Премал Муншоу
Честно говоря, я не понимаю, о чем вы спрашиваете.
Если вы спрашиваете, когда меняется цвет, то ответ: когда меняется наклон.
Если вы спрашиваете, как кодируется изменение цвета, то ответ вы должны искать в этом разделе: Уроки....
К сожалению, я не понимаю ваших вопросов, поэтому все, что я сделаю, это перескажу себя (длина расчета относится к длине расчета фильтра Хендерсона):
Проще, чем это, ответить невозможно. И нет более простого объяснения того, как рассчитывается фильтр Хендерсона: это как если бы я попытался объяснить преобразование Фурье в терминах "1+1 = 2". Пожалуйста, изучите ссылки, которые вам предоставили.
Что касается остального: вы получили ссылки на математику, лежащую в основе фильтра, вы получили информацию о том, сколько баров пересчитывается, вы даже получили примеры из новостной ленты элитного раздела. Что касается стратегии с использованием этого фильтра: я 1000 раз говорил в 1000-х сообщениях, что пересчитывающие индикаторы (SSA, фильтр Хендерсона, центрированный TMA, преобразования Фурье, регрессионный анализ, ...) должны использоваться не в "сигнальном режиме", а в "режиме оценки". Если вы ищете сигналы от фильтра Хендерсона, то вы на совершенно неверном пути, и если это единственная причина, по которой вы рассматриваете подписку на элитный раздел, то лучше вам не подписываться.
PS: это плохая практика - делать свой email публичным. В этом случае все, что вы получите, это тонну спам сообщений в вашем почтовом ящике.
______________________________________
Желаю вам всего наилучшего в поисках торговой системы.
пожелания
Младен
Младен,
Я пытаюсь найти уроки по ссылке, которую вы мне показали, но это общие уроки, я ищу информацию конкретно для индикатора Хендерсона...
Кроме того, я просмотрел размещенные темы и после этого я хочу выяснить следующие вещи.
-Простым и понятным языком, я хочу спросить, что примерно после скольких баров проходит, и цвет меняется.
Другими словами, максимум сколько баров нужно, чтобы цвет линии изменился с голубого на розовый? К сожалению, я не понимаю причудливой терминологии и буду признателен за очень простой ответ, после которого я смогу двигаться дальше и начать стратегию. Любой график будет очень признателен. premalmunshaw@yahoo.com - мой адрес электронной почты.
Я пытаюсь заплатить $39 за активацию этого пакета.
С НЕТЕРПЕНИЕМ ЖДУ ПОЛОЖИТЕЛЬНОГО ОТВЕТА!
С уважением,
Премал МуншауМладен,
Есть ли способ установить счетчик на мою сделку так, чтобы когда моя сделка имеет TP или SL, я мог вызвать скачок счетчика?
С уважением,
Терранс
Привет всем, я пытался сделать так, чтобы мой советник мог открывать несколько сделок, но пока мне удается сделать так, чтобы он ограничивался только одной сделкой.
Моя цель проста:
Когда LWMA 10 пересекается ниже LWMA 20, система будет совершать короткие сделки при условии, что и LWMA 10 и 20 пересекаются ниже SMA 50 и наоборот для длинных сделок.
Я хочу ограничить советника, чтобы он открывал не более 2 сделок, однако, когда я меняю коды, он начинает открывать 2 сделки за раз вместо того, чтобы открывать 1 сделку по каждому критерию.
Нужно ли мне установить систему счетчика или что-то еще, или как мне настроить мой счетчик, чтобы он реагировал, когда одна из моих сделок уже достигла TP или SL?
Не мог бы кто-нибудь пролить свет на то, что не так с моими кодами.
Большое спасибо и пожелания
Терранс
//--- входные параметры
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+...
Попробуйте эту функцию:
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);Младен,
Есть ли способ установить счетчик на мою сделку так, чтобы когда моя сделка имеет TP или SL, я мог вызвать скачок счетчика?
С уважением,
ТеррансПривет, Младен,
Я придумал другой способ, используя функцию "Bars". Когда срабатывает сделка, я устанавливаю целочисленный счетчик с помощью функции bars (например, сделка на покупку срабатывает в баре 122, следовательно, счетчик будет 122) и когда мои критерии срабатывают снова, я снова вызываю функцию bar и сравниваю ее со счетчиком, и сделка срабатывает только если новый счетчик выше предыдущего, который в данном случае равен 122.
Однако я все еще запускаю 2 сделки вместе, а не по одной на каждый критерий. Почему так происходит?
Пожалуйста, помогите
Спасибо и с уважением
Терранс
//--- входные параметры
extern double TakeProfit=530.0;
extern double Lots=0.1;
extern double StopLoss=520.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
int BarCounter, BarCounter2;
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
BarCounter = Bars;
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
BarCounter = Bars;
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
if(total == 1)
{
BarCounter2 = Bars;
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Мой советник",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
Попробуйте эту функцию:
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);