Как реализовать в этом советнике задумку, что бы ---->
Alert (GetLastError());
срабатывал один раз, при открытии нового ордера ?
Может там цикл по порядковой позиции ордера сделать? Или не поможет?
Простейший пример можно сделать
int start(){ static int PrevOrdersTotal=0; int pos=OrdersTotal()-1; if (PrevOrdersTotal!=pos) { if (OrderSelect(pos, SELECT_BY_POS)) { // Ваша обработка } } PrevOrdersTotal=pos; return(0); }
Но нужно еще учитывать и закрытие позиция
Если не трудно, опишите сам алгоритм .Просто мне так легче будет написать то что я хочу .
Если не трудно, опишите сам алгоритм .Просто мне так легче будет написать то что я хочу .
Сохраняем количество открытых позиций.
На следующем тике проверяем изменилось или нет.
Измениться может в двух случаях.
1. Произошло закрытие позиции.
2. Произошло открытие позиции.
Сохраняем количество открытых позиций.
На следующем тике проверяем изменилось или нет.
Измениться может в двух случаях.
1. Произошло закрытие позиции.
2. Произошло открытие позиции.
Так нужно как-то индефицировать индивидуальность открытой позиции, что бы на каждом тике не происходили изменения(Пример:(
Alert (GetLastError());? Или это не обязательно делать?
А зачем Alert (GetLastError());?
Можно это
Alert("Новый ордер на продажу "+y);
int y=0;
int t=0 ;
int start()
{
//----
for (int k=OrdersTotal()-1;k>=0;k--)//Начинаем перебор всех открытых ордеров начиная с конца
{
RefreshRates();//Обновляем котировки, необходимо при модификации или закрытии ордеров
if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true&&OrderSymbol()==Symbol())//Выбираем ордер с номером из цикла, и проверяем, совпадает ли символ ордера с текущим
{
int cmd=OrderType();//В переменной cmd будем хранить тип ордера
if(cmd>1)//Нас интересуют только отложенные ордеры
{
//Что-то делаем
}
if (cmd==OP_BUY)//А вдруг на покупку ордер?
{
t=t + 1;
Alert("Новый ордер на покупку "+t);
}
if (cmd==OP_SELL)//Или на продажу?
{
y=y + 1;
Alert("Новый ордер на продажу "+y);
}
}
}
//----
return(0);
}
int y=0;
int t=0 ;
int start()
{
//----
for (int k=OrdersTotal()-1;k>=0;k--)//Начинаем перебор всех открытых ордеров начиная с конца
{
RefreshRates();//Обновляем котировки, необходимо при модификации или закрытии ордеров
if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true&&OrderSymbol()==Symbol())//Выбираем ордер с номером из цикла, и проверяем, совпадает ли символ ордера с текущим
{
int cmd=OrderType();//В переменной cmd будем хранить тип ордера
if(cmd>1)//Нас интересуют только отложенные ордеры
{
//Что-то делаем
}
if (cmd==OP_BUY)//А вдруг на покупку ордер?
{
t=t + 1;
Alert("Новый ордер на покупку "+t);
}
if (cmd==OP_SELL)//Или на продажу?
{
y=y + 1;
Alert("Новый ордер на продажу "+y);
}
}
}
//----
return(0);
}
А зачем полный перебор. Если бы Вы сохраняли тикеты открытых позиций в массиве, то было бы понятно. А так мы похоже о разном рассуждаем
А зачем полный перебор. Если бы Вы сохраняли тикеты открытых позиций в массиве, то было бы понятно. А так мы похоже о разном рассуждаем
Я и имел ввиду может массивы прикрутить .Но теперь понял что это не нужно . Буду тестирывать .Спасибо.Только вот почему не нужно не понял .
Только вот не пойму почему в вашем вареанте не будет срабатывать " // Ваша обработка "
при каждом тике . Что выступает в роли фильтра ? Сравнение и обнуление PrevOrdersTotal=pos;?
static int PrevOrdersTotal=0;
int pos=OrdersTotal()-1;
if (PrevOrdersTotal!=pos) {
if (OrderSelect(pos, SELECT_BY_POS)) {
// Ваша обработка
}
}
PrevOrdersTotal=pos;
Я и имел ввиду может массивы прикрутить .Но теперь понял что это не нужно . Буду тестирывать .Спасибо.Только вот почему не нужно не понял .
Только вот не пойму почему в вашем вареанте не будет срабатывать " // Ваша обработка "
при каждом тике . Что выступает в роли фильтра ? Сравнение и обнуление PrevOrdersTotal=pos;?
Лучше наверно все-таки сделать малость по другому
Корректнее будет
static int PrevOrdersTotal=-1; int pos=OrdersTotal()-1; if (PrevOrdersTotal<pos) { if (OrderSelect(pos, SELECT_BY_POS)) { // Ваша обработка } } PrevOrdersTotal=pos;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как реализовать в этом советнике задумку, что бы ---->
Alert
срабатывал один раз, при открытии нового ордера ?
Может там цикл по порядковой позиции ордера сделать? Или не поможет?
int y=0;
int t=0 ;
int start()
{
//----
for (int k=OrdersTotal()-1;k>=0;k--)//Начинаем перебор всех открытых ордеров начиная с конца
{
RefreshRates();//Обновляем котировки, необходимо при модификации или закрытии ордеров
if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true&&OrderSymbol()==Symbol())//Выбираем ордер с номером из цикла, и проверяем, совпадает ли символ ордера с текущим
{
int cmd=OrderType();//В переменной cmd будем хранить тип ордера
if(cmd>1)//Нас интересуют только отложенные ордеры
{
//Что-то делаем
}
if (cmd==OP_BUY)//А вдруг на покупку ордер?
{
t=t + 1;
Alert("Новый ордер на покупку "+t);
}
if (cmd==OP_SELL)//Или на продажу?
{
y=y + 1;
Alert("Новый ордер на продажу "+y);
}
}
}
//----
return(0);
}