ребят, такой вопрос, ответа на который нигде не нашел. какую функцию написать в индикатор чтобы новые бары не открывались и тикали в нулевом баре, пока не сработает мое условие, прошу ответить в лс))
Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?
Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?
Здравствуйте! 2020.10.03_13:33 GMT+3. Я взял стандартный советник Moving Average для МетаТрейдера 4. И стал его менять так, чтобы он стал прибыльным. При попытке описать условия для закрытия сделки при помощи функции OrderProfit() в тестере стратегий советник перестал закрывать сделки по этому условию. До закрытия сделки у него дело не доходит. Я, правда, сомневаюсь, что написал условия для закрытия сделки правильно. Иначе бы советник закрывал сделки. Наверно попробую написать через цену открытия сделки и последние цены. После того, как достигнута максимальная разница между ценой открытия сделки и последней ценой и эта разница уменьшается, -- закрыть сделку. Прилагаю файл советника. 13:50 GMT+3.
Николай Никитюк: Здравствуйте! 2020.10.03_13:33 GMT+3. Я взял стандартный советник Moving Average для МетаТрейдера 4. И стал его менять так, чтобы он стал прибыльным. При попытке описать условия для закрытия сделки при помощи функции OrderProfit() в тестере стратегий советник перестал закрывать сделки по этому условию. До закрытия сделки у него дело не доходит. Я, правда, сомневаюсь, что написал условия для закрытия сделки правильно. Иначе бы советник закрывал сделки. Наверно попробую написать через цену открытия сделки и последние цены. После того, как достигнута максимальная разница между ценой открытия сделки и последней ценой и эта разница уменьшается, -- закрыть сделку. Прилагаю файл советника. 13:50 GMT+3.
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type// if(OrderType()==OP_BUY)
{
/*
if(OrderProfit()>0.0)
{ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
if(OrderProfit()>ProfitMax)
{ProfitMax=OrderProfit(); break;}
if((ProfitMax-DiffProfit)<0.0) break;
if((ProfitMax-DiffProfit)>OrderProfit())
*/if(DiffProfit<OrderProfit()) // Исходя из ваших условий, то вот
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
elsebreak;
break;
}
if(OrderType()==OP_SELL)
{
/*
if(OrderProfit()>0.0)
{ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
if(OrderProfit()>ProfitMax)
{ProfitMax=OrderProfit(); break;}
if((ProfitMax-DiffProfit)<0.0) break;
if((ProfitMax-DiffProfit)>OrderProfit())
*/if(DiffProfit<OrderProfit()) // Исходя из ваших условий, то вот
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
elsebreak;
break;
}
}
//+------------------------------------------------------------------+
Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))
Open=new CiOpen();
if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
return;
//---int bars=10;
double Temp[]; //Создаем массив для временного хранения входных данныхArraySetAsSeries(Temp,true); //Устанавливает флаг AS_SERIES
Open.GetData(0,bars,Temp); //Копируем необходимые данные в массив Temp
InputNormalize(Temp,bars); //Нормализуем данные в массиве
//---Как заменить значения в Open значениями из Temp?---
}
//+------------------------------------------------------------------+//| функция нормализации входных данных |//+------------------------------------------------------------------+void InputNormalize(double &buffer[],int bars)
{
double d1=-1;
double d2=1;
double x_min=buffer[ArrayMinimum(buffer,0,bars)];
double x_max=buffer[ArrayMaximum(buffer,0,bars)];
for(int i=0; i<bars; i++)
{
buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
}
return;
}
Уверен, что это можно сделать проще! В этом случае прошу научить меня)
Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))
Уверен, что это можно сделать проще! В этом случае прошу научить меня)
Читайте документацию по языку
Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение. Предопределенные переменные константны и не могут быть изменены из mql4-программы.
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
Алексей, спасибо! Теперь понятно, что это невозможно.
Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.
Алексей, спасибо! Теперь понятно, что это невозможно.
Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.
Поскольку вопрос задан в разделе mql4, я и отвечал относительно mql4. В вашем вопросе нет никаких намёков на mql5. Но результат одинаков.
Здравствуйте!
Запутался в трех соснах:
Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?
Спасибо!
Здравствуйте!
Запутался в трех соснах:
Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?
Спасибо!
x = c + b*10 + a*100
x = c + b*10 + a*100
Госспадии! А я голову ломаю! Спасибо!
Здравствуйте! 2020.10.03_13:33 GMT+3. Я взял стандартный советник Moving Average для МетаТрейдера 4. И стал его менять так, чтобы он стал прибыльным. При попытке описать условия для закрытия сделки при помощи функции OrderProfit() в тестере стратегий советник перестал закрывать сделки по этому условию. До закрытия сделки у него дело не доходит. Я, правда, сомневаюсь, что написал условия для закрытия сделки правильно. Иначе бы советник закрывал сделки. Наверно попробую написать через цену открытия сделки и последние цены. После того, как достигнута максимальная разница между ценой открытия сделки и последней ценой и эта разница уменьшается, -- закрыть сделку. Прилагаю файл советника. 13:50 GMT+3.
Здравствуйте!
Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))
Уверен, что это можно сделать проще! В этом случае прошу научить меня)
Здравствуйте!
Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))
Уверен, что это можно сделать проще! В этом случае прошу научить меня)
Читайте документацию по языку
Читайте документацию по языку
Алексей, спасибо! Теперь понятно, что это невозможно.
Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.
Алексей, спасибо! Теперь понятно, что это невозможно.
Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.
Поскольку вопрос задан в разделе mql4, я и отвечал относительно mql4. В вашем вопросе нет никаких намёков на mql5. Но результат одинаков.