С ходу ошибка - не знаю, правда, в ней ли дело:
for(cnt=1;cnt<=OrdersTotal();cnt++)
замените на
for(cnt=0;cnt<OrdersTotal();cnt++)
for(cnt=1;cnt<=OrdersTotal();cnt++)
замените на
for(cnt=0;cnt<OrdersTotal();cnt++)
Еще:
Highest(NULL,0,MODE_HIGH,NBars,0)];
В МТ4 изменили порядок аргументов.
sum+=MathAbs(Open[pos]-Close[pos]);
вы ведь используете Close нулевого бара - в реале, у вас его не будет
prevtime = Time[0];
не достигается, если раньше выход по return
if(pos<Length) pos=Length;
for(i=1;i<Length;i++,pos--)
sum+=MathAbs(Open[pos]-Close[pos]);
while(pos>=0)
{
sum+=MathAbs(Open[pos]-Close[pos]);
Buffer[pos]=(sum/Length)*10000;
sum-=MathAbs(Open[pos+Length-1]-Close[pos+Length-1]);
pos--;
}
что-то подозрительное, но пальцем указать не могу :)
Highest(NULL,0,MODE_HIGH,NBars,0)];
В МТ4 изменили порядок аргументов.
sum+=MathAbs(Open[pos]-Close[pos]);
вы ведь используете Close нулевого бара - в реале, у вас его не будет
prevtime = Time[0];
не достигается, если раньше выход по return
if(pos<Length) pos=Length;
for(i=1;i<Length;i++,pos--)
sum+=MathAbs(Open[pos]-Close[pos]);
while(pos>=0)
{
sum+=MathAbs(Open[pos]-Close[pos]);
Buffer[pos]=(sum/Length)*10000;
sum-=MathAbs(Open[pos+Length-1]-Close[pos+Length-1]);
pos--;
}
что-то подозрительное, но пальцем указать не могу :)
OrderModify(OrderTicket(),Ask,Low[1],OrderTakeProfit(),0,Blue);
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE) Функция модифицирует (изменяет) параметры ранее открытых позиций или отложенных ордеров Возвращает ИСТИНА при успешном завершении функции. Возвращает ЛОЖЬ при неудачном завершении функции. Для того чтобы получить информацию об ошибке, вызовите GetLastError(). Параметры ticket - Уникальный порядковый номер ордера. price - Новая цена открытия (только для отложенных ордеров). stoploss - Новый уровень ограничения убытка (stoploss). takeprofit - Новый уровень получения прибыли (profit-taking). expiration - Дата/серверное время истечения ордера (только для отложенных ордеров). arrow_color - Цвет стрелки на графике.Если параметр отсутствует или его значение равно CLR_NONE, то символ стрелки на графике не отображается.
Новую цену (второй параметр) можно устанавливать только для отложенных ордеров, а ты пытаешься изменить цену сделки тогда , когда она уже совершена. Вместо Ask поставь OrderOpenPrice( ) или наверняка можно пропустить этот параметр т.е. просто две запятые подряд, или поставить 0 (попробуй).
вообще в логах должно писаться почему не изменен ордер, почитай
С ходу ошибка - не знаю, правда, в ней ли дело:
for(cnt=1;cnt<=OrdersTotal();cnt++)
замените на
for(cnt=0;cnt<OrdersTotal();cnt++)
for(cnt=1;cnt<=OrdersTotal();cnt++)
замените на
for(cnt=0;cnt<OrdersTotal();cnt++)
Да, это верно, исправил.
Еще:
Highest(NULL,0,MODE_HIGH,NBars,0)];
В МТ4 изменили порядок аргументов.
Highest(NULL,0,MODE_HIGH,NBars,0)];
В МТ4 изменили порядок аргументов.
Каким образом изменен? В словаре вроде также.
sum+=MathAbs(Open[pos]-Close[pos]);
вы ведь используете Close нулевого бара - в реале, у вас его не будет
вы ведь используете Close нулевого бара - в реале, у вас его не будет
В реале будет текущая цена - она и будет Close.
prevtime = Time[0];
не достигается, если раньше выход по return
не достигается, если раньше выход по return
Здесь можно поподробнее, выход по какому return?
if(pos<Length) pos=Length;
for(i=1;i<Length;i++,pos--)
sum+=MathAbs(Open[pos]-Close[pos]);
while(pos>=0)
{
sum+=MathAbs(Open[pos]-Close[pos]);
Buffer[pos]=(sum/Length)*10000;
sum-=MathAbs(Open[pos+Length-1]-Close[pos+Length-1]);
pos--;
}
что-то подозрительное, но пальцем указать не могу :)
for(i=1;i<Length;i++,pos--)
sum+=MathAbs(Open[pos]-Close[pos]);
while(pos>=0)
{
sum+=MathAbs(Open[pos]-Close[pos]);
Buffer[pos]=(sum/Length)*10000;
sum-=MathAbs(Open[pos+Length-1]-Close[pos+Length-1]);
pos--;
}
что-то подозрительное, но пальцем указать не могу :)
Здесь вроде все верно, индикатор нормально работает. Это я в Moving Average подглядел.
Новую цену (второй параметр) можно устанавливать только для отложенных ордеров, а ты пытаешься изменить цену сделки тогда , когда она уже совершена. Вместо Ask поставь OrderOpenPrice( ) или наверняка можно пропустить этот параметр т.е. просто две запятые подряд, или поставить 0 (попробуй).
Попробовал, не помогает. В тестере трейлинг должен ведь работать?
А в лог что пишет?
трейлинг работает, впрочем это выражение не верно т.к. встроенного трейлинга в советнике нет, а код должен отрабатывать за исключением объявленных ограничений
трейлинг работает, впрочем это выражение не верно т.к. встроенного трейлинга в советнике нет, а код должен отрабатывать за исключением объявленных ограничений
А в лог что пишет?
трейлинг работает, впрочем это выражение не верно т.к. встроенного трейлинга в советнике нет, а код должен отрабатывать за исключением объявленных ограничений
трейлинг работает, впрочем это выражение не верно т.к. встроенного трейлинга в советнике нет, а код должен отрабатывать за исключением объявленных ограничений
В логах ничего не нашел, каким образом он работает, у меня что есть этот код, что нет - один, извините, хрен да редька.
if (OrdersTotal()==1) return(0); // нет ни одного открытого ордера
ты артист однако, вначале старт сразу выкидываешь советника, конечно ни о каких трейлингах не может быть речи, т.к.
1. коммент не верный (если есть один ордер)
2. при его наличии советник прекращает работу, а он у тебя после первогй сработки старт единственный
и дальше ты его всегда return(0)
в названиях индикаторов лучше не использовать кирилицу, тем более с пробелами

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот что у меня есть:
Это используемый индикатор: