Пытаюсь написать первый советник, необходимо написать функцию, условие такое:
Если ордеров на продажу равно 1, а ордеров на покупку меньше 10 ,
то выставляем один стоповый ордер (buy limit) на покупку на (n- пунктов от реальной цены)
Vladimir Karputov:
Пишите на MQL5?
нет, из терминала мт4
Пример функции подсчета ордеров
если используете магик ордера то нужно еще вставить проверку
Капец какой-то , не возможно нормально вставить части кода при чередовании текста. Функция подсчета ордеров
{
int n=0;
int total=OrdersTotal();
for(int i=0; i<total; i++)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()!=type)continue;
n++;
}
return(n);
}
...
если я правильно понял, то проверку для магик ордера в данном коде нужно будет добавить таким образом:
int total_order(int type)
{
int n=0;
int total=OrdersTotal();
for(int i=0; i<total; i++)
{
if(OrderMagicNumber()!=magic)continue;
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()!=type)continue;
n++;
}
return(n);
}
если я правильно понял, то проверку для магик ордера в данном коде нужно будет добавить таким образом:
int total_order(int type)
{
int n=0;
int total=OrdersTotal();
for(int i=0; i<total; i++)
{
if(OrderMagicNumber()!=magic)continue;
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()!=type)continue;
n++;
}
return(n);
}
Неправильно, строчку с проверкой на магик нужно перенести за строчку OrderSelect.
Читаем справку
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Неправильно, строчку с проверкой на магик нужно перенести за строчку OrderSelect.
Читаем справку
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Вы бы не могли написать саму функцию полностью, без всяких мейджиков и так далее, когда я освоюсь с данным языком программирования, я сам их постепенно добавлю.
Я пользуюсь языком на уровне копировать - вставить и не испытываю от этого дискомфорта. Я сравниваю несколько советников с открытыми кодами ( в некоторых иногда попадаются хорошие коментарии.
В настоящее время мне пришла идея вставить в советник функцию, где ордер на продажу всегда должен быть один, а ордеров на покупку может быть открыто не больше 10 или не больше 5 двух трех неважно, при закрытии одного из ордеров должен выставляться отложенный ордер, имея образец функции я попытаюсь с этим поиграть.
Обратившись тут на форуме с просьбой не думаю что я тут кого-то удивил своей супер-пупер навороченной идеей или стратегией которую я тщательно скрываю...
Спасибо Sergey Gritsay за отдельно написанную функцию подсчета ордеров мне она тоже когда-нибудь пригодится.
Вы бы не могли написать саму функцию полностью, без всяких мейджиков и так далее, когда я освоюсь с данным языком программирования, я сам их постепенно добавлю.
Я пользуюсь языком на уровне копировать - вставить и не испытываю от этого дискомфорта. Я сравниваю несколько советников с открытыми кодами ( в некоторых иногда попадаются хорошие коментарии.
В настоящее время мне пришла идея вставить в советник функцию, где ордер на продажу всегда должен быть один, а ордеров на покупку может быть открыто не больше 10 или не больше 5 двух трех неважно, при закрытии одного из ордеров должен выставляться отложенный ордер, имея образец функции я попытаюсь с этим поиграть.
Обратившись тут на форуме с просьбой не думаю что я тут кого-то удивил своей супер-пупер навороченной идеей или стратегией которую я тщательно скрываю...
Спасибо Sergey Gritsay за отдельно написанную функцию подсчета ордеров мне она тоже когда-нибудь пригодится.
если я все правильно понял, то моя функция с мейджиком должна выглядеть так:
//-----------------------глобальные переменные------------------------------------
extern int Magic =123;
//-----------------------функция подсчета ордеров------------------------------------
int CountTrades(int otype,)
{
int count =0; // обнуляем переменную
for(int i = OrdersTotal() - 1; i >= 0; i--) // перебор открытых и отложеных ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true) // если получилось выбрать ордер
{
if(OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic) // проверяем наш ли ордер
{
count++; // плюсуем наши ордера
}
}
}
return(count);
}
//---------------------------------------------------------
если честно такой вариант написания кода мне более ближе .
Но насколько я все правильно понимаю это всего лишь часть функции которую я хочу написать,
предположу что выше этой функции я должен написать дополнительно примерно такой код:
если я все правильно понял, то моя функция с мейджиком должна выглядеть так:
//-----------------------глобальные переменные------------------------------------
extern int Magic =123;
//-----------------------функция подсчета ордеров------------------------------------
int CountTrades(int otype,)
{
int count =0; // обнуляем переменную
for(int i = OrdersTotal() - 1; i >= 0; i--) // перебор открытых и отложеных ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true) // если получилось выбрать ордер
{
if(OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic) // проверяем наш ли ордер
{
count++; // плюсуем наши ордера
}
}
}
return(count);
}
//---------------------------------------------------------
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь написать первый советник, необходимо написать функцию, условие такое:
Если ордеров на продажу равно 1, а ордеров на покупку меньше 10 ,
то выставляем один стоповый ордер (buy limit) на покупку на (n- пунктов от реальной цены)