Посмотри здесь https://book.mql4.com/ru и будет тебе счастье
Такой массив информации. Просмотрел все, но ответ на свой вопрос не нашел.
Здравствуйте.
У меня такой вопрос. Как на текущем графике использовать данные других графиков. Например, торгуем в евродоллар 15М, а фильтруем данными евродоллар 1H.
И еще вопрос: как сделать чтобы по сигналу открывалась только одна позиция (а то бывает что позиция открылась, и покаким-то условиям на этом же баре закрылась, то тут же открывается еще такая же позиция).
Если можно приведите пример в виде кода. (я еще только начинаю програмировать и абстрактные советы сложно воспринимаю).
Твой советник и так обращается к данным Н1
ma_dm=iMACD("EURUSD",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
ma_ds=iMACD("EURUSD",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
Для работы открытия только одной позиции необходимо или ставить флаг, который снимается на следующем баре или при изменении условий, или работать на открытии бара. Тогда и ложные срабатывания исчезнут. Нулевой бар только формируется и его состояние еще неопределенно.
И еще вопрос: как сделать чтобы по сигналу открывалась только одна позиция (а то бывает что позиция открылась, и покаким-то условиям на этом же баре закрылась, то тут же открывается еще такая же позиция).
Инересно по каким закрылвсь? Ни стопов ни клоуз... Старший ТФ тут ни причем. Если сигнал есть, - позиция открывается. Если хотите на одном баре не более одной позиции. Закройте область открытия позиций контролем нового бара.
Например так
if (iTime(NULL,0,0)>PrevTime) { PrevTime=iTime(NULL,0,0); .... Проверка условия открытия, открытие.. .... } тралы, модификации и т.д.
Для работы открытия только одной позиции необходимо или ставить
флаг, который снимается на следующем баре или при изменении
условий, или работать на открытии бара. Тогда и ложные срабатывания
исчезнут. Нулевой бар только формируется и его состояние еще
неопределенно.
Для работы открытия только одной позиции необходимо или ставить
флаг, который снимается на следующем баре или при изменении
условий, или работать на открытии бара. Тогда и ложные срабатывания
исчезнут. Нулевой бар только формируется и его состояние еще
неопределенно.
bool flag=false;
int start(){
int ticket;
..........
// обработка условий для входа
if (.......) flag=flase
if (!flag) {
ticket=OrderSend(......);
}
if (ticket>0) flag=true;
}
Примерно так.
в контроле позиций, но и в том, что условие открытия выполняется не в точке пересечения, а на временном отрезке.
То есть сигнал не дискретный, а продолжительный. Естественно, позиция закрылась по ТП или СЛ, сигнал продолжает
поступать, и на следующем баре снова открывается такая же позиция. Пересмотрите условия открытия позиций, например,
опишите пересечение на младшем ТФ при условии нужного тренда на старшем ТФ. И будет Вам счастье.
Я кажется, понимаю, почему позиция в ту же сторону открывается сразу после закрытия предыдущей. Дело не только
в контроле позиций, но и в том, что условие открытия выполняется не в точке пересечения, а на временном отрезке.
То есть сигнал не дискретный, а продолжительный. Естественно, позиция закрылась по ТП или СЛ, сигнал продолжает
поступать, и на следующем баре снова открывается такая же позиция. Пересмотрите условия открытия позиций, например,
опишите пересечение на младшем ТФ при условии нужного тренда на старшем ТФ. И будет Вам счастье.
К сожалению, как я понимаю, позиция открывается на том же баре. Но обсуждать с такими людьми (как вы Гранит) это не стоит. Они (Вы же у себя ) давно уже приняли решение и все сделали, что бы такого не было. А человек пока такого не может сделать, но он справится (если захочет), хотя зря отказался от книги. Там двольно много хороших идей, и не только для начинающих. Сам кое-что почерпнул. (Хотя для нас это кое-что звучит по разному, для меня это значит довольно много). Чужой опыт всегда хорош.
..Чужой опыт всегда хорош.
методично "писать прописи", когда кажется, что осталось только подправить "советник", и пошла работа.
Развращает и факультативность занятия форексом, живем же как-то без его доходов. Однако, если припрет, вмиг
станем усердными первоклашками. У меня друг, переехав в Штаты, выяснил, что он никто и звать его никак, и если
он не зацепится за перспективную специальность, которой он раньше не знал, то так и будет на пару с филиппинцами
ДСП кроить. Куда только лень и вальяжность делась! Мозоли на заднице набил, а в белые воротнички за два года
вылез и сейчас следит, чтобы молодежь ему пятки не оттаптывала.
А дома стимула серьезного нет.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня такой вопрос. Как на текущем графике использовать данные других графиков. Например, торгуем в евродоллар 15М, а фильтруем данными евродоллар 1H.
И еще вопрос: как сделать чтобы по сигналу открывалась только одна позиция (а то бывает что позиция открылась, и покаким-то условиям на этом же баре закрылась, то тут же открывается еще такая же позиция).
Если можно приведите пример в виде кода. (я еще только начинаю програмировать и абстрактные советы сложно воспринимаю).
int start()
{
double ma_tm, ma_tm1, ma_ts, ma_ts1;
double ma_dm, ma_ds;
int cnt, ticket, total;
}
ma_tm=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
ma_tm1=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
ma_ts=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
ma_ts1=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
ma_dm=iMACD("EURUSD",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
ma_ds=iMACD("EURUSD",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
//задали все данные для МАСD
// Условие открытие позиции BUY
if(ma_dm>ma_ds&&ma_ts1>ma_tm1&&ma_tm>ma_ts)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELL
if(ma_ds>ma_dm&&ma_tm1>ma_ts1&&ma_ts>ma_tm)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
Заранее спасибо.