Сравнивайте время открытия и время текущего бара. Вот так
if(iTime(Symbol(),PERIOD_H1,Timing)>OrderOpenTime())
Это условие например гарантирует один ордер на одном часовом баре. если Timing=0, на двух если 1 и т.д.
Привет ребят. Идея следующая.
соответственно OpenBuy() открывает ордера на покупку, OpenSell() на продажу.
Мое условие должно сработать только один раз и открыть только один ордер. При следующем пересечении параболика, советник должен рассматривать ситуацию как будто ордеров нет.
Не могу реализовать данное условие. Если пишу функцию при которой идет проверка новый/старый бар, по какой то причине (догадываюсь, долго описывать) не работает.
Также есть мнение, при открытии нового ордера брать время открытия и в условии прописать сравнивать время и открывать или нет, но показалось это гемором.
Отсюда вопрос, есть ли какая нить возможность упростить решение.
У меня в советнике так:
int i,cnt,ticket,total;
bool flag=тrue;
int start()
{
---------
---------
---------
---------
total=OrdersTotal();
if(total<30)
{
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { //-если позиция открывается на нулевом баре
flag=false; //---текущего символа
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { //-если позиция открывается на нулевом баре
flag=false; //---текущего символа
break;
}
}
if(!flag) return(0);
---------
---------
---------
---------
---------
Привет ребят. Идея следующая.
соответственно OpenBuy() открывает ордера на покупку, OpenSell() на продажу.
Мое условие должно сработать только один раз и открыть только один ордер. При следующем пересечении параболика, советник должен рассматривать ситуацию как будто ордеров нет.
Не могу реализовать данное условие. Если пишу функцию при которой идет проверка новый/старый бар, по какой то причине (догадываюсь, долго описывать) не работает.
Также есть мнение, при открытии нового ордера брать время открытия и в условии прописать сравнивать время и открывать или нет, но показалось это гемором.
Отсюда вопрос, есть ли какая нить возможность упростить решение.
Определяешь глобальную переменную за пределами функции start()
bool flag=false;
и небольшие изменения в коде
if(parab1>High[1] && parab<Bid && rsi1<50&&flag) { OpenBuy(); flag=false; } if(parab1<Low[1] && parab>Ask && rsi1>50&&flag) { OpenSell(); flag=false; } if(parab1>High[1] && parab<Bid && rsi1>50&&flag) { OpenSell(); flag=false; } if(parab1<Low[1] && parab>Bid && rsi1<50&&flag) { OpenBuy(); flag=false; } if(parab1<High[1]&¶b1>Low[1])flag=true;
Сравнивайте время открытия и время текущего бара. Вот так
Это условие например гарантирует один ордер на одном часовом баре. если Timing=0, на двух если 1 и т.д.
я о чем то таком же и думал, спасибо
У меня в советнике так:
int i,cnt,ticket,total;
bool flag=тrue;
int start()
{
---------
---------
---------
---------
total=OrdersTotal();
if(total<30)
{
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { //-если позиция открывается на нулевом баре
flag=false; //---текущего символа
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { //-если позиция открывается на нулевом баре
flag=false; //---текущего символа
break;
}
}
if(!flag) return(0);
---------
---------
---------
---------
---------
Не чётко (абы как) прописаны условия торговли.
что именно не понятно? особо про условия и не думал писать, вопрос был как открывать ордера не на каждом тике, а один раз и ждать следующего условия
что именно не понятно? особо про условия и не думал писать, вопрос был как открывать ордера не на каждом тике, а один раз и ждать следующего условия
Чтобы человеку помочь, нужно знать, чего нужно получить в конечном итоге. Играть в догадки надоест после пары опытов работы с заказчиками.
Чтобы человеку помочь нужно помочь. А чтобы просто .... - ничего не нужно.
Привет ребят. Идея следующая.
соответственно OpenBuy() открывает ордера на покупку, OpenSell() на продажу.
Мое условие должно сработать только один раз и открыть только один ордер. При следующем пересечении параболика, советник должен рассматривать ситуацию как будто ордеров нет.
Не могу реализовать данное условие. Если пишу функцию при которой идет проверка новый/старый бар, по какой то причине (догадываюсь, долго описывать) не работает.
Также есть мнение, при открытии нового ордера брать время открытия и в условии прописать сравнивать время и открывать или нет, но показалось это гемором.
Отсюда вопрос, есть ли какая нить возможность упростить решение.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет ребят. Идея следующая.
соответственно OpenBuy() открывает ордера на покупку, OpenSell() на продажу.
Мое условие должно сработать только один раз и открыть только один ордер. При следующем пересечении параболика, советник должен рассматривать ситуацию как будто ордеров нет.
Не могу реализовать данное условие. Если пишу функцию при которой идет проверка новый/старый бар, по какой то причине (догадываюсь, долго описывать) не работает.
Также есть мнение, при открытии нового ордера брать время открытия и в условии прописать сравнивать время и открывать или нет, но показалось это гемором.
Отсюда вопрос, есть ли какая нить возможность упростить решение.