Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 801
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не пойму, в чем проблема?
int start()
{
bool i;
int ticket;
double Pricem;
datetime Timen;
string Symb=Symbol();
ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);
i=OrderSelect(0,SELECT_BY_POS);
while(true)
{
RefreshRates();
Timen=OrderCloseTime();
if(Timen>0)
{
Pricem=OrderClosePrice();
Alert(Pricem);
Alert("ордер закрылся");
Sleep(30000);
}
Sleep(10);
}
return;
}
Решаю задачу закрытия всех открытых графиков средствами MQL4. Есть 3 открытых графика с разными валютными парами и такой код скрипта:
При запуске скрипта закрывается лишь один из трех графиков и вот принты из лога:
То есть при закрытии одного графика текущим вроде бы должен стать другой, но:
1. После закрытия первого графика функция ChartID возвращает идентификатор не текущего, а закрытого графика
2. Функция ChartClose() во 2 и 3 итерациях возвращает true, то есть она как бы успешно закрывает уже закрытое окно...
Кто-нить подскажет где баг и как решить эту задачу?
Не пойму, в чем проблема?
Должно появиться сообщение о закрытии. Ордер открывается, добирается до стопа, закрывается и все! Где ошибка?
Полагаю что OrderSelect() должен быть внутри цикла while, ну и к тому же номер позиции будет некорректен, т.к. после закрытия он станет другим - в этом случае лучше выбирать по тикету
Решаю задачу закрытия всех открытых графиков средствами MQL4. Есть 3 открытых графика с разными валютными парами и такой код скрипта:
При запуске скрипта закрывается лишь один из трех графиков и вот принты из лога:
То есть при закрытии одного графика текущим вроде бы должен стать другой, но:
1. После закрытия первого графика функция ChartID возвращает идентификатор не текущего, а закрытого графика
2. Функция ChartClose() во 2 и 3 итерациях возвращает true, то есть она как бы успешно закрывает уже закрытое окно...
Кто-нить подскажет где баг и как решить эту задачу?
pako, иногда срабатывает, иногда нет, не пойму почему... выдает ошибку:
2014.12.11 17:52:12.456 Access violation read to 0x09295000 in 'C:\.....................ex4'
Может связано с тем что пытается закрыть график, на который накинут скрипт?
PS работает корректно если накинуть скрипт на самый первый слева график. А если на любой другой, то выходит ошибка
pako, иногда срабатывает, иногда нет, не пойму почему... выдает ошибку:
2014.12.11 17:52:12.456 Access violation read to 0x09295000 in 'C:\.....................ex4'
Может связано с тем что пытается закрыть график, на который накинут скрипт?
PS работает корректно если накинуть скрипт на самый первый слева график. А если на любой другой, то выходит ошибка
ребята помогите разобраться
проблема вот в чем функция по переводу ордера в без убыток ,начинает не корректно работать если я ее устанавливаю на еновые пары и разрешаю переводить все открытые ордера в без убыток
еновые переводит все нормально ,а вот на пяти знаках переводит только в ноль хотя должен +1 пункт ,но самое интересное ,что если я его сразу устанавливаю на пять знаков то он работает нормально
и по еновым и на пяти знаков и переводит все ордера нормально.В чем причина такой работы,что нужно учитывать в данных функциях,чтоб правильное было исполнение и не зависела работа эксперта в какое окно я его кинул три знака или пять
Спасибо огромное .
}
//==================================================================================================
// функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам
//==================================================================================================
if(_Simbol==false)//если false то по всем ордерам открытым
{
for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие
{
if(OrderType()==OP_BUY) //если тип бай
{
double bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия
{
if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
if(OrderType()==OP_SELL)//если тип селл
{
double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю
{
if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
}
}
}
благодарю за код, вобщем суть понятна, хотя все равно ошибку иногда выдает.
Поэкспериментировал с функциями, которые показывают ID чартов. Что такое ChartFirst() из документации совершенно непонятно, интерпретировать можно как угодно - то ли имеется в виду первый по порядку слева график, то ли первый открытый из всех открытых (по времени), то ли вообще самый первый из когда-либо открытых в терминале (вероятность что он сейчас открыт равна практически нулю, поэтому закрывать его нет смысла). Больше склоняюсь к последней версии, т.к. ни разу не видел чтобы эта функция возвращала ID чарта, который открыт на данный момент.
благодарю за код, вобщем суть понятна, хотя все равно ошибку иногда выдает.
Поэкспериментировал с функциями, которые показывают ID чартов. Что такое ChartFirst() из документации совершенно непонятно, интерпретировать можно как угодно - то ли имеется в виду первый по порядку слева график, то ли первый открытый из всех открытых (по времени), то ли вообще самый первый из когда-либо открытых в терминале (вероятность что он сейчас открыт равна практически нулю, поэтому закрывать его нет смысла). Больше склоняюсь к последней версии, т.к. ни разу не видел чтобы эта функция возвращала ID чарта, который открыт на данный момент.
ChartFirst
Возвращает идентификатор первого графика клиентского терминала.
я понимаю, что это самый левый график